Objektově relační tool pro Oracle
10g+

Objektově relační mapování v programovacím jazyce
Java na novém pricipu, jímž je pouze kompatibilita s
databázi Oracle, což umožňuje vytvořit komplexní API
při malém rozsahu implementace s maximálním využítí
prostředků databáze, resp. databáze Oracle 10g+.

Výhody tohoto systému by mohly být:

  • oracle designed (současně i omezení)
  • efektivní SQL dotazy do databáze (podobné jako
    ručně psané)
  • cache-ování
  • režimy pro konkureční zpracování (version
    pattern, automatické lockování,..)
  • jednoduché a intuitivní API
  • přehledná přímočará implementace umožňující
    vlastní customizaci
  • jednoduchá konfigurace
  • možnost validace všech query v aplikaci v testu
    oproti XML definice
  • OpenSource licence

Čím bude dosaženo jednoduchosti a přitom
robustnosti systému? Jednoduchost bude zaručena tím,
že programátor nebude psát dotaz jako String-ové
query, ale pomocí API, které se bude mapovat jen na
Oracle SQL. Dotaz pak bude asi vypadat takto:

OMQuery query2 = OME.getObj(

OMFrom.def(O1.class,O2.class,query1),

OMCols.def(OMCols.ALL(O1.class,O2.class), query1.get(O3.ERROR), query1.get(O3.VISIBLE)),

OMCondJoin.def(

OMJ.def(O1.ID, OMJ.LEFT_JOIN, O2.FK),

OMJ.def(O2.ID, OMJ.JOIN, query1.get(O3.FK))),

OMCondValue.def(

OMC.def(O1.ID,OMC.op("="),OMC.val("X"))),

OMC.def(O1.ID,OMC.op("="),OMC.val("X")))));

Získání objektu/ů:

// one object

OMObject object = OME.getObject(query2);



// more objects

OMObject[] objects = OME.getCachedObjects(query2);

OMObject[] objects = OME.getAllObjects(query2);



// one concrete data object (equal to table row loaded from DB)

OMTable o1 = object.getOMTable(O1.class);

OMTable o2 = object.getOMTable(O2.class);

OMTable o3 = object.getOMTable(O3.class);

Modifikace objektu/tabulky:

PersonTable person = (PersonTable) o1;



if („Bin Ladin“.equals(person.getName() + „ “ + person.getSurname())) {

PersonProfileTable profile = (PersonProfileTable) o3;

profile.setVisible(false);

profile.setError(true);

query02.public();

} else {

query02.clean();

OME.rollbackConnection();

}



// in (try-)final section

OME.commitConnection();

Pro objekt profile půjde update
vygenerovat snadno, protože při selectu engine sám
doplní id tabulky PersonProfileTable
podle XML definice.

Příklad konfigurace tabulky PersonProfileTable:

<table>

<name>PersonProfileTable</name>

<cache>enable<cache/>

<cacheLoad>100K<cacheLoad/>

<cacheTimeOut>10M</cacheTimeOut>

<cachePriority>7<cachePriority/>

<concurrency>version</concurrency>

<primaryKey>

<column>

<columnName>ID</columnName>

<columnType>Integer</columnType>

</column>

</primaryKey>

<columns>

<column>

<columnName>visible</columnName>

<columnType>numberAsBoolean</columnType>

</column>

<column>

<columnName>error</columnName>

<columnType>numberAsBoolean</columnType>

</column>

</columns>

</table>