HTML

Csujo Software Inc.

Ez elvileg egy szoftverfejlesztéssel foglalkozó blog lenne. Elsősorban Java, mert ezt nyűvöm jelenleg, de ezen kívül előkerülhetnek más dolgok is, hiszen évekig fejlesztettem Delphiben, .Netben is. A célom egyelőre az, hogy kipróbáljam a bloggerek életét, de az sem hátrány, hogyha esetleg másoknak segítek ezzel. ;-)

Friss topikok

  • mezeike: Szia, Java specialistát keresek németországi céghez, profi német nyelvtudással. üdv Mezeike (2010.01.22. 10:14) Bemutatkozás
  • tucka: Hello Csujó! Azt mondom ne hagyd abba a bloggolást, jó lenne belerázódni a JAVA s dolgokba. Ha l... (2009.09.22. 12:10) Firebird vs. Glassfish vs. NetBeans

Linkblog

Csináljunk rendszert II – DTO vagy nem DTO

2008.12.08. 20:28 Csujo

    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.

DTO-ra szerintem mindenképp szükség van, így leírom, hogy mi is az. DTO = Data Transfer Object, vagyis adatszállító objektum (Szokták még ValueObject-nek is nevezni, mert általában csak adattagjai és getter-setter párosai vannak.). A DTO lényege, hogy egy adott üzleti entitás adatait foglalja egy egységbe, mert így egyrészt az entitás adatai egyben kezelhetők, másrészt jelentős erőforrást takaríthatunk meg. Ha nem használnánk DTO-t, akkor minden adatot külön-külön lekérdezhetővé kellene tenni, ami rengeteg függvény megírását jelenti, ráadásul mivel ezeket a kliens (GUI) rétegbe is le kell juttatni, ezért minden lekérés külön hálózati forgalmat generál.
Vegyünk egy egyszerű példát:
Van egy magánszemély ügyfelünk, akiről kb. a következőket tartjuk számon: Egyedi azonosító, Név, Cím, Telefonszám. Ez egy DTO-ba foglalva – a DTO attribútumai pontosan a fent felsorolt változók - rétegenként egyetlen függvényt jelent, míg külön-külön kezelve ez rétegenként négy és nagyon oda kell figyelni, hogy ne keveredjenek a változók. Arról ne is beszéljünk, hogy ez a kliens és a szerver között – a hálózaton - is négy hívást jelent, vagyis jelentős a hálózati overhead.
A vicces az, hogy a kliens oldal szempontjából is jobb a DTO, mert ha pl. egy Gridben (JTable) akarjuk az adatokat megjeleníteni, akkor úgyis be kell tenni egy objektumba egy sor adatát.
 
A JavaEE szabvány úgy nyilatkozik, hogy mivel az Entity osztályok is POJO-k ezért használhatók DTO-ként is – nem azt írja, hogy ezeket használd. Nem véletlenül.  Minden rendszer alapja az adat, amivel a rendszer dolgozik. Az adatokat egy üzleti rendszernél üzleti entitásokba fogjuk össze, ahol a tényleges adat az entitás egy-egy tulajdonsága. Ezeket az entitásokat adatbázis entitásokká alakítjuk és így mentjük őket az adatbázisba, hogy később, ha szükség van rájuk, elő tudjuk venni őket.
Itt jön a lényeg – egy kisebb rendszernél még meg lehet csinálni, hogy az üzleti entitásaink és az adatbázis entitásaink ugyanazok legyenek, de egy nagy rendszernél ezt nem szabad elkövetni – márpedig ahogy a neve is mutatja Java Enterprise Edition-nel dolgozunk, vagyis nem kisebb rendszert fejlesztünk. Azért nem szabad ezt elkövetni, mert egyrészt így nagyon sok lesz a redundáns adat, másrészt az üzleti entitások felépítése nem megfelelő, hogy az adatbázis szerver teljesítményét megfelelően kihasználjuk.
Nézzünk egy példát:
A rendszerünkben nyilvántartunk dolgozókat és magánszemély ügyfeleket. Ezek, mint üzleti entitások a következőképpen néznek ki kb.:
 
 
 
 
 
 
 
Ugyebár a két entitás csak egy tulajdonságban tér el, a dolgozónál nyilvántartjuk a napi munkaidő hosszát, a vevőnél szeretnénk látni az eddig vásárolt összeget. Üzleti szempontból ezt így érdemes elválasztani, hiszen így jól látható minden tulajdonsága az adott entitásnak és jól el is különül. Ez adatbázis oldalon kb. így néz ki:
 Jól látható, hogy nagy különbség van a kettő között. Elvileg az Entity-ket annotációkkal fel lehet készíteni, hogy több táblából vegyék az adatot – megmondom őszintén még soha nem próbáltam -, de ez egyrészt komoly munka, ami nem egy kezdőt igényel másrészt nem hiszem, hogy aggregált adatokat is össze lehet így rakni, mint az EVOszeg tulajdonság. Itt már jön is a külön DTO első előnye, hogy egy Entity kollekció -> DTO mapper függvényt egy junior fejlesztővel is meg lehet íratni, hiszen egy doksiban megmondjuk neki, hogy így kell kinéznie a DTO-nak, ez a fő Entity, neki csak az a feladata, hogy megkeresse az Entity-hez kapcsolódó többi Entity között azt, amiből a megfelelő tulajdonság kinyerhető, az Entity-k pedig generáltathatók. A másik megoldásnál viszont egy senior kell, aki jól ismeri az EJB3 szabványt, gyorsan meg tudja csinálni a feladatot. SZVSZ ez a megoldás átláthatatlanabb is.
Megtehetnénk azt is, hogy a generált Entity-jeinket mozgatjuk a rétegek között, de ezzel több komoly baj is van.
1.        Felesleges adatok is mennek – nem biztos, hogy az Entity összes tulajdonságát használni is fogjuk.
2.       Biztosítanunk kell, hogy a kliens minden szükséges adatot megkapjon, vagyis mivel lusta betöltést érdemes használni, kell írnunk olyan eljárásokat, amik az összes szükséges csatolt Entity-t is betöltik, hogy a kliens olvasni tudja azokat.
3.       Mivel a jelenleg nem csatolt állapotú EJB-k visszacsatolásánál elvesznek a kapcsolatok, aniket nem töltöttünk be, ezért a mentésnél úgyis meg kell írnunk az áttöltő eljárást.
4.       Nem tudjuk megoldani a jogosultsághoz rendelt adatmegjelenítést. Mi van, ha az a kérés, hogy csak az arra jogosult személyek láthassák a személyek címeit. Ha Entity-t használunk, akkor mentésnél nagyon oda kell figyelni, hogy mi megy be.
5.       Olyan információt adunk át a GUI-nak, ami rá nem tartozik. A GUI-nak nincs köze az adatbázisunk felépítéséhez, pedig így ez az információ is átkerül oda!
Programozási szempontból is jobb a DTO, ugyanis ha a kliensen adatrácsba akarjuk tenni az adatokat, úgyis át kell fejtenünk őket egy objektumba soronként, mert a JTable ezt képes használni. Ráadásul ha akarunk írni általános eljárásokat, amik többféle DTO-t is fel tudnak dolgozni, akkor kell egy közös ősosztály, ahol van egy azonosító tulajdonság, az Entity-k generálva viszont POJO-k még nem találtam olyan Entity generátort, aminél meg lehetne adni egy ősosztályt. (Természetesen ott van a reflection mint lehetőség, de ez nem biztos, hiszen csak futási időben derül ki, hogy a keresett tulajdonsága létezik e a vizsgált objektumnak, egyébként is nagyon lassú. )
 
Az első részben az ábrán jelöltem, hogy a BL réteg az, ahol az Entity-DTO átalakítás megtörténik a rendszerben. Ezt érdemes betartani, mert a rétegeink így válnak el egymástól teljesen, hiszen a BL feletti rétegekre már nem tartozik olyan információ, ami az adatok tárolásával függ össze, illetve a BL alatti rétegeknek már nincs köze az üzleti információkhoz.  Ezt lejjebb nem lehet helyezni, mert a DTO egy üzleti entitás, vagyis az adatelérési rétegnek nincs elegendő információja egy ilyen előállításához. (Egy DTO feltöltéséhez több DAO meghívása is szükséges lehet, így azt egyik DAO objektum sem tudja előállítani.) Egyetlen esetben azért ez a szabály is áthágható, ha a DTO-t arra használjuk, hogy a benne levő adatokkal szűrjük a legyűjtendő Entitásokat, akkor érdemes átadni a DAO-nak, hogy ne kelljen egy irgalmatlan sok bementi paraméterrel rendelkező függvényt írni :-).
 
Még ehhez a témához tartozik a Mapper osztály, aminek a feladata a DTO-Entity adatáttöltés. Ezt az áttöltést bele lehetne írni magába a DTO-ba is, így csökkentve a kezelendő osztályok számát. Amiért érdemes külön osztályba szervezni ezt az az, hogy ha külön osztályban van a mapper kód, akkor csökken a kliens mérete. Ugyanis ha a DTO-ban van, akkor a DTO hivatkozásokat tartalmaz az Entity-kre, vagyis ahhoz, hogy a kliens működjön, a kliensnek ismerni kell az Entity-ket, különben nem tudja használni a DTO-kat. Ha viszont ezek külön osztályban kapnak helyet, akkor a kliensnek a szerver osztályai közül csak a Facade-et és a DTO-kat kell ismerni a működéshez, vagyis egy Ant scripttel pillanatok alatt lehet csinálni egy olyan JAR fájlt, ami csak ezeket tartalmazza (hiszen ezek egyike sem hivatkozik más osztályokra.)
Ez akkor lehet fontos, ha a kliens programot Java Web Starttal juttatjuk a kliens gépre, hiszen így egy új verzió esetén jóval kisebb a letöltendő fájlok mérete. (És az sem elhanyagolható szerintem, hogy a kliens megint csak olyan osztályokat birtokol, amiben nincs felesleges – esetleg veszélyes – információ a rendszer felépítéséről.

 

Szólj hozzá!

Csináljunk rendszert I – A program alapszerkezete

2008.12.04. 22:05 Csujo

    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. 

Egy ilyen alkalmazás 3 részből áll ugyebár – ezért is hívják 3 rétegű alkalmazásnak :-) -, a GUI(Graphical User Interface – Felhasználói felület), a BLL(Business Logic Layer – Üzleti logika) és a DAL (Data Access Layer – Adatelérési réteg). JavaEE-ben ez úgy néz ki, hogy a program „irányító” része a GUI, ami egy ablakos alkalmazás a kliens gépen. Ez rendez minden felhasználói interakciót, tartja nyilván a program állapotát, hogy a felhasználó hol tart és mit is csinál éppen. A többi rész az alkalmazásszerveren található, ezek az alkalmazásszerver által kezelt lazán csatolt objektumok halmaza. Amikor a felhasználó olyan műveletet végez, amihez szükséges bármilyen üzleti folyamat indítására, akkor a kliens meghívja az egyik objektum egyik függvényét, aminek feladata a kliens által adott információk feldolgozása, és ha szükséges új információk előállítása és átadása a kliensnek.
Ebből kiindulva az alkalmazás architektúrája – mármint a szerver oldal és a szerver oldalhoz szervesen kapcsolódó kliens részek - a következőképpen néz ki (Kinagyítva jobb):
Az ábra értelmezését mindjárt leírom, de előtte egy kis megjegyzés:
Van egy nagyon jó leírás, amit a Sun adott ki a J2EE fejlesztés során használható/ajánlott tervezési mintákról. Ezt szerintem érdemes mindenkinek megnézni és értelmezni. Mivel még J2EE-hez készült, ezért a példaprogram részek nem használhatóak, de a minták leírása részletes és jól összefoglalja a problémát, amire megoldást nyújtanak és a működési elvüket.
És most összefoglalnám néhány szóban, hogy az ábrán szereplő „krumplik” mit is takarnának. Mindegyik egy objektum és a mindegyik egy tervezési mintát valósít meg. Lássunk akkor egy rövid összefoglalót róluk:
Entity
Ezt remélhetőleg nem kell bemutatni, ez az alapja a JavaEE perzisztenciának. Szokták még ha jól emlékszem EJB3-as Entity Bean-nek is hívni – hibásan, hiszen ennek már nincs köze a régi Entity Bean-ekhez. Gyakorlatilag az adatbázis adatok leképezése objektumokba.
DTO
Data Transfer Object vagy Value Object.  A lényege az, hogy az üzletileg egybe tartozó adatokat fogja össze egyetlen egységbe, hogy az adatokat könnyen, egy egységként lehessen utaztatni a rétegek között. A JavaEE specifikáció szerint az Entity is alkalmas DTO-nak, hogy ezzel én miért nem értek egyet, arról majd később, egy külön cikkben fogok kitérni.
Az ábra alján próbáltam szemléltetni az alsó nyilakkal, hogy a két adatszállító objektum típust melyik rétegek ismerik, melyek között mozognak. Hogy miért így, arról is majd később beszélek.
DAO
Osztályok, amelyeknek feladata az Entity-k kezelése. A lényege, hogy elrejti a feljebb található rétegek elől az adatbázis felépítését, hiszen azok a DAO egy-egy funkcióját hívják meg, így lépve kapcsolatba az adatbázissal, arról nincs információjuk, hogy a nekik szükséges információ honnan, milyen módon kerül hozzájuk. Ha a program rétegei nem mosódnak egybe, akkor az entity-ket kezelő EntityManager osztály csak itt a DAO-ban szabad, hogy megjelenjen.
BL
Önkényesen neveztem el így, mert jobb nevet nem találtam. Ez az osztály egy Session  Bean, amely az üzleti folyamatokat valósítja meg. Minden függvénye egy üzleti funkciónak felel meg, a kliens ezeket a függvényeket hívja. (Hívná, ha nem használnánk még egy réteget, hogy miért, arról később.)
Mapper
A fent említett Sun-os leírásban ez Transfer Object Assembler néven szerepel, feladata a DTO-k és az entity-k közti konverzió végrehajtása, illetve én még egy szerepet szánok neki, a DTO-ban érkező adatok validálása.
Facade
A Facade osztály a facade – homlokzat - tervezési minta megvalósítása. Feladata, hogy egy egységes felületet biztosítson a rendszerben található szolgáltatások elérésére. Ennek a nagy előnye az, hogy a kliens bármilyen szolgáltatást is kíván igénybe venni azt egységesen tudja megtenni, ráadásul mivel a szolgáltatásoknak létezik egy közös belépési pontja, így az olyan feladatokat,  amiket minden funkciónál végre jókell hajtani– mint például az authentikáció ellenőrzése vagy a kivételek átalakítása – itt el lehet intézni.
Business Delegate
Ez a kakukktojás, hiszen ez az objektum a kliensen található. Azért tartozik mégis ehhez a felsoroláshoz, mert ennek a feladata a kliens többi része elől elrejteni azt, hogy a program többi része egy szerveren található. Ő kezeli a kapcsolatokat a szerverrel, az authentikációs információkat, kezeli a szerverről érkező kivételeket.
 
Megpróbáltam összefoglalni, hogy kb. milyen részei, rétegei vannak egy JavaEE programnak a szerver oldalon és bemutatni őket pár szóban. A folytatásban – ha minden jól megy – részletesebben is bemutatom őket.

Szólj hozzá!

Netbeans 6.1 Bug

2008.10.28. 10:53 Csujo

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.

Szólj hozzá!

Firebird vs. Glassfish vs. NetBeans

2008.10.21. 15:52 Csujo

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.

1 komment

Eszközök kiválasztása

2008.10.14. 11:59 Csujo

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.

Szólj hozzá!

Bemutatkozás

2008.09.22. 15:32 Csujo

Ü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...

2 komment

süti beállítások módosítása