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.