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
. Toto v daném případě není
java.util.List
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 |
PRIMITIVEDATATYPES |
1, 0 |
Určuje, zda datové typy Caché budou v proxy |
NEWCOLLECTIONS |
1, 0 |
Tento parametr je užitečný hlavně u |
RECURSIVE |
1, 0 |
Určuje, zda se při sestavování proxy třídy |
POJO |
1, 0 |
Určuje, zda se vystavené třídy mají |
CHECKUPTODATE |
1, 0 |
Určuje, zda se projekce mají generovat |
V příštím díle si ukážeme práci s vloženými dotazy
Caché tříd.