Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István (viczus@freemail.hu) Viczián István



Hasonló dokumentumok
B I T M A N B I v: T M A N

Adatbázisok* tulajdonságai

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Adatbázis-kezelés. Harmadik előadás

ADATBÁZISKEZELÉS ADATBÁZIS

A SZOFTVERTECHNOLÓGIA ALAPJAI

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Komponens modellek. 3. Előadás (első fele)

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

9. Entitás modulok. Nagy Gusztáv: Drupal 7 alapismeretek Fejlesztői verzió: október 6.

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Enterprise JavaBeans 1.4 platform (EJB 2.0)

BEVEZETÉS Az objektum fogalma

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Moodle verzióváltás Áttérés 1.9-ről 2.6-ra

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Adatbázis használat I. 5. gyakorlat

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Book Template Title. Author Last Name, Author First Name

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

A Java Persistence API PersistenceAPI / 3

NeoCMS tartalommenedzselő szoftver leírása

Adatbázis-kezelés, információs-rendszerek

Bevezetés: az SQL-be

PHP5 Új generáció (2. rész)

Adatkezelés. 11. előadás (Entity Beans)

Gate Control okostelefon-alkalmazás

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

Gate Control okostelefon-alkalmazás

RIA Rich Internet Application

CAD-CAM

Adatbázis-kezelő rendszerek alkalmazása. MongoDB beadandó feladat Programtervező informatikus szak

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Osztott alkalmazások fejlesztési technológiái Áttekintés

Szervlet-JSP együttműködés

A Java EE 5 plattform

Az Orbis adatbáziskezelő

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Háromrétegû tervezés. Kovácsmûhely. Ismerjük meg a köztes programréteg kialakítását a mod_perl/apache környezetben. Kiskapu Kft. Minden jog fenntartva

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

A HunPLUS-os AutoCAD Architecture 2010 teljesítményfokozása

Adatbázisok és adattárházak az információs rendszerek adatkezelői

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatbázisok, térképek, információs rendszerek. Elek István

BEVEZETÉS A SULINET DIGITÁLIS TUDÁSBÁZIS (SDT) HASZNÁLATÁBA

Az anyagdefiníciók szerepe és használata az Architectural Desktop programban

Oracle BI Administration Tool. Repository felépítése

Adataink biztonságos tárolása és mentése

Riak. Pronounced REE-ahk. Elosztott adattároló eszköz. Molnár Péter

JEE tutorial. Zsíros Levente, 2012

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for felhasználói kézikönyv 7. változat 5.kiadás

ProAnt Felhasználói Útmutató

Java és web programozás

Objektum Orientált Szoftverfejlesztés (jegyzet)

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal A teljes dokumentáció átírásra került

CONDOR. Felhasználói Leírás

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

MDAC - Microsoft Data Access Components

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Szoftver Tervezési Dokumentáció. Nguyen Thai Binh

A hierarchikus adatbázis struktúra jellemzői

Üdvözli Önöket A PGY3 tantárgy! Bakay Árpád dr. NETvisor kft (30) arpad.bakay@netvisor.hu

Adatbázis fejlesztés és üzemeltetés II. Szabó Bálint

1. Az adatbázis fogalma, fontosabb összetevÿi, felhasználási módjai

Adatbázisok I A relációs algebra

Adatbázisok webalkalmazásokban

Csoport neve: Kisiskolások Feladat sorszáma: 2. Feladat címe: Oktatási intézmény honlapja, oktatási naplóval. E-Project.

Adatközpont-központ: Storage Made Easy Regisztráció

JAVA webes alkalmazások

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

MySQL kontra MongoDB programozás. SQL és NoSQL megközelítés egy konkrét példán keresztül

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Óravázlat. az ECDL oktatócsomaghoz. 5. modul. Adatbáziskezelés. Krea Kft Budapest, Szőlő u 21. Tel/fax: / krea@krea.

MailMasterPlus API. fejlesztői dokumentáció

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Rendszertervezés 2. IR elemzés Dr. Szepesné Stiftinger, Mária

Internet Club Manager (Használati útmutató)

Az MS Access adatbázis-kezelő program

SZAKDOLGOZAT. Vígh Gábor DEBRECEN 2009.

UniPoll Feedback. Intézményi integrált kérdőívkészítő rendszer vélemény és visszajelzés gyűjtéshez.

JAVA PROGRAMOZÁS 3.ELŐADÁS

Kiskunmajsa és környéke turisztikai térinformatikai alkalmazás

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

A HunPLUS 2009 újdonságai

A.NET keretrendszer (.NET Framework) három alapvetõ összetevõbõl áll:

BBS-INFO Kiadó

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

Szakdolgozat egy fejezetének tartalomjegyzéke

Java és web programozás

Alkalmazások teljesítmény problémáinak megszűntetése

Adatbázis Rendszerek II. 8. Gyakorló környezet

Kivételkezelés, naplózás. Exception handling, logging

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

Java és web programozás

Átírás:

Java objektumok leképzése relációs adatbázisokra -vel Viczián István (viczus@freemail.hu) Előszó E cikk olyan haladó programozóknak nyújt segítséget, kik tisztában vannak a Java nyelvvel, és többször is használták a JDBC technológiát adatok relációs adatbázisban való tárolásához. Az ingyenes ObJectRelationalBridge () tulajdonképpen egy köztes réteg az alkalmazás és az adatbázis meghajtó között, mely kiküszöböli SQL parancsok használatát, az objektumok és táblák közötti kétirányú leképzést végzi. A cikk segítséget nyújt az első lépésekben, objektumok, táblák készítésében, a leképzés leírásában és az API megismerésében. Bevezetés Aki használt már relációs adatbázist Java programból, az tudja, hogy legegyszerűbben ez a JDBC technológiával oldható meg, de sajnos ebben az esetben elkerülhetetlenné válik, hogy a Java kód keveredjen az SQL utasításokkal, hiszen a metódusoknak String paraméterként kell megadni magát az SQL utasítást. Ez a megoldás nem illik bele az objektum-orientált szemléletbe, két nyelvet kever, ami nem ajánlott, sem ebben az esetben, mikor Java és SQL keveredik, sem pl. webes alkalmazások fejlesztésekor, a Java és HTML esetén, sőt lehetőség van mindhárom keverésére. Ez csökkenti az átláthatóságot, és nehezebben is módosítható. Erre a problémára több megoldást is létezik, egyrészt az SQL parancsok külön választhatóak külön fájlba, a J2EE esetén ha CMP (Container Managed Persistence) Enterprise JavaBeans-eket használunk, akkor azok perzisztenciáját az un. EJB konténer kezeli. Fejlesztők rendelkezésére állnak már objektumorientált adatbázisok is, melyek kiforrottsága még nem áll olyan magas szinten, mint a relációs adatbázisoknak. Egyszerűbb megoldás J2SE alkalmazások írása esetén egy objektumrelációs híd használata. Persze J2EE alkalmazások írásakor is használhatjuk ezt, ha BMP (Bean Managed Persistence) Enterprise JavaBeans-eket használjuk, hiszen akkor a bean-eknek saját maguknak kell a perzisztenciájukról gondoskodniuk. Az ObJectRelationalBridge () az Apache Software Foundation támogatásával, az The Apache DB project (korábban Jakarta) keretein belül fejlesztett alprojekt. Alapvető célja Java objektumok leképzése relációs adatbázisokra. A piacon rengeteg ilyen köztes réteg található, mind az ingyenes, mind az üzleti szférában. Választásom azért esett mégis erre a szoftverre, mert az Apache név már bizonyított az ingyenes segédeszközök, keretrendszerek terén, illetve bíztam az általam használt többi Jakarta project keretein belül fejlesztett szoftverrel való együttműködésében (pl. Ant, Log4J). Az nem csak saját API-val rendelkezik (PersistenceBroker API), hanem erre épülnek rá magasabb szintű, szabványos interfészek is, úgymint az ODMG 3.0, JDO és illetve Object Transaction Manager (OTM), mely tartalmazza az előző kettő közös jellemzőit. A perzisztencia teljesen transzparens, hiszen a tárolni kívánt osztályoknak nem kell speciális metódusokat implementálni, és nem kell egy kijelölt őstől származnia. Az objektumok és táblák, illetve mezők és oszlopok közti leképzést egy XML mapping állományban kell megadni. 1

Példa Az OBJ működését egy egyszerű példán fogom bemutatni, ami három osztályt és táblát tartalmaz. Szerepelnek benne cd lemezek, a hozzá tartozó előadó és az lemezen található számok. Objektum relációs adatbázis leképzés Vegyünk három egyszerű osztályt, Artist, Disc, Track néven, mely ábrázol egy előadót, egy lemezt és a lemezen lévő számokat. Minden lemezhez legalább egy szám tartozik, és az egyszerűség kedvéért pontosan egy előadó. Azzal sem foglalkozunk, hogy egy előadó több lemezt is kiadhat. Az osztályok UML diagrammja a következő ábrán található. 1. ábra Osztályok UML diagrammja Ehhez az osztályokhoz meglehetősen egyszerű táblák tartoznak, melyeket a következő ábra mutatja. 2. ábra Táblák Az -nek az egyedi azonosítók kezeléséhez és a zárolás kezeléséhez szüksége van két saját táblára is, melyeket neve _SEQ és _HL_SEQ. CREATE TABLE _SEQ ( TABLENAME VARCHAR (175) not null, FIELDNAME VARCHAR (70) not null, LAST_NUM integer, PRIMARY KEY(TABLENAME,FIELDNAME) ); CREATE TABLE _HL_SEQ ( TABLENAME VARCHAR (175) not null, FIELDNAME VARCHAR (70) not null, MAX_KEY integer, GRAB_SIZE integer, PRIMARY KEY(TABLENAME,FIELDNAME) ); Fontos, hogy minden tárolni kívánt osztálynak adjunk meg paraméter nélküli konstruktort is, hiszen az azzal példányosítja, majd a setxyz() metódusokat használja a mezők 2

beállításakor. A getxyz() metódusokat használja az objektumok tárolásakor, így minden tárolni kívánt mezőhöz deklarálnunk kell mindkét accessor metódust. Végig vigyázzunk a kis és nagybetűk közti különbségre, hiszen a Java nyelv megkülönbözteti azokat, így az mapping állományban is ehhez kell igazodnunk. Ez természetesen nem vonatkozik a táblák és oszlopok neveire, hiszen az adatbázis-kezelők nem különböztetik meg a kis és nagybetűket. A mapping állomány a repository.xml, mely hivatkozik két másik XML fájlra is, egyik a saját táblái és objektumai közötti leképzést írja le, a másik a saját leképzéseink leírására való. Nézzük meg, hogy az előbb megalkotott osztályaink és tábláink közötti leképzést hogyan kell leírni! Kezdjük a Track osztállyal: <class-descriptor class="track" table="track" <field-descriptor id="1" name="id" column="id" primarykey="true" autoincrement="true" <field-descriptor id="2" name="title" column="title" jdbc-type="varchar" <field-descriptor id="3" name="min" column="min" <field-descriptor id="4" name="sec" column="sec" <field-descriptor id="5" name="discid" column="discid" Ekkor a Track osztályt a track táblához rendeltük, és az id, title, min és sec mezőit az azonos nevű oszlopokhoz. Az azonosítóról meg kellett mondani, hogy INTEGER JDBC típusú (vigyázzunk, nagybetűsnek kell lennie), elsődleges kulcs, és értékét növelni kell minden új sor beillesztésekor. Ezzel még a platformfüggetlenséget is biztosítottuk, amit a JDBC nem, ugyanis minden adatbázis-kezelő más módon oldja meg az egyes mezők automatikus növelését. Az az összetett kulcsokat is támogatja. Most nézzük az előadó leképzését! <class-descriptor class="artist" table="artist" <field-descriptor id="1" name="id" column="id" primarykey="true" autoincrement="true" <field-descriptor id="2" name="name" column="name" jdbc-type="varchar" 3

Az támogatja az 1:1, 1:n, n:m kapcsolatok leírását és az öröklődést is. Minden lemezhez tartozik egy előadó, illetve minden lemezhez tartozik legalább egy szám is, amiket az lemez objektum egy Colletion mezőben tárol. Elvárható, hogy az lemez betöltésekor töltse be a hozzá tartozó előadót és számokat is. Ezeket az állításokat a következőképpen kell leírni: <class-descriptor class="disc" table="disc" <field-descriptor id="1" name="id" column="id" primarykey="true" autoincrement="true" <field-descriptor id="2" name="artistid" column="artistid" <field-descriptor id="3" name="title" column="title" jdbc-type="varchar" <field-descriptor id="4" name="date" column="date" jdbc-type="timestamp" conversion="org.apache.ojb.broker.accesslayer. conversions.javadate2sqltimestampfieldconversion" <field-descriptor id="5" name="single" column="single" conversion="org.apache.ojb.broker.accesslayer. conversions.boolean2intfieldconversion" <reference-descriptor name="artist" class-ref="artist" <foreignkey field-id-ref="2" </reference-descriptor <collection-descriptor name="tracks" element-class-ref="track" auto-retrieve="true" auto-update="true" auto-delete="true" orderby="id" <inverse-foreignkey field-id-ref="5" </collection-descriptor Ez a leképzés az több tulajdonságát is megmutatja. Először is látható, hogy a date és single mezőkhöz egy un. conversion van megadva. Vannak beépített konverziók, és lehet saját konverziós osztályt is írni. Az első a java.util.date objektumot képzi le TIMESTAMP JDBC típusra, a másik a boolean egyszerű típust INTEGER JDBC típusra. A reference-descriptor tag írja le az 1:1 leképzést, a collection-descriptor az 1:n leképzést. Az 1:1 esetén meg kell adni, hogy milyen osztályú a hivatkozott objektum, illetve meg kell adni, hogy melyik mező tartalmazza annak elsődleges kulcsát, azaz melyik a külső kulcs. Jelen esetben ez a 2-es számú, azaz az artistid mező. Az 1:n leképzés esetén meg kell adni a Collection nevét, mely tartalmazni fogja a hivatkozott objektumokat 4

(tracks mező), meg kell adni a hivatkozott objektumok osztályát (Track), illetve meg kell adni, hogy a hivatkozott objektum mely mezője a külső kulcs. Jelen esetben ez az 5-ös számú, ami a Track leírásánál a discid mező. Itt lehet megadni, hogy a szülő objektum példányosításakor, frissítésekor és törlésekor automatikusan a gyermek objektumok is az akciónak megfelelően változzanak. Meg lehet adni azt is, hogy a sorrend mi szerint legyen, jelen esetben az azonosító szerint. Abban az esetben, ha n:m kapcsolatot akarunk reprezentálni, akkor azt megtehetjük kapcsoló objektummal, de akár a nélkül is. Persze kapcsoló táblára mindig szükség lesz. Az első esetben felbontjuk az n:m kapcsolatot két 1:n kapcsolatra, és annak megfelelően készítjük el a leképzést, az utóbbi esetben a collection-descriptor tag esetén attribútumként meg kell adni a kapcsoló tábla nevét (indirection-table), illetve belső tag-ekkel meg kell adni a két külső kulcsot: fk-pointing-to-this-class, fk-pointing-to-element-class. Az képes öröklődési hierarchiák, poliformizmus letárolására, illetve az alapján történő lekérdezésre is. Abban az esetben, ha egy osztály implementál egy interfészt, vagy kiterjeszt egy másik osztályt, akkor az őst is le kell írni a konfigurációs állományban (absztrakt osztály vagy interfész esetén is, de akkor nem kell megadni hozzá mezőt), és definiálni kell azokat az osztályokat, melyek implementálják vagy kiterjesztik. A konfigurációs fájlban ezt a következőképpen kell leírni interfész kiterjesztése esetén: <class-descriptor class="discinterface" <extent-class class-ref="disc" </class-descriptor Abban az esetben, ha kiterjesztésről beszélünk: <class-descriptor class="disc" <extent-class class-ref="album" <extent-class class-ref="promo" </class-descriptor Ilyenkor szerepeltetni kell az Album és a Promo osztály osztályleíróját is a konfigurációs fájlban. Lehetőség van az összes objektum egyazon táblában való eltárolására is. Ezekben az esetekben a lekérdezést nem csak a konkrét osztállyal adhatjuk meg, hanem interfésszel vagy ősosztállyal is. Az biztosítja a gyermekek azonosítójának egyediségét. Alkalmazás Az konfigurálható egy.properties fájlal, melyet alapértelmezésben a CLASSPATH-ban keres az, de az.properties property beállítással is megadhatjuk annak teljes elérési útvonalát. Ez a konfigurációs állomány tartalmazza a leképzést végző fájl nevét és elérési útját, pool méretét, loggolással kapcsolatos beállításaokat, és még sok egyéb paramétert. A futtatáshoz szükség van még az JAR fájlára (a cikk írásakor a jakarta-ojb-0.9.5.jar fájlt használtam, akkor még a Jakarta project része volt, de azóta kijött az 1.0 RC1 verzió is). Tipikus használatkor a következő osztályokat kell importálni a forrás fájlunkban: import org.apache.ojb.broker.persistencebroker; import org.apache.ojb.broker.persistencebrokerfactory; import org.apache.ojb.broker.persistencebrokerexception; import org.apache.ojb.broker.query.criteria; import org.apache.ojb.broker.query.query; import org.apache.ojb.broker.query.queryfactory; 5

Tárolás és törlés A következő kódrészlet végzi egy lemez tárolását: PersistenceBroker broker = null; try broker = PersistenceBrokerFactory. defaultpersistencebroker(); catch (Throwable t) t.printstacktrace(); try broker.begintransaction(); broker.store(adisc); broker.committransaction(); catch (PersistenceBrokerException ex) broker.aborttransaction(); ex.printstacktrace(); A kódból is látható, hogy az támogatja a tranzakciókat, szinkronizációs pont kijelölésére a PersistenceBroker.beginTransaction(), commithoz a PersistenceBroker.commitTransaction(), rollbackhez a PersistenceBroker. aborttransaction() metódus használatos. A store() metódust nem csak új objektum tárolásakor, hanem már létező objektum módosításakor is használjuk. Objektum törlésekor a store() helyett a delete() metódus alkalmazandó. Lekérdezés Objektumok lekérdezésekor Criteria objektumokat kell összeállítanunk a feltételek meghatározására. A lekérdezést maga egy Query objektum végzi, melyet a QueryFactory-tól kell kérni, és meg kell adni az osztályát az objektumoknak, amiket le akarunk kérdezni, és magát a feltételt. A következő kódrészlet azokat a lemezeket kérdezi le, melyek kislemezek a megjelenés sorrendjében. Criteria criteria = new Criteria(); Criteria.addEqualTo("single", Boolean.TRUE); criteria.addorderbydescending("date"); Query query = QueryFactory.newQuery(Disc.class, criteria); Collection discs = null; try discs = broker.getcollectionbyquery(query); catch (PersistenceBrokerException ex) System.out.println(ex.getMessage()); ex.printstacktrace(); Természetesen az támogatja az összes lehetőséget, melyet az SQL lekérdező nyelv biztosít. Ilyenek az összehasonlító operátorok, LIKE feltétel, BETWEEN, IN kulcsszó. A Criteria objektumokat logikai kapcsolatba lehet egymással állítani. Megengedett a sorba rendezés és csoportosítás is. Végső esetben konkrét SQL feltételt is meg lehet adni, hiszen az 6

előzőekből is az SQL feltételt generál (minek kiírására debug célból megvan a lehetősége). Rendelkezik olyan speciális képességekkel, mint objektum cache-elés, adatbázis kapcsolatok automatikus pool-ozása, laza kötés virtuális proxy-kon keresztül (egy objektum betöltésekor nem feltétlenül kerül betöltésre a hozzá kapcsolódó objektum, csak akkor, ha arra szükség van), illetve elosztott zárolás-kezelés. Amint az a Java nyelven írt Apache projektektől elvárható, rendelkezik Log4J támogatással, a build környezet Ant-tal van felépítve és több, mint 120 JUnit teszt esetet tartalmaz a regressziós teszthez, és a disztribúcióban benne foglaltatik a részletes dokumentáció, API-dokumentáció, tutoriálok és példa programok. Az tetszőlegesen skálázható, hiszen azon kívül, hogy a PersistenceBroker egy JVM-ben fut magával az alkalmazással, lehetőség van elosztott rendszereknél arra, hogy több kliensalkalmazás csatlakozzon több szerverhez, és a terheléselosztás érdekében a kliens mindig a legkevésbé terhelt szerverhez forduljon. A mapping manuális beállítása helyett folyamatban van olyan eszközök megírása, melyet ezt automatikusan elvégzik. Több megközelítés is lehetséges: Java osztályból (vagy UML modellből) SQL DDL (Data Definition Language) utasítást készít, mely automatikusan legenerálja a táblákat. SQL DDL-ből (vagy konkrét adatbázisból) legenerálja a Java osztályokat. Felület a mapping elvégzésére, ha az adatbázis és az osztályok adottak. Ezen eszközök egyike sem adott még, mindegyik fejlesztés alatt áll. 7

Konklúzió Az egy kitűnő eszköz objektumok leképzésére relációs adatbázisokra. Egyszerűbb alkalmazások esetén sikeresen kiváltja az SQL alkalmazását, és tökéletesen beleillik az objektumorientált szemléletbe. Bonyolultabb alkalmazások esetén azonban felléphetnek olyan esetek, ahol a relációs adatbázis nem szabványos lehetőségeit, mélyebb funkcióit is kihasználjuk, hogy mégis szükség van az megkerülésére, esetleg módosítására. Szerencsére ez is lehetséges, hiszen forráskódja is hozzáférhető. Arról azonban ne feledkezzünk meg, hogy ez egy újabb, teljesen Java nyelven írt réteg az alkalmazásunkban, mely nagy mennyiségű adatok lekérdezésekor, objektumok példányosításakor jelentős lassulást okozhat. Budapest, 2003. március 14. Hivatkozások The Apache Software Foundation http://www.apache.org The Apache DB Project http://db.apache.org ObJectRelationalBridge http://db.apache.org/ojb/ Object Relation Tool Comparison http://c2.com/cgi-bin/wiki?objectrelationaltoolcomparison Szerzőről Viczián István a Debreceni Egyetem programtervező matematikus szakán végzett 2001 nyarán, ahol most levelező PhD. hallgató az elosztott rendszerek, middleware-ek témakörében. Jelenleg szoftver fejlesztőként dolgozik Budapesten, melynek keretében middleware szoftverekkel, alkalmazásintegrációval, webes technológiákkal valamint application mining-gal és reverse enginering-gel foglalkozik. Szabadidejében internetes portált fejleszt, és Java technológiákkal ismerkedik, valamint Java blog-ot ír (JTechLog). E-mail: viczus@freemail.hu Honlap: http://dragon.unideb.hu/~vicziani 8