kbmMW (n-tier framework) – Pár informací z praxe

vložil Petr Slípek 14. listopadu 2012 00:35

Úvod

Před časem mě Radek Červinka požádal, zda bych něco nenapsal o kbmMW (components4developers.com) – vícevrstvém frameworku pro Delphi. Vzhledem k tomu, že kbmMW používáme v našich produktech již od roku 2008, jsem si řekl: „Proč ne?“. Víceméně se pokusím sepsat pár informací o tom, proč jsme si vybrali kbmMW, co nám to přineslo a jaké máme zkušenosti s danou sadou komponent.

Proč kbmMW?

Od začátku jsme používali klasickou architekturu klient / server pro síťovou komunikaci v našem systému. Celá funkcionalita byla na straně klientské aplikace a potřebné informace se tak přenášely po síti až na pracovní stanici. S postupem času přibýval objem přenášených dat společně s tím, jak se zvyšovaly schopnosti vyvíjeného systému. Protože veškerý vývoj u nás probíhá v edici Delphi Professional, padlo rozhodnutí zakoupit nějaký n-tier framework. Tehdy jsme objevili pouze DataAbstract od RemObjects a bkmMW od Components4Developers. Vzhledem k našim požadavkům jsme se nakonec rozhodli pro kbmMW.

Co jsme od n-tier frameworku očekávali?

Přenesení zátěže na server.

  • Vzdálené volání funkcí aplikačního serveru.
  • Snadný přenos libovolných dat (nejenom databázových) mezi klientem a serverem.

Systém kompatibilní s našimi stávajícími nástroji

  • NexusDB – databázový server
  • Report Builder – generování tiskových sestav

Přinesení nových možností pro vyvíjený systém

  • Databázová univerzálnost. Možnost napojení na MS SQL, Oracle, apod. bez nutnosti změny v klientské aplikaci.
  • Univerzální komunikační protokoly pro výměnu dat s externími systémy. Podpora SOAP apod.

Přechod

Nakonec jsme se tedy rozhodli pro kbmMW a nastalo období přepsání systému tak, abychom využili možností kbmMW. Nakonec byl celý proces relativně snadný a rychlý. Kompletní přechod z klient / server systému na n-tier architekturu nám zabral ani ne týden.

Pravda, před samotným přechodem jsme se nejprve museli naučit s kbmMW pracovat a pochopit způsob, jak kbmMW funguje. Tady jsme ale narazili na pár problémů. Na webu výrobce jsou k dispozici tutoriály. Bohužel některé z nich jsou na starší verzi kbmMW než je ta aktuální, ale současně aktuální verze funguje trochu jinak než ta, na kterou je tutoriál napsán.

Obrovská výhoda kbmMW je zejména ve velice snadném přenosu TDataSetu mezi aplikačním serverem a klientskou aplikací včetně zpětného přenosu změněného TDataSetu zpět na server a uložení provedených změn do databáze. V klientské aplikaci jsme tak pouze zaměnili komponenty TnxQuery a TnxTable (obdoba TQuery a TTable u NexusDB serveru) za TkbmMWXClientQuery (databázově neutrální client query z kbmMW). Velice nám pomohlo to, že v našem systému jsme měli centralizovaný kód pro inicializaci TnxQuery a TnxTable komponent. Postačilo nám tak pouze změnit jednu unitu. Kupodivu vše fungovalo hned od začátku bez nějakých větších problémů.

Dalším krokem je přesun funkcionality ze strany klientské aplikace na server. S tím se potýkáme dodnes. Přechod z klient / server na n-tier architekturu je přece jenom v tomto ohledu mnohem náročnější. Pro nás byl důležitý fakt, že jsme byli schopni vydat aktualizaci aplikace s využitím kbmMW v relativně krátkém čase. Přesun funkcionality na server pak lze realizovat postupně.

Současnost – jak to funguje

