pátek 20. dubna 2007

Java EE 5 - začátky aneb konec PHP

Každý, kdo začně blíže studovat Java EE5, získá celkový přehled o tom, jak je Java rozdělena do několika vstev. Společně s tím, ale vyvstane spoustu otázek, jak provést to či ono. Některé věci totiž nejsou úplně zřejmé a pokud chci tvořit projekt, který bude provázán s dalšími vrstvami, dostanu se dost často do potíží s nastavením a vůbec spuštěním jednotlivých částí.

Na začátku je důležité si zvolit správnou technologii. Pokud zvolím Javu budu muset řešit další věc a tou je její ohromné množství frameworků. Osobně jsem toto vyřešil tak, že se držím (pokud je to jen možné) standardů SUNu.

Takže co je cílem: Vytvořit intranetovou aplikaci, která bude pokrývat požadavky firmy. Od výrobních procesů, přes ekonomické záležitosti až po různé schvalovací procesy. Klientem bude webová či desktopová aplikace. Ve chvíli, kdy potřebuji komunikovat se sériovým portem, musím volit desktop. Když budu řešit výpis sestav, použiji zase webovou aplikaci. Obě tyto aplikace musejí míti stejnou základnu (databázi). V lepším případě základnou bude business logika pro obě aplikace.

Jak jsem psal výše, zvolil jsem nejpoužívanější frameworky, které jsou navíc i standardy. Na persistenci (připojení k databázi) TopLink od Oracle. Jako databázi MySQL 5.0. Na namapování relačních tabulek do objektů JPA. Samotná business logika je řešena přes EJB3.0. Na webovou část jsem zvolil JSF společně s Facelets (i když Facelets není standard, dost pomáhá samotnému JSF). Na desktop Swing. Aplikační server je Sun Java Application Server 9 (glassfish).

Takže zvolené součásti mám úspěšně za sebou. Nyní přistoupím k samotné implementaci. První věcí, kterou musím udělat, je rozjet MySQL v glassfish. Toto udělám jednoduše tak, že nahraji java-mysql-connector do adresáře PATH_GLASSFISH/lib. V samotné admin konsoli (webová aplikace pro správu glassfishe), vytvořím connection pool a jdbc resource pro mysql a danou databázi.

Nyní přistoupím k tvorbě business logiky. Po vytvoření enterprise projektu ptovedu vytvoření persistence pomocí TopLinku. Po namapování glassfishe do IDE, vytvořím persistence.xml, který volá pomocí JNDI spojení s MySQL, kterou jsem v glassfish konsoli vytvořil.

Pro namapování relačních tabulek do JPA využiji požnosti IDE a nechám si je automaticky vygenerovat. Pro snadou správu samotných dat, vytvořím na klientovi nějakou CRUD aplikaci, takže si nechám vygenerovat i Session Beans z JPA. Použiji jak lokální, tak remote interface. Po tomto kroku, mám základ připraven. Mohu provést deploy na glassfish.

Nyní se pustím do samotného klienta. Nejprve desktopu. Vytvořím si samostatný projekt, do kterého nalinkuji potřebné glassfish knihovny a přilinkuji samotnou business logiku ve formě jar souboru. Pomocí vzdáleného volání, si nechám zavolat Session Beanu a již rovnou mohu pracovat s business logikou ve Swingu. K samotné distribuci swingové aplikace použiji Java Web Start.

Poslední věcí je webová aplikace. Přilinkuji JSF Framework, společně s Facelets. V Backing Beans volám Local EJB. Webová aplikace je v tomto ohledu o dost jednodušší, jelikož nemusím řešit vzdálené volání EJB, protože samotná aplikace běží na glassfish ve webovém kontejneru. Samozřejmě nezapomenu na convertery pro Entity a nastavení, jako navigaci, atd. Webovou aplikaci mohu vystavit na server.

Asi takto bych zjednodušeně popsal samotnou problematiku Enterprise Javy. Jako IDE jsem zvolil NetBeans a k deploymentu aplikací chytrého mravence (ant).

Tímto článkem jsem chtěl jen nastínit, že s PHP končím. Od dnešní doby se budu věnovat Javě či databázím. Pokud je někdo v podobné situaci jako já, přivítám jeho připomínky.


Příště se již budu věnovat něčemu přímočarému. Ukážu, jak ve stand-alone klientovi volat EJB z glassfishe. Na konci celý projekt zbuilduji a nechám poskytovat pomocí Java Web Start.

8 komentářů:

  1. >Tímto článkem jsem chtěl jen nastínit, že s PHP končím. Od dnešní doby se budu věnovat Javě či databázím. Pokud je někdo v podobné situaci jako já, přivítám jeho připomínky.

    jo ja ale nechce se me ucit novy jayzk, maximalne neco podobneho jako PHP. A hlavne jednoducheho treba python. Java hezka ale tezka pro leniveho PHP programatora.

    Hlavne kdo se ma ucit tolik zkratek.

    OdpovědětVymazat
  2. Ahoj, odhodlal jsem se přesně ke stejnému kroku, PHP je fajn pro začátečníky, ale ve vývoji je několik let za Javou; je to bastl obtěžkaný svou vlastní historií, a hlavně, všude je pro PHP strašně moc bordelu - těžko pak v tom najít něco rozumného (díky bohu za PEAR).

    Chtěl bych poprosit autora, jestli mu všechno jede v cajku, jestli by nepopsal u jednotlivých kroků, jak konkrétně postupoval. Já třeba prozatím skončíl u kroku instalace JDBC konektoru, který jsem dal do SunAppServer/lib, ale server ho nedokáže najít a aplikace hlásí výjimku nenalezenou třídu (do logu, případně při startu v NetBeans do "output").

    > ucit tolik zkratek
    Tohle je přesně problém Javy - pokrývá prakticky všechny potřeby programátora běžných aplikací, pro každou je aspoň jedno řešení, a pro každé řešení je aspoň jedna zkratka. Dále přehršle _dobrých_ frameworků a vůbec knihoven, serverů, a všechno celkem kvalitní... jenom za servery: Sun App Server, JBoss, BEA Weblogic, něco od IBM, Tomcat, ...

    OdpovědětVymazat
  3. to Ondra: spoustu veci jsem resil pomoci fora, ci dohledavani na internetu. Veci, o kterych se moc nepise a muzou znamenat problemy, se budu snazit popisovat v malych clancich na tomto weblogu.
    Informaci ohledne jee5 je tolik, ze se 90% problemu da najit na forech. Vetsinou uz se vyskytl nekdo, kdo resil stejny problem :)
    Jinak, dobra je konference na java.cz, samotna konference ma alespon uroven, narozdil od nekterych diskuznich for.
    Jinak nejvetsim zdrojem jsou samotne stranky sunu, at uz forum, ci ruzne tutorialy.
    Ten mysql-connector nahraj do glassfish/domains/domain1/lib/ext/ pote ho restartuj a vyzkousej. Nastavit connection pool je velice jednoduche, samozrejme, kdyz pouzijes admin konzoli http://localhost:4848/
    V samotne konsoli najdes i vypis logu.
    Co se tyce tech zkratek. Souhlas, na druhou stranu si musim uvedomit, ze rich aplikace se deli do nekolika mensich vrstev, ktere jsou dale deleny pomoci pouziteho frameworku. Vsechno toto musi byt nejak pojmenovano :)
    Navic mam stale moznost vyberu. U .NET mam jednu danou cestu a tim to konci. Pro nekoho to muze byt nevyhoda pro nekoho zase vyhoda. Osobne se domnivam, ze by se clovek na zacatku mel drzet SUNovskych standardu a az po zvladnuti zakladnich oblasti a dostatku zkusenosti se treba poohlednout po nejakem open-source reseni. Ze standardu pote vychazeji vsechny open-source reseni (alespon ve vetsi mire), cimz mam zajisteno, ze to co se ucim neni k nicemu. Proste na tech standardech pote muzu dale stavet. A nebo u nich zustat. Myslim, ze zase neni tolik duvodu pro prechod na jineho vendora. JPA ci EJB3.0 jsou dost slusne navrzene a pokud se budou dale rozsirovat, tak proc prechazet jinam. Stejne je to asi i s JSF ci Swingem.
    Proste kazdy ma pravo vyberu, akorat se v tom gulasi jmen musi zorientovat a najit sve favority :)

    OdpovědětVymazat
  4. Jsem v podobné situaci jako ty - také se snažím s PHP skončit (ve firmě ho stále sem tam dělat musím) a orientovat se zcela na Javu.

    Musím říci, že na začátečníka s Javou jsi vybral velmi dobré řešení pro Tvůj projekt. Jedná se o dost náročné věci - jak dlouho Ti trvalo tohle všechno nastudovat?

    OdpovědětVymazat
  5. to Vlasta: Predne bych asi mel rict, ze ne vse umim na takove urovni, abych mohl spokojene jen psat kod.

    Co se tyce Javy, tak bych to videl tak na 1 rok. Spise tedy OOP. Pro proceduralniho programatora to nebylo nic moc :) Ale lidi, co psali v PHP a pak presli na nejaky "ciste" objektove orientovany jazyk, si s tim take urcite lamali hlavu.

    PHP projekt jsem pote prepsal asi tak 10xkrat, nez jsem prisel na to, jak vlastne v objektech tak nejak psat. Samozrejme ani dnes z toho neni nic idealni. Prejit pak na Javu (zakladni uroven) uz nebylo tak slozite. Takze bych to videl tak na 1 rok.

    Co se tyce Java EE 5, vzal jsem si tutorial od Sunu a ten nastudoval asi za 2-3 mesice a pote zkousel. Sice to neni opet idealni, ale napsat nejakou tu stateless beanu uz tak nejak zvladam. Samozrejme, stale se jedna o mensi kusy kodu, ktere ve vysledku nejsou asi idealni.

    Ted jsem presel na netbeans platformu, kde zacina to prave peklo. Sehnal jsem si knizku "Plugging into the Netbeans Platform", ale abych byl uprimny, nejak mi to do hlavy neleze. Prijde mi, ze tato kniha neni uplne idealne napsana pro nekoho kdo s tim zacina. Navic mam problemy s rychlosti. Vse mi to prijde silene pomale. Holt chyba mezi zidli a klavesnici. Ale nadeje umira posledni a verim, ze za par mesicu to bude lepsi.

    Nevim jestli jsem zvolil zrovna to spravne reseni, zacina me trochu odrazovat ta vzdalena volani EJB, kde na zacatku musim natahat silene moc knihoven (navic i pro podporu JMS), aby byla vubec swing aplikace spustitelna :(

    Takze kdyz to shrnu, tak je to zatim velky boj uz tak 1,5-2 roky. Hodil by se mi nejaky senior ci architekt, ktery by mi alespon tyden sedel za zadkem a placal pres ruce. Stylem pokus-omyl, nejistota spravne zvoleneho reseni me docela ubiji :(

    Navic, ted chvili musim delat v PHP, protoze tam potrebuji dotahnout nejake veci. Navic jsem stale v PHP o mnoho produktivnejsi a i s distribuci to neni nijak slozite, nakopirovat novy php skript na server, refresh stranky a je to. U te desktop aplikace je situace o dost slozitejsi. Navic pokud jeste pripocitam deploy ejb projektu na server, tak jsem na dvou krocich, ktere se nedaji delat za behu.

    Jak jsi na tom ty? :)

    OdpovědětVymazat
  6. Ja jsem na tom ja lze zjistit z meho blogu. Ale ve zkratce - trvalo mi take delsi dobu nez jsem do Javy nejak proniknul. Ve firme delame pouze webove aplikace. Delam s temito frameworky - Spring framework, Acegi serucity, Hibernate, Spring web flow, Jasperreports...
    Zatim jsem se nedostal k JPA, EJB, Swingu, JMS...proste milion veci. Nedavno jsem si udelal ten zakladni sunovsky certifikat - abych alespon pro sebe vedel jak na tom jsem. Mam spise siroky zaber - takze delam i do AJAXu, css, html, xml, php, .NET, Actionscript...je toho milion. Ale jak jsem napsal - Java je u me na prvnim miste.

    OdpovědětVymazat
  7. A jak jsi na tom teď? Já jsem šel trochu jinou cestou, a nedržel jsem se nutně SUNu, protože ten má dost často přebujelou konfiguraci...

    Vyvíjím aplikaci, která bude taky částečně webová, částečně desktop a částečně démon na pozadí. Začal jsem backendem, takže nejprv na něco iBatis a jinak Hibernate, ten jsem potom přepsal na JPA, to jsem později dal do Springu. Web jede na JBoss Web, doporučuju vyzkoušet (já ale nepotřebuju zatím aplikační server). Dále FreeMarker a Struts, na část aplikace Wicket. Na webové služby Axis2. Na ulehčení desktopu bych nebral NetBeans platformu, ta není prý nic moc - ačkoliv IDE je super. Já zatím vystačil se Swingem podpořeným JGoodies Forms. Dále POI na čtení z Excelových souborů... Všechno jsem to nabaloval postupně, podle toho, jak jsem co potřeboval, takže docela přehledně, a dal jsem to cca přes léto.

    Jinak, sháním Javistu - webaře na údržbu a rozvoj webové části dvou projektů... nechcete někdo?

    OdpovědětVymazat
  8. V PHP už vůbec nedělám. Pouze pokud přijde nějaký požadavek na tvorbu internetového webu jako: e-shop, atd. Zde je java dost problematická z pohledu webhostingu.

    Jinak "core business" je intranet a pure Java :)

    Také mám web-desktop klienta. Při tomto návrhu je důležité správné rozdělení vrstvev a zajištění zapouzdřenosti na jejich úrovni.

    OdpovědětVymazat

Když programátor založí a řídí firmu

Jako malý jsem chtěl být popelářem. Ani ne tak proto, že bych měl nějaký zvláštní vztah k odpadkům, ale hrozně se mi líbilo, jak...