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:

  1. 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.
  2. 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í:

JavaaCacheV

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.