Po hektickém závěru první sekce našeho seriálu o
Javě a Caché, popisující tvorbu persistentních Caché
tříd z prostředí Javy, nastal čas trochu si
odpočinout a zvolnit tempo.
V následujících dílech seriálu si podrobně
ukážeme, jak můžeme využít možnosti nabízené
databázovým strojem Caché pro tvorbu funkčně bohatých
objektově orientovaných databázových Java aplikací.
V tomto díle si popíšeme architekturu propojení
mezi zmíněnými technologiemi, Caché na straně
databázového (a též případně aplikačního) serveru a
Javy na straně více, či méně, „tlustého“ klienta.
V zásadě lze k datům uloženým v Caché přistupovat
dvojím způsobem:
- Vazba Caché – Java
Tento způsob poskytuje přímočarý způsob propojení
Caché tříd (a nemusí se jednat jen o persistentní
třídy) a Java aplikací. Základem tohoto způsobu
propojení databáze na straně jedné a aplikace na
straně druhé, je automatické vytvoření proxy Java
tříd pro každou uživatelem označenou Caché třídu.
Proxy Java objekty zajišťují přístup k vlastnostem,
metodám a jiným položkám umístěným v definici Caché
tříd. Proxy třídy jsou čistě Java třídy, obsahují
pouze standardní Java kód. Proxy třídy zajišťují
plnou podporu pro izolaci a práci s transakcemi.
Navíc, systémový třídy zajišťující vazbu mezi Caché
a Javou, obsahují kód který se stará o inteligentní
kešování záznamů a tím redukují síťový provoz mezi
klientem a serverem. - Caché JDBC Ovladač
Prostřednictvím JDBC ovladače lze ke Caché
přistupovat jako ke klasické relační databázi. Tedy
lze pomocí SQL manipulant s daty vystavenými jako
tabulky či náhledy a spouštět metody Caché tříd,
pokud jsou označeny jako uložené procedury. Caché
JDBC je Level 4 ovladač podporující verzi 3.0 JDBC
API.
Samozřejmě je možno pro dosažení maximální
flexibility použít oba dva přístupy současně.
Vazba Caché – Java
Pomocí prostředků této vazby lze manipulovat s
daty vystavenými v persistentních třídách Caché,
stejně tak jako vykonávat aplikační kód zapouzdřený v
metodách nebo vložených dotazech tříd.
Uvedená vazba sestává z následujících komponent:
- Generátor Java proxy tříd
Jedná se o jednu z několika definovaných projekcí,
které lze spolu s Caché třídami použít a to
konkrétně projekci do Javy. Mimochodem, kromě
projekce vytvářející Java proxy třídy je možno
tvořit projekce do C++, .NET jazyků nebo sestavovat
vlastní projekce.
- Knihovna Java tříd vazby
Toto je sada Java tříd zajišťující samotné
propojení klienta s databází, volání metod Caché a
různé pomocné operace jako serializaci a
deserializaci objektů a správu objektů Caché. Třídy
knihovny se nacházejí spolu s nám již známými
třídami knihovny Jalapeno v souboru CacheDb.jar.
Tento soubor lze nalézt v adresáři
cachesys/dev/java/lib/JDK1.x (x=4 nebo 5). Již
název adresáře napovídá, že pro práci s touto
vazbou je nutno mít runtime Java ve verzi 1.4 a
vyšší. Caché samozřejmě využívá i nejnovější
vlastnosti Java 1.5 jako například generiky nebo
boxování, či již zmíněné anotace, proto je soubor
CacheDB.jar ve dvou verzích – podle verze Javy.
Knihovna poskytuje různé typy připojení, podle toho
zda aplikace vyžaduje spíš bohatou funkčnost (tzv.
full binding) nebo preferuje maximální výkon (light
binding).
- Server Caché objektů
Velmi výkonný proces, který zprostředkovává
jakoukoliv komunikaci mezi klientem a Caché
serverem. Komunikuje pomocí standardního síťového
protokolu TCP/IP a běží na všech operačních
systémech, na kterých lze provozovat Caché. Tento
server je součástí nejen Java vazby ale i ostatních
vazeb, napátkou např. .NET, JDBC, ODBC, Perl,
Python atd…
Následující obrázek znázorňuje postup při tvorbě
Caché – Java aplikací:
Při kompilaci Caché tříd se k označeným třídám
automaticky generují Java proxy třídy, které pak za
běhu programu prostřednictvím knihovny Java tříd
komunikují se svými protějšky na straně Caché a jsou
s nimi synchronizovány.
V praxi to vypadá takto:
- Vývojář definuje třídy v Caché, jednak třídy
persistentní, reprezentující úložiště dat, jednak
(může ale nemusí) třídy implementující aplikační
logiku pomocí svých metod.
- Při kompilaci tříd se vytvoří proxy Java tříd
nejen označených tříd, ale i tříd, na něž se daná
třída odkazuje a to rekurzivně. Není tedy nutno
zdlouhavě procházet všechny třídy v projektu.
Vygenerované Java třídy obsahují veškeré potřebné
metody, tedy jak metody obsažené v definici
samotných tříd, tak metody přidané v průběhu
kompilace na straně Caché včetně přístupových metod
pro vlastnosti Caché tříd.
- Za běhu programu je pak ze strany Javy navázáno
spojení do Caché a prostřednictvím objektu spojení
(továrna) lze následně instancovat proxy třídy a
pracovat s nimi jako by to byly – a také že jsou –
klasické Java třídy. Vše ostatní, tj. synchronizace
s instancemi na straně Caché je prováděno
automaticky.
Jak takovou aplikaci napsat a co se přesně děje za
běhu, si ukážeme detailně v následujících dílech.