Dnes si ukážeme práci s pokročilými typy vlastností
Caché tříd a kolekcemi a jejich projekci do Javy.

K tomu si upravíme v Caché Studiu třídu ucto.demo.Denik; přidáme následující dvě
vlastnosti

/// seznam oprávněných osob, které smí provádět
účetní zápisy v dané úč. jednotce


Property opravneniUzivatele As list Of %String(JAVATYPE
= "java.util.List");





/// různé dokumenty vztahující se k dané účetní
jednotce


Property zivnostenskyList As %Stream.GlobalBinary;





Property poznamka As %GlobalCharacterStream;

Dále ještě přidáme definici projekce:

Projection Java As %Projection.Java(ROOTDIR =
"C:\Software\Projects\Java\netbeans
projects\mojeucto\src\mojeucto\");

Caché podporuje dva typy vícehodnotových
vlastností, a to jednak pole (asociativní) a seznamy.
Při generování projekce do Javy Caché automaticky
převádí tyto struktury do standardních Java tříd
java.util.Map, respective java.util.List. My jsme u vlastnosti opravneniUzivatele uvedli explicitně,
prostřednictvím parametru JAVATYPE, že Caché seznam
má být vystaven v Javě jako
java.util.List
. Toto v daném případě není
třeba, generátor by to udělal automaticky, ale berte
to jako ukázku toho, jak je možno uživatelsky
ovlivnit datové typy vlastností proxy tříd.

Výsledný vygenerovaný zdrojový kód vlastnosti opravneniUzivatele v Javě tudíž vypadá takto:

public java.util.List getopravneniUzivatele()
throws com.intersys.objects.CacheException {

...
implementace


return
(java.util.List)(cobj.newJavaInstance());

}

Pro vlastnost zivnostenskyList se
vygenerují dvě metody, jedna pro vstupní a druhá pro
výstupní operace:

public com.intersys.objects.CacheInputStream
getzivnostenskyListIn() throws
com.intersys.objects.CacheException {

...
implementace


return (db.getInputStream (cobj));

}





public com.intersys.objects.CacheOutputStream
getzivnostenskyListOut() throws
com.intersys.objects.CacheException {

...
implementace


return (db.getOutputStream (cobj));

}

K vlastnosti poznamka se též vygenerují
dvě metody, ale budou vracet třídy Reader nebo
Writer, neboť poznámka je znakový řetězec.

Máme-li vystavenou Java projekci třídy Denik,
můžeme vložit nová data do databáze třeba takto:

//... deklarace a inicializace

String url="jdbc:Cache://localhost:56773/" + namespace;



/* Connect to this machine, in the SAMPLES namespace */

dbconnection = CacheDatabase.getDatabase (url, username, password);



// ! zjednoduseni: mame pouze jeden denik, s id = 1

denik = (Denik)Denik._open(dbconnection,new Id(1));

System.out.println(denik.getucetniJednotka());



// prida noveho opravneneho uzivatele;

denik.getopravneniUzivatele().add(ou);

denik.save();

System.out.println(denik.getopravneniUzivatele().size());

dbconnection.closeObject(denik.getOref());

denik = null;



// zmenime / pridame poznamku

denik.getpoznamkaOut().write("Toto je druhy test!");

denik.save();



// podobne i binarni data - viz plny priklad



/* Close the connection */

dbconnection.close();

Úplný zdrojový kód příkladu naleznete zde.

Nyní ještě probereme možnosti uživatelského
upřesnění způsobu generování projekcí do java tříd,
slíbené z minula.

Třída %Projection.Java, která je
zodpovědná za tvorbu proxy tříd, má několik
parametrů, určujících chování procesu projekce a
výsledku.

Základním parametrem, s nímž jsme se již seznámili,
je parametr ROOTDIR. Tento parametr určuje kmenový
adresář, ve kterém se budou tvořit podadresáře podle
balíčku Caché třídy a kde budou uloženy proxy třídy.

Dalšími parametry jsou mj. tyto, uvedené v tabulce:

Název Hodnoty Popis

JAVADOC

1, 0

Určuje, zda se bude automaticky generovat
příslušná dokumentace

PRIMITIVEDATATYPES

1, 0

Určuje, zda datové typy Caché budou v proxy
třídách vystaveny jako primitivní datové typy
Javy

NEWCOLLECTIONS

1, 0

Tento parametr je užitečný hlavně u
starších aplikací, určuje, zda se datové typy
Caché typu seznam či pole budou v Javě
vystavovat jako java.util.List či
java.util.Map, nebo zda použijí dnes již
zavržené třídy z knihovny CacheDB.jar

RECURSIVE

1, 0

Určuje, zda se při sestavování proxy třídy
mají generovat i projekce závislých tříd

POJO

1, 0

Určuje, zda se vystavené třídy mají
generovat jako POJO (klasické obyčejné Java
třídy) objekty nebo jako původní proxy třídy

CHECKUPTODATE

1, 0

Určuje, zda se projekce mají generovat
vždy, nebo jen pro třídy, které byly změněny
od poslední kompilace

V příštím díle si ukážeme práci s vloženými dotazy
Caché tříd.