Bevezetés a Seam keretrendszer használatába

Hasonló dokumentumok
Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

A Java EE 5 plattform

JEE tutorial. Zsíros Levente, 2012

Stateless Session Bean

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

JAVA webes alkalmazások

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

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Hello, EJB! Egy egyszerű példa

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

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

Bevezető. Servlet alapgondolatok

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

A Java Persistence API PersistenceAPI / 3

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

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

Szoftverarchitektúrák. 12. Sorozat portál (követelmény specifikáció)

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

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

Osztott rendszerek, Java EE. Általános bevezető

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

1. fejezet Bevezetés a web programozásába (Balássy György munkája) Az internet működése... 11

Enterprise Java Beans. EJB - Általános bevezető

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Webshop készítése ASP.NET 3.5 ben I.

libgdx alapok, első alkalmazás

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, Quantum GIS program alkalmazásával Útmutató 2010.

Telepítési Kézikönyv

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

OOP #14 (referencia-elv)

Thermo1 Graph. Felhasználói segédlet

Webalkalmazás fejlesztés Java EE környezetben NetBeans segítségével: JavaServer Faces 1.2 AJAX

OOP: Java 4.Gy: Java osztályok

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

Oktatási cloud használata

Digitális aláíró program telepítése az ERA rendszeren

Hálózati operációs rendszerek II.

Petőfi Irodalmi Múzeum. megújuló rendszere technológiaváltás

TERC V.I.P. hardverkulcs regisztráció

ALKALMAZÁS KERETRENDSZER

MVC desktop alkalmazás esetén. MVC Model-View-Controller. eredete: Model View Controller (MVC) elv Java EE Java alapú Web alkalmazások

Közösség, projektek, IDE

Hálózati betekint ő program telepítése mobil telefonra. Symbian. alarm shop. Windows mobile Android IPhone Blackberry

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Osztályok. 4. gyakorlat

Java Servlet technológia

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

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához ERA. Elektronikus aláírás - felhasználói dokumentáció

JavaServer Pages (JSP) (folytatás)

Kompozit alkalmazások fejlesztése. IBM WebSphere Portal Server

BME IK 2 JAVA SERVER FACES UML-1 20/11/2013. Apache Struts. Spring MVC. Java Server Faces. Google Web Toolkit. Képességek

JavaScript Web AppBuilder használata

Webes alkalmazások fejlesztése

Microsoft SQL Server telepítése

A Java nyelv. Dialógus ablakok. Elek Tibor

8. rész: Implementáció JDeveloperben

CareLink Personal telepítési útmutató. Első lépések a CareLink Personal adatfeltöltéshez

KnowledgeTree dokumentumkezelő rendszer

Nyilvántartási Rendszer

Testreszabott alkalmazások fejlesztése Notes és Quickr környezetben

Feltörekvő technológiák: seam, drools, richfaces és társai a JBossban

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java programozási nyelv 6. rész Java a gyakorlatban

Oralce kliens installálása Windows Server 2003-ra

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

Web-fejlesztés NGM_IN002_1

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Programozó, csoportvezető

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Alap számológép alkalmazás

A telepítési útmutató tartalma

Web-fejlesztés NGM_IN002_1

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Cikktípusok készítése a Xarayában

NAGY TELJESÍTM. Szerzők Dévai. István Automatizálási. és s Alkalmazott Informatikai Tanszék

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Tanúsítványkérelem készítése, tanúsítvány telepítése Microsoft Internet Information szerveren

Az Apache Wicket keretrendszer

A JavaServer Pages (JSP)

SSL VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

Windows Server 2008 Standard telepítése lépésenként VirtualBox virtuális gépbe

Viczián István IP Systems JUM XIX szeptember 18.

webalkalmazások fejlesztése elosztott alapon

Kezdő lépések Microsoft Outlook

Java-s Nyomtatványkitöltő Program Súgó

Junior Java Képzés. Tematika

GeoServer, OpenLayers és WFS. Dolleschall János

