A cím nem teljesen helyes, valójában nem az a kérdés, hogy használjunk e DTO-t, hanem az, hogy az Entity-ket használjuk e, vagy külön DTO osztályt készítsünk.


A cím nem teljesen helyes, valójában nem az a kérdés, hogy használjunk e DTO-t, hanem az, hogy az Entity-ket használjuk e, vagy külön DTO osztályt készítsünk.
Ebben a cikksorozatban megpróbálom bemutatni, hogy hogyan is épül fel egy JavaEE alkalmazás szerintem, hogy milyen részekből áll, milyen tervezési mintákat érdemes használni, melyik mire való. (Remélem azért majd valaki hasznosnak találja, ha nem, legalább később vissza tudom nézni, hogy miért is így csináltam. :-) ) Első körben a szerverrel akarok foglalkozni, hiszen ott található az alkalmazás lelke, az üzleti logika, a kliensből csak azzal a résszel foglalkozok, ami a szerverhez kötődik.
Belefutottam egy érdekes hibába Netbeans 6.1-ben tegnap.
Adatbázisból akartam Entity-ket generálni (New/Entity classes from Database) és a harmadik lapon a Location-t nem lehetett kitölteni, egy üres lenyíló menü jött fel.
Eltartott egy ideig, amíg rájöttem a megoldásra.
Amikor létrehozok egy új projektet NB-ben, akkor létrejön automatikusan egy Teszt mappa (Test Packages) és egy ehhez tartozó Library mappa (Test Libraries). Ezeket ki lehet törölni a projekt beállításaiban (a Sources kategóriában a Test Package Folders résznél).
Én ezt ki szoktam törölni, mert a teszt kódokat a projekttől külön szoktam kezelni. Viszont mint most kiderült, ha ez a mappa ki van törölve, akkor a fenti hiba áll elő, ha újra felveszem ide a teszt mappát, akkor minden rendben működik.
Glassfish telepítés:
A telepítése viszonylag jól le van írva a Glassfish letöltési oldalán, én csak néhány plusz dolgot mondanék, néhány kisebb beállítást érdemes még elkövetni szerintem, mielőtt az ember telepíti a szervert. Ezeket a dolgokat a kicsomagolás után, az ant futtatás előtt érdemes megtenni:
1. Lehetőség van rá, hogy ne az alap JDK-val települjön a szerver. Ez nekem azért volt fontos, mert a fő munkahelyi projektem miatt a JAVA_HOME egy 1.5-ös JDK-ra van állítva, viszont én az 1.6-os JDK-t akartam használni. Ehhez nem kell mást tenni, mint a setup.xmlben (vagy a setup-cluster.xmlben, ha azt használjuk) a következő sort lecseréljük:
<property name="local.java.home" value="${java.home}${suffix}"/>
a megfelelő könyvtárra, pl.:
<property name="local.java.home" value="d:\Jdk1606\bin\${suffix}"/>
2. Érdemes a fenti fájlban lecserélni az alapértelmezéseket a nekünk megfelelőre, hogy már egy nekünk tetsző domain jöjjön létre, ne kelljen vele külön bíbelődni:
<property name="domain.name" value="domain1"/>
<property name="instance.name" value="server"/>
<property name="admin.user" value="admin"/>
<property name="admin.password" value="adminadmin"/>
Ezek az adatok a domain neve, az instance neve, a domain adminisztrátor és a jelszava.
Netbeans és a Firebird:
A Firebird szervert java alól a JayBird jdbc driverrel lehet elérni. A driver csomagból a következő fájlokra van szükségünk:
jaybird-full-2.1.6.jar
lib\log4j-core.jar
lib\mini-j2ee.jar
Ezeket a fájlokat elhelyezzük egy könyvtárba és máris lehet telepíteni az új jdbc drivert. Ezt ugyebár az NB Services ablakában a Databases/Drivers alatt tehetjük meg, csak be kell állítani az új drivernek a fenti három fájlt, a Driver classnak pedig meg kell adni a következőt: org.firebirdsql.jdbc.FBDriver., ha ezt megtettük, a NetBeans már képes elérni a szervert, fel lehet venni a Connectiont. (A Connection URL-je a következőképpen néz ki: jdbc:firebirdsql:<szerver>:<port>:<adatbázis elérése>. Ha az alapértelmezett portot használjuk, akkor az elhagyható. Egy példa: jdbc:firebirdsql:localhost:d:\JavaProject\Database\JavaProject.FDB)
Glassfish és a Firebird:
Ez már keményebb dió, mert több probléma is van vele.
Az első, hogy a GF és a JB nem ugyanúgy nevezi el a tulajdonságokat, amiket használ (AZ adatbázis útvonala JB-nél database tulajdonságban van, GF-nél a databaseName tulajdonságban.), ezért egy egyedi osztályt kell használni a GF-ben.
Nekem a következő beállítások jöttek be:
DataSourceClassName: org.firebirdsql.pool.sun.AppServerConnectionPoolDataSource
ResourceType: javax.sql.ConnectionPoolDataSource
Properties:
userName: SQL felhasználó
password: Jelszava
databaseName: <szerver>:<port>:<elérési út>
pl.: localhost:d:\JavaProject\Database\JavaProject.FDB
encoding: Használt encoding. Nem kötelező, de mivel magyarok
vagyunk, érdemes beállítani: WIN1250.
Persze nem kötelező ezt kézzel megtenni, ha már csináltunk egy enterprise projektet (egy Enterprise Applicationt vagy egy EJB modult), ott felvehetünk egy xml fájlt, amelyben leírhatjuk az adatforrás minden tulajdonságát, így amikor futtatjuk a projektet, akkor automatikusan létrejön az adatforrás a GF szerveren.
A létrehozandó fájl a New File/GlassFish/JDBC Datasource menüponttal hozható létre, a neve sun_resource.xml, és itt van egy példa arra, hogy hogyan is kellene kinéznie.
A második probléma, hogy a GF folyton meghív két eljárást a JayBirdben, ami nincs implementálva, teljesen üres, csak egy kivételdobást tartalmaz. Ez nem okoz gondot a működésben, de teleszemeteli a szerver logot, mert minden alkalommal, amikor a JayBirdhöz fordul a GF beleíródik a logba, hogy kivétel történt.
Ennek kivédésére le kell tölteni a JayBird megfelelő forráskódját és a megfelelő jdbc könyvtár alatt az FBConnection.java fájlban módosítani kell a következőket:
public Properties getClientInfo() throws SQLException {
// TODO: implement this java.sql.PreparedStatement method
//throw new SQLException("not yet implemented");
return new Properties();
}
public String getClientInfo(String name) throws SQLException {
// TODO: implement this java.sql.PreparedStatement method
//throw new SQLException("not yet implemented");
return name;
}
public void setClientInfo(Properties properties) throws SQLClientInfoException {
// TODO: implement this java.sql.PreparedStatement method
//throw new SQLClientInfoException();
}
public void setClientInfo(String name, String value) throws SQLClientInfoException {
// TODO: implement this java.sql.PreparedStatement method
//throw new SQLClientInfoException();
}
Mint látható, nem tettem mést, mint kikommenteztem a kivételdobást és megírtam, hogy elfogadható értékkel térjen vissza a függvény. Ezután a kódot be kell fordítani és kész is a hibátlan jdbc driverünk, ami nem szemeteli tele a logot.
Én megcsináltam a változtatásokat, így ha valaki ugyanazt használja, mint én, vagyis JDK1.6-ot és Jdbc4.0-t, az letöltheti innen a befordított projektet.
Kb. ennyibe kerül az FB, GF és NB összelövése, hogy együtt tudjanak működni, ha minden igaz, így már lehet kezdeni a projekt tényleges készítését.
Nem gondoltam volna, hogy ilyen nehezen fog megszületni az első tényleges bejegyzésem, de egyszerűen kevés az időm meg még nem szoktam meg ezt a dolgot. Ez van.
Minden projekt úgy kezdődik, hogy az ember eldönti, hogy milyen eszközöket fog használni. Én hosszas gondolkodás és próbálkozások után így döntöttem:
Ide: NetBeans 6.1
App. szerver: Glassfish V2 UR2
DB szerver: Firebird 2.0
Nézzük, hogy miért:
App szerver: Eddig nem igazán dolgoztam velük, a projektjeimhez bőven elegendő volt egy Tomcat, nem használtuk volna ki egy appszerver tudását. Azért a GF mellett döntöttem, mert ez lett a JavaEE referencia implementációja és az új projektben ezt a technológiát akarom kitapasztalni.
DB szerver: Természetesen ingyenes DB szerverben gondolkodtam, lehetőleg multiplatformban, hamár a többi része a programnak ilyen. Mivel a PgSQL-t nem ismerem, a MySQL-t pedig nem tartom alkalmasnak ilyesmire, ezért 3 szerver jöhetett szóba: MsSQL Express Edition, Oracle XE, Firebird. AZ MsSQL és az Oracle szerver jó, de mindegyik korlátokkal rendelkezik, amit én nem szeretek :-). Az FB-vel dolgoztam már többször - bár nem java projektben - és nagyon jónak találom, ahhoz képest, hogy ingyenes mindent tud, amit a nagyok, ezért választottam ezt.
IDE: 3 IDE-vel dolgoztam eddig - Netbeansel, Eclipsel és JDeveloperrel, bár ez utóbbival csak futólag egy tanfolyamon ismerkedtem meg. Összeraktam egy kis egy táblás projektet, ezt próbáltam meg megvalósítani mindegyiken.
A JDeveloperrel hamar feladtam a dolgot, gyakorlatilag ha az ember nem Oracle termékeket akar használni, akkor vért izzad, mire beállítgatja a környezetet, így ezt gyorsan elfelejtettem.
A Netbeans és az Eclipse nagyon jó cuccok. Azért maradtam a NetBeansnél végül, mert tapasztalataim serint gyorsabban tudtam benne fejleszteni, mert jobb - jobban használható, kézreállóbb - eszközöket ad a munkához. A másik amiért így döntöttem, mert az Eclipse nem volt képes jól együttműködni az FB jdbc csatolójával - sémákat keresett FB alatt, ahol ilyenek nincsenek -, így az Eclipse adatbázis eszközei nem tudták használni az FB szervert.
Ezért választottam a fenti hármast, és eddig jól meg vagyok velük, bár kellett dolgozni azért, hogy jól működjenek együtt, de erről a köv. bejegyzésben írok.
Üdv,
Csuti József vagyok, végzettségem szerint szoftverfejlesztésre szakosodott villamosmérnök. Jelenleg már 8 éve szoftverfejlesztéséssel -azon belül ügyviteli szoftverek, ERP-k, pénzügyi szoftverek fejlesztésével - foglalkozom. Jelenleg egy magyar cégnél vagyok vezető-fejlesztő, ahol J2EE-ben készítünk alkalmazásokat.
Volt szerencsém kipróbálni több technológiát is. Delphivel kezdtem, dolgoztam VB6-al, VC-vel, Php-val, .Nettel és mint írtam jelenleg Java-val foglalkozom. Volt szerencsém dolgozni majdnem minden ismertebb RDBMS-el is (MySQL, MsSQL, Oracle, Interbase, FireBird). Ezért úgy gondoltam, hogy talán tudok írni olyan bejegyzéseket a tapasztalataimról, amik másokat is érdekelhetnek. Különben meg az internet jelenleg még egy szabad terület, ahol mindenki elmondhatja a véleményét és játszhatja a JANI-t, miért pont én ne tenném ezt ;-)
A blogot azért most indítottam, mert most kezdek el egy viszonylag nagyobb magán projektet, így a projekt kapcsán felmerült dolgokat kívánom beírni a blogra. Emellett azért lesz más is, de megmondom őszintén jelenleg még nem tudom, hogy mi, ez majd közben kialakul...