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>