Entity Framework alapú adatbáziselérés

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

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

Webtárhely létrehozása a helyen. Lépések Teendő 1. Böngészőbe beírni: 2. Jobb oldalon regisztrálni (tárhelyigénylés).

10.óra CodeIgniter Framework #3. Gyimesi Ákos

Java Web technológiák

Rendszergazda Debrecenben

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

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

Internetkonfigurációs követelmények. A számítógép konfigurálása. Beállítások Windows XP alatt

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Átírás:

Bevezetés a Seam keretrendszer használatába Készítette: Csikós Donát Készült: 2011. Február

Bevezetés A modern Java EE alapú rendszerekben sok összetett eszközkészlet alakult ki, melyek a gyakorlatban sokszor felmerülő problémákra próbálnak megoldást nyújtani. A Seam keretrendszer egy saját objektummodell bevezetésével, és sok hasznos technológia integrációjával próbálja segíteni a programozók életét. A bemutató célja, hogy egy egyszerű példán keresztül bemutassa a Seam alapvető tulajdonságait. A leírás feltételezi az Eclipse IDE felhasználó ismeretét. Szükséges szoftverek 1 Alkalmazásszerver Jboss Application Server 5.1 Seam Runtime Seam 2.2.1.FINAL Adatbáziskezelő MySql 5.1 Jdbc driver MySql Connector/J 4.1.14 Fejlesztőkörnyezet Eszköztámogatás Jboss Tools 3.2 Előkészületetek Eclipse 3.6 for Java EE developers A bemutatóhoz az aktuális gépen futnia kell egy MySql adatbázisnak, melyben létezik egy szolgint_demo adatbázis. Új projekt létrehozása A Seam kipróbálásához először a Jboss Tools segítségével létrehozunk egy új projektet, ami minden szükséges állományt és beállítást tartalmaz. Az induláshoz válasszuk ki az Eclipse főmenüjéből a File New Other Seam Web Project pontot, és kövessük az utasításokat. 1 Alapinformációk megadása A projekt neve mellett meg kell adni egy Runtime -ot, ami és egy Target Server -t. Itt lehet beállítani a felhasznált alkalmazásszerver paramétereit, amin a programunkat futtatni fogjuk. 1 A bemutató Fedora Linux 14 rendszeren készült, de Windows és Mac OS X Operációs rendszeren is működnie kell.

2 Java beállítása Az alapbeállításként felkínált src könyvtár megfelelő, kattintsunk a Next gombra. 3 Web Module A következő lépésben már fontosabb fontosabb beállítások következnek. A Content directory annak a mappának a neve, ami a webkiszolgáló gyökerébe kerül. A web.xml állomány a Servlet technológia 2 specifikációjának része, ami a kiszolgálón találgató programjaink leírását tartalmazza (elérési út, indulási paraméterek, stb.). A következő képen látható beállítások megfelelőek: 2 A servlet egy olyan JSR-154-es specifikációnak megfelelő Java osztály, http kérésekre webes tartalmakat szolgáltat. Bővebb információ: http://jcp.org/aboutjava/communityprocess/mrel/jsr154/index2.html

4 JSF beállítások A Seam alapértelmezetten Java ServerFaces-t használ a megjelenítéshez, ennek a beállításai: Configuration File: A megjelenítéshez kapcsolódó információkat tartalmaz (navigációs szabályok, felhasznált osztályok). Servlet Name: A JSF-et kezelő servlet neve. Servlet Class Name: A JSF servlet osztálya. URL Mapping Patterns: Milyen mintájú kéréseket szolgáljon ki a JSF. Az előre beállított értékek megfelelőek.