S odstupem času musím říct, že změny rozhodně nelitujeme. kbmMW se ukázal jako velice stabilní n tier framework. Navíc jsme začali využívat další funkce, které kbmMW nabízí. Aktuálně opouštíme Intraweb (tvorba www aplikací v Delphi) a přecházíme na implementaci standardního REST serveru ve spojení s www serverem. Obojí funkcionalitu (http server + AJAX transport stream format) již kbmMW bez potíží podporuje. Další velikou výhodou pro nás je nativní implementace JSON parseru + jednoduchý template engine pro generování www stránek.

Jediným problémem tak zůstává o něco méně spolehlivá technická podpora. Během implementace kbmMW jsme narazili na několik problémů. Bohužel odpovědi na naše dotazy jsme někdy dostali až po více než měsíci. Tady bych viděl veliký problém kbmMW. Ostatně stačí se podívat do diskuzních skupin a prohlédnout si historii dotazů.

O nás

Již více než 20 let se zabýváme vývojem SW pro učitele a pedagogy. Aktuálně vyvíjíme v Delphi XE2 a XE3 Professional a využíváme několik různých setů komponent. Mezi aktuálně používané komponenty a nástroje patří ModelMaker Code Explorer, MadExcept, Developer Express VCL, Report Builder, WPTools, SMImport, DW Script, kbmMW, ImageEn, NexusDB, BlockEngine, wPDF, JEDI VCL, Abbrevia a Rubicon. Více informací naleznete na adrese dosli.cz.

Poznámka editora: Impulsem k sepsaní byla poznámka Petra v konferenci

U nás jsme také řešili přechod z Intrawebu někam jinam. Stávající Intraweb
byl pro nás pod zátěží velice nestabilní.
Ukázku www rozhraní, které je postaveno na Intrawebu, je stále dostupná 
na http://demo.edubase.cz. 

Nakonec jsme  skončili na čistém REST serveru vytvořeném pomocí kbmMW 
(http://www.components4developers.com), který také slouží jako 
plnohodnotný HTTP(S) server. K datům pak přistupujeme pouze pomocí JavaScriptu. 
Výsledný převod aplikace do nové podoby nám zabral cca 2 měsíce 
a nemohu si kbmMW vynachválit. Sice se nejedná o tvorbu vzhledu stránek 
v pascalu, ale výsledná funkcionalita je někde úplně jinde. 
Samozřejmě na serveru je veškerý kód čistě v pascalu. 
Ukázku naleznete na adrese http://edoc.dosli.cz nebo http://edubazar.dosli.cz. 
Navíc jako skriptovací jazyk (včetně podpory šablon) u html stránek je použit 
Delphi Web Script (http://code.google.com/p/dwscript/). Funguje to skvěle.

a přiznám se že mne odkazované demo celkem potěšilo. Petr Slípek snad napíše i druhý díl, kde snad naznačí jak dělá web rozhraní za pomocí uvedených věcí.

Tagy: , , ,

Komponenty

Komentáře

14.11.2012 15:26:08 #

bullhead

Skvělý článek, zkušenosti z praxe jsou vždy ty nejrelevantnější!

A mám dotaz - proč "NexusDB – databázový server"? Jste první u koho v ČR vidím, že, ho reálně používá. Na zahraničních konferencích na něj občas narazím ale tady ne. Menší firmy mají MS nebo Firebirda, Postgres jsem také párkrát viděl a "databázi" MySql taky občas u WWW projektu vidím. U velkých jsem vlastně nic jiného než Oracle nepotkal (ať už na x86 nebo Solarisech).

Proč NexusDB?

děkuji za info

B.

bullhead

14.11.2012 18:07:09 #

Petr Slípek

Odpověď je docela jednoduchá. Všechny vyjmenované databázové servery mají docela komplikovanou instalaci a správu (zejména Oracle, MS SQL Server). My děláme systémy pro uživatele, kteří vůbec nerozumí technologiím. Vzhledem k tomu, jakou funkcionalitu a za jakých podmínek NexusDB nabízí, nebyla volba vůbec složitá. Stačilo si odpovědět na pár otázek:
1) Který DB server má plnou podporu SQL?
2) Který DB server lze získat včetně kompletních zdrojových kódů v Delphi?
3) Který DB server je plně modulární (viz níže)?
4) Který DB server lze šířit v rámci komerčních aplikací bez poplatků bez omezení počtu současně pracujících uživatelů?

Tady moc na výběr není. Napadá mě NexusDB a ElevateDB. Druhý jmenovaný moc neznám tak nemohu soudit.

AD 3) NexusDB je geniální DB v tom, jak se lze napojit na data a jak mít aplikaci "uvnitř" navrženou. Není problém vytvořit aplikaci, která se napojí na databázi a současně funguje jako databázový server pro ostatní aplikace. Případně mít aplikační server, který pracuje přímo s databází a současně také poskytuje databázové služby jiným aplikacím nebo serverům. Jedna klientská aplikace tak může například současně ukládat lokálně data do databáze na lokálním disku, načítat data z databázového serveru na jiném stroji a současně fungovat jako databázový server pro jiné aplikace. Navíc to vše bez jediné DLL knihovny. Zní to šíleně, ale je to velice efektivní metoda práce s databázemi. Navíc je vše v NexusDB řešeno formou pluginů a tudíž je velice dobře systém škálovatelný a upravitelný vlastním potřebám.

Petr Slípek

15.11.2012 12:51:05 #

bullhead

Děkuji za odpoveď!
B.

bullhead

16.11.2012 11:04:20 #

Leonell

Ja, co jsem se zabyval javou resp javovskymi aplikacnimi servery, tak tam byla (automaticky) podpora:
- entity beans (objektovou perzistence, ORM most proti relacnim DB) - pracovalo se s objekty, ne s DB
- timer beany (scheduler, treba pulnocni vygenerovani sestavy neplaticu a rozeslani mailem)
- message beany (do fronty NOVA_OBJEDNAVKA se zaregistruji aplikace TISK a MAIL, modul prijmu objednavek pouze posle info o nove objednavce a vlastni tisk pak z fronty provedou ty mapovane aplikace).

Pisu to pro informaci, protoze treba pod pojmem "aplikacni server" se v dotnetu chape jenom IIS, ktery sam o sobe nic takoveho nema.

Mohu se zeptat, jak to funguje tady u toho reseni na strane toho serveru?

Leonell

4.12.2012 1:03:11 #

Petr Slípek

No v kbmMW chápu jako aplikační server v podstatě to samé co ty jako javovský aplikační server. S Javou zkušenosti nemám, ale vše výše uvedené je možné s kbmMW udělat. Rozdíl je spíše v tom, jak. Mezi serverem a aplikací se dají poslat libovolná data včetně komplexních objektů. Jak s objekty server nebo klient naloží, je jenom na nich.
Na straně serveru může být klidně i několik desítek různých modulů, které obsahují určitou konkrétní funkcionalitu. Jakou, je čistě na autorovi.

1) Pro "entity beans" lze použít například TMS Aurelius či jiný ORM framework.

2) "timer beany" - V jednom našem serveru máme několik interních vláken, které řeší rozesílání e-mailů, kontrolu konce platnosti licence, indexaci obsahu pro fulltext atd.

3) "message beany" - například používáme při vzniku požadavku na zaslání mailu. Ten se uloží do fronty a timer si s těmito požadavky postupně poradí.

K bodu 3 ještě doplním, že kbmMW obsahuje také komplexní podporu pro messaging - oboustrannou komunikaci mezi serverem a klientem. Včetně mechanismu pro subscribe feedy apod. Krásnou ukázkou flexibility je vytvoření RemoteDesktop serveru a klienta. Funkcionalita alá TeamViewer včetně proxy serveru - pro obejití omezení daných případným firewallem. Na straně serveru 1 řádek kódu, na straně klienta cca 10 řádků kódu. Mezi serverem a klientem se posílají události myši a klávesnice a zpět změny na obrazovce.

Petr Slípek

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců