Přeskočit na hlavní obsah

JBoss Seam 2.0 & Hibernate 3.2.5 & Glassfish V2

Když jsem přemýšlel jaký zvolím framework pro webovou aplikaci, naskytly se mi v podstatě dvě možnosti. Buď JSF či Struts. Osobně jsem raději hned sáhnul po JSF. Komponentový framework, navíc tolik dotovaný samotným Sunem.

Po vyzkoušení pár příkladů jsem ihned přešel do vývoje. Zde ovšem nastaly potíže. Psaní stejného kódu stále dokola. Stálá definice přes XML, neexistence použitelného scope pro komponenty. Navíc jsem na vývoj sám a přijde mi příliš těžkopádné vše striktně oddělovat.

Našel jsem Seam. Jedná se o webový framework od JBosse, který tvoří ono lepidlo mezi JSF a EJB3. Samotná definice komponent je plně řízena anotacemi, čímž odpadají mnohé XML definice. Seam navíc obsahuje dosah komponenty „conversation“. Taková komponenta poté existuje od doby vzniku konverzace až do jejího zániku. Odpadá tak potřeba definovat komponenty jako „session“. Další věcí, která mě zaujala byla podpora Hibernate Validatoru. Pokud použiji Hibernate, mám možnost nechat Seam, ať mi jednotlivé hodnoty entit validuje podle definice z Hibernate.

Já se zde nechci zabývat podrobnostmi, jak daný Seam funguje, k tomu slouži referenční příručka. Mimochodem skutečně výtečně napsaná. Spíše se zaměřím na to, jak nainstalovat Seam 2.0 na Glassfish V2.

Seam je primárně určen pro aplikační server Jboss. Pravdou ovšem je, že ho lze použít i na jiném serveru či přímo bez EJB kontejneru (viz. Tomcat). Samotná konfigurace se liší jen nepatrných věcech. Mě ovšem dali pekelně zabrat :)

Takže, nejprve je nutné stáhnout samotný Seam 2.0 a Hibernate. Již přímo v examplech existuje ukázková aplikace s názvem booking (v adresáři jee5). Jedná se o web. aplikaci pro hotel, kde si můžete zamluvit vlastní aparmá. Na aplikaci je vysvětlené jak funguje komunikace mezi Seamem, JSF a JPA.

Při tvorbě vlastní aplikace si musím nejprve zaregistovat dané knihovny.
Pro webovou vstvu to je:

  • el-api.jar

  • el-ri.jar

  • jsf-facelets.jar

  • jboss-seam-ui.jar


Pro EJB modul:

  • jboss-seam.jar

  • jboss-seam-debug.jar

  • hibernate-all.jar

  • thirdparty-all.jar



EJB Modul dále musí obsahovat conf/seam.properties, který může být klidně prázdný. Definice persistence.xml, kde je třeba, aby byla správně nastavena transakce:




org.hibernate.ejb.HibernatePersistence
my/db



value="org.hibernate.cache.HashtableCacheProvider"/>








Webový modul:
Jednak obsahuje web.xml, kde je třeba dodefinovat Seam:



org.jboss.seam.servlet.SeamListener



Seam Filter
org.jboss.seam.servlet.SeamFilter



Seam Filter
/*



Seam Resource Servlet
org.jboss.seam.servlet.SeamResourceServlet



Seam Resource Servlet
/seam/resource/*




A jednak reference na EJB Beany.

For Transaction from EJB3 Container
Irminsul/EjbSynchronizations/local
Session
org.jboss.seam.transaction.LocalEjbSynchronizations
EjbSynchronizations



MyEARName/MyBean/local
Session
ejb.seam.app.MyLocal
MyBean


Je to trochu nevýhoda oproti použití samotného Jbosse, kde reference jsou dohledany automaticky.

Dalšími konfiguračními soubory jsou:

  • components.xml

  • exceptions.xml

  • pages.xml

  • security.drl



V components.xml se definují jednotlivé vlastnosti Seamu jako jndi-pattern, security, atd.






concurrent-request-timeout="10000"
conversation-id-parameter="cid"/>















/WEB-INF/security.drl



Zaregistrování JNDI patternu je potřebné pro referencování EJB Bean. Dále nastavím, že transakce je řízena přes EJB kontejner, kde si Seam dokáže odchytit i exeptions při rollbacku.
Dále se jedná o nastavení časové platnosti konverzace.
Poslední věcí je authentifikace a nadefinovaní pravidel pro práci s rolemi a celkovými pravami nad aplikací.

V exceptions.xml se definuje ruční správa nad výjimkami. Jinymi slovy, pokud dojde k výjimce, mohu nechat aplikaci automaticky někam přesměrovat, odeslat příslušnou správu, atd. Samotná konfigurace může vypadat následovně:

V pages.xml se definuje page-flow. Zde je možnost využít klasický přistup přes navigation-rule v JSF nebo Seam přístup. Osobně se mi více zalíbíl tento přístup, jelikož povyšuje definici mnohem dál než v případě JSF.

V security.drl mám možnost definovat, nastavovat, odebírat, upravovat práva jednotlivých rolí. Jedná se o jakýsi konfigurační skript nad správou rolí. Pokud například chci, aby role admin mohla to samé co role obchodnik, žádný problém takovou věc nastavit.

Pro samotný běh enterprise aplikace je ještě zapotřebí nadefinovat jboss-seam.jar jako ejb modul. Definice se provádí v application.xml.

Pro práci s hibernate je zapotřebí nahrát všechny požadované knihovny do $GLASSFISH_HOME/lib a restartovat server.

Každý, kdo to s webovými aplikacemi v Jave myslí vážně, měl by se na Seam podívat. Už jen z prostého důvodu, že Gavin King se stal hlavním vývojářem pro novou specifikaci WebBeans, která by měla být v Java EE 6. Jak je patrné, tak WebBeans vycházejí právě z konceptu Seamu.

Komentáře

Populární příspěvky z tohoto blogu

Jak si v IT vydělat hodně peněz?

Na začátek by bylo dobré, abych objasnil samotný titulek, který může na někoho působit jako červený hadr. Článek nebude o obecných pravidlech, ale bude vyprávět můj vlastní příběh, na kterém vám zkusím ukázat, jak se dá docílit úspěchu, či alespoň správně nastartovat svojí vlastní kariéru v IT.

I když se z názvu článku dá dedukovat, že se vše bude točit kolem peněz, není tomu tak. Alespoň ze dvou třetin určitě ne. Ale to už předbíhám, pojďme to raději vzít hezky popořadě...

Kdybychom měli mluvit o roce 2017 jako o přelomové době, nejspíše to nebude pravda. I když pro někoho to může být rok plný úspěchů a štěstí v podobě narození zdravých dětí, svatby či první velké lásky, tak z pohledu lidstva se jedná o rok, který jen kopíruje předešlé a v oblasti technologií nás posouvá stejným tempem jako rok předtím.

Jsem naprosto přesvědčen o tom, že i když se současná doba tak nenazývá, tak prožíváme dobu, která jednou bude označena za revoluční, a to zejména díky vynálezu internetu, který je s…

Jak by se firmy neměly chovat k programátorům?

Každý, kdo pracuje v IT oboru, se jistě již setkal s různými „geniálními nápady“, od kterých si firma slibovala zlepšení produktivity či snížení nákladů. Ať už je to zavedení agilních principů, striktní kontrola práce či zavedení nové a skvělé metodiky, o které si „šéf“ přečetl včera na internetu. Jsou z toho skutečně tak nadšení i samotní vývojáři? A bude nový nápad fungovat?
K napsání tohoto článku mě navedly různé programátorské diskuze, kde si lidé stěžovali na firmu, kde pracují. Příklady, které zde uvedu, jsou z reálné praxe. Ať už jsem je zažil jako řadový programátor, či jako šéf týmu.
I když je poptávka po programátorech tak vysoká, že Vás headhunteři nahánějí i ve chvílích, kdy o to opravdu nestojíte, tak i přes to je mnoho lidí, kteří se bojí opustit svoje současné zaměstnání.
Čeho se nejčastěji bojíme? Je to samozřejmě nejistota, kterou si často omlouváme větami jako: „Tady mám své pohodlí, co když to jinde mít nebudu?“ nebo „I když mě to v práci štve a nebaví, tak mě ale…

Jak jsem technologicky postavil startup

Tento příběh pojednává o technologiích, nástrojích a vůbec o všem, co jsem potřeboval k tomu, abych byl schopen, postavit startup na zelené louce.

Každý správný příběh začíná stejně: "Jednou jsem...."

Kapitola první: Nápad
Jednou jsem se setkal s člověkem, který měl nápad na produkt, který se v průmyslu zatím nevyskytuje. I přes prvotní skepsi, kdy jsem si říkal: "Tohle už přeci dávno v průmyslu existuje, ne?", jsem došel ke zjištění, že nikoli.

Tím jsem se dostal ke svému prvnímu poučení. Průmysl je technologicky dost zabržděný. Osobně se domnívám, že těch důvodů, proč tomu tak je, je několik. Za prvé je to fakt, že většina lidí, kteří se pohybují v tomto odvětví jsou často konzervativní a za správné považují pouze léty osvědčené věci. Druhým důvodem je to, že jakákoli změna znamená riziko. Ať už z pohledu finanční ztráty tak i z pohledu stability výroby. No a třetím a nejzásadnějším důvodem je to, že ač zde máme spousty technologických vymožeností, narážíme na to,…