5 Seam konfiguráció A Runtime-ban meg kell adni a Seam disztribúció elérési útját. A Deploy as pontban állítható, hogy milyen formátumban kerüljön telepítésre a programunk az alkalmazásszerverre. Ha a WAR -t választjuk, akkor a Seam-es komponenseink POJO-k (Plain Old Java Object-ek), ha pedig az EAR -t, akkor EJB Session Bean-ek lesznek. Az adatbázis kapcsolatnál grafikusan adhatjuk meg, hogy a Seam-es alkalmazás hol tárolja az adatait. Ha készen vagyunk, akkor az alábbi képernyőképhez hasonló adatokat kell látunk. Alapértelmezetten az Eclipse minden mentés után automatikusan telepíti is a projektet. Ezt a Server view -ban érdemes kikapcsolni. Az alkalmazás kipróbálása Kattintsunk jobb gombbal a Server view -ban az alkalmazásszerverre és válasszuk a Start -ot. A konzolban ekkor megjelenik az alkalmazásszerver kimenete. Megtörténhet, hogy az alkalmazásszerver a programunkat korábban próbálja meg betölteni, mint a hozzá tartozó adatforrást-leírót (szolgint-demo-ds.xml), ami egy hosszú hibaüzenetet eredményezhet a kimeneten. A megoldáshoz elég még egyszer kezdeményezni a telepítést (deploy).

Ha minden rendben ment, akkor az alkalmazás elérhető a http://localhost:8080/szolgint-demo címen. Seam komponens létrehozása és használata Definiálni fogunk egy egyszerű Seam komponenst, mely segítségével elegánsan lehet kezelni a felhasználó felület eseményeit és a hozzá tartozó üzleti logikát. Bár a tooling ad segítséget a komponensek definiálásához, mégis egyszerűbb kézzel végrehajtani azt, mivel egyrészt nem bonyolult, másrészt pedig nem generálódik felesleges kód. 1 Adatmodell definiálása Először hozzunk létre egy könyvet reprezentáló entitást, melynek metaadatait JPA annotációkkal adjuk meg: package szolgintdemo.domain; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.id; import org.jboss.seam.scopetype; import org.jboss.seam.annotations.name; import org.jboss.seam.annotations.scope; @Entity @Name("bookToStore") @Scope(ScopeType.EVENT) public class Book { Long id; String author; String name; @Id @GeneratedValue public Long getid() { return id; public void setid(long id) {this.id = id; public String getauthor() { return author; public void setauthor(string author) {this.author = author; public String getname() {return name; public void setname(string name) {this.name = name;

A @Name annotációval lehet egy Seam komponenst definiálni, ami a keretrendszer központi eleme. A komponensek egy saját konténerben tárolódnak, amiben a tárolt objektumok életciklusa automatikusan menedzselésre kerül. Az egyes komponensek életciklusát a @Scope annotációval lehet definiálni. Beállítható egy JSF életciklus lefutásáig létező komponenstől egészen az üzleti folyamatok szintjéig élő konfiguráció is. Kiemelt szerepe van a conversation scope-nak, ahol eseményvezérelten lehet az egyes elemek létrehozását és törését kivitelezni. Ennek bemutatására a második gyakorlaton kerül sor. A komponensek dinamikusan létrehozhatóak, és érhetőek el, amire a következő pontban lesz példa. Ugyan a Seam komponensekhez külön konténer tartozik, ettől függően szinte minden lehet komponens. Ebben a példában a komponensek állapottal rendelkező (stateful) session bean-ek, amik az EJB konténerben futnak, az életciklusukat azonban a keretrendszer kezeli. A Seam2 keretrendszer az EJB-k mellett alapbeállításként támogatja a POJO és spring bean-ek használatát. 2 Üzleti metódus létrehozása Hozzunk létre egy osztályt, amelynek segítségével a könyveinket tudjuk elmenteni és kilistázni. package szolgintdemo.business; import java.util.list; import javax.persistence.entitymanager; import javax.persistence.query; import org.jboss.seam.annotations.in; import org.jboss.seam.annotations.name; import org.jboss.seam.faces.facesmessages; import szolgintdemo.domain.book; @Name("bookManager") public class BookManager { // Fontos, hogy ugyanazt a változónevet adjuk meg, mint ami // a Book osztály @Name annotáció paraméterében szerepel. @In(required=false, create=true) Book booktostore; @In EntityManager entitymanager; @In FacesMessages facesmessages; public String storenewbook(){ entitymanager.persist(booktostore); facesmessages.add("insert completed successfully."); return null; public List<Book> getallbooks(){ Query q = entitymanager.createquery("select b from Book b"); return q.getresultlist(); Ami az előző példához képest újdonság, az az @In annotáció. Ezzel lehet elérni egy komponensből egy másikat anélkül, hogy külön lookup metódussal le kellene kérdezni a referenciáját. A paramétereiben beállíthatjuk, hogy a komponensnek léteznie kell-e, illetve hogy a rendszer hozzon e létre egy új példányt, ha a használatkor még nem létezik. Látható, hogy a saját komponensek mellett létezik sok előre definiált is. Az @In-jektálás a tagváltozó konkrét nevének felhasználásával történik (booktostore).

3 Megjelenítés definiálása 3 A programunk kipróbálásához egy egyszerű JSF megjelenítést használunk, amit a home.xhtml 4 állományba írunk be: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:s="http://jboss.com/products/seam/taglib"> <h:messages /> <rich:panel> <f:facet name="header">book manager test</f:facet> <h:form> <h:panelgrid columns="2"> <h:outputtext value="author:" /> <h:inputtext value="#{booktostore.author" /> <h:outputtext value="name:" /> <h:inputtext value="#{booktostore.name" /> <h:outputtext value="" /> <h:commandbutton action="#{bookmanager.storenewbook" value="add book" /> </h:panelgrid> </h:form> </rich:panel> <h:datatable value="#{bookmanager.allbooks" var="_b"> <h:column> <f:facet name="header">author</f:facet> #{_b.author </h:column> <h:column> <f:facet name="header">name</f:facet> #{_b.name </h:column> </h:datatable> </html> A következő elemek fontosak: A <h:messages />-ben fogadja a backend üzeneteit; ez a szabványos JSF üzenetek kezelésének módszere. A <h:form/> pontosan egy <form> tag-et fog generálni a kimeneti html kódba. Az űrlapon kitöltött adatokat közvetlenül a Book típusú booktostore nevű komponensbe kerülnek be,, a kapcsolatot pedig szabványos EL (Expression Language) kifejezés teremti meg.. Az űrlap elküldését és a hozzá tartozó manager akciót szintén EL kifejezéssel adjuk meg. (#{bookmanager.storenewbook). A komponensekben található attribútumokat a Java-ban szokásos getter-setter párosokon keresztül lehet elérni. Az itteni példában az egyszerűség kedvéért a getter metódusban van az összes adat lekérdezése. Ha minden rendben van, akkor a böngészőben a következő tartalom jelenik meg: 3 Beveterés a Java ServerFaces működésébe: http://www.ibm.com/developerworks/library/j-jsf1/ 4 A Seam a Facelets templating tecnológiát is támogatja: http://www.ibm.com/developerworks/java/library/j-facelets/

Validáció hozzáadása A Seam keretrendszer nagyon sok külső technológiát integrált magába, amit az alábbi példa szeretne demonstrálni. Jelen esetben a bemeneti adatok ellenőrzésére használható a Hibernate Validator eszköz ami out-of-the-box működik. Ez az eszköz közvetlenül az adatmodellen definiált kényszeretek figyeli és megszakítja a program futását, ha valaki (pl. a megjelenítésen keresztül) megpróbál érvénytelen adatot felvenni. A kipróbáláshoz a Book.java állományt kell az alábbi módon kiegészíteni: @org.hibernate.validator.length(min=4, message="too short name") public String getname() { return name; Hogy az eszköz a JSF életciklus validációs szakaszába integrálódjon, mindössze annyit kell tenni, hogy az ellenőrzendő űrlapot (<h:form/>) körbevesszük az <s:validateall> jelöléssel. Ha ez megvan, akkor az alkalmazásszerverre való feltöltés után a nem megfelelő adatokat a rendszer automatikusan elutasítja: