Enterprise JavaBeans fejlesztési példa

Hasonló dokumentumok
Enterprise JavaBeans fejlesztési példa

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Adatkezelés. 11. előadás (Entity Beans)

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

Segédanyag: Java alkalmazások gyakorlat

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

A Java EE 5 plattform

5. rész: A Java EE és az Enterprise Bean réteg. Bakay Árpád dr. NETvisor kft (30)

OOP: Java 8.Gy: Abstract osztályok, interfészek

Segédanyag: Java alkalmazások gyakorlat

Stateless Session Bean

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java Remote Method Invocation API

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

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java és web programozás

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java IX. telkezelés a Java-ban

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java IX. telkezelés a Java-ban

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

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Bevezető. Servlet alapgondolatok

JNDI - alapok. Java Naming and Directory Interface

Hello, EJB! Egy egyszerű példa

Programozási nyelvek Java

Osztályok. 4. gyakorlat

Tartalom. Az EJB 2.1 problémái Az EJB 3 megoldásai

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

OOP: Java 8.Gy: Gyakorlás

Adatbázisok webalkalmazásokban

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

A Java Persistence API PersistenceAPI / 3

R I Szer e i r alizáció.

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

A WEB programozása - JSP1 dr.gál Tibor őszi félév

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Java RMI Áttekintés. A Java RMI. A Java RMI architektúrája. Ficsor Lajos. Általános Infromatikai Tanszék Miskolci Egyetem 1.

Java programozási nyelv 4. rész Osztályok II.

Programozási nyelvek II.: JAVA

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

JavaServer Pages (JSP) (folytatás)

OOP: Java 4.Gy: Java osztályok

Java III. I I. Osztálydefiníció (Bevezetés)

Java programozási nyelv 5. rész Osztályok III.

JEE tutorial. Zsíros Levente, 2012

Java III. I I. Osztálydefiníció (Bevezetés)

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

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

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Programozási technológia

Java RMI Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. javarmi / 1

Java és web programozás

Collections. Összetett adatstruktúrák

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

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

OOP és UML Áttekintés

Java Programozás 11. Ea: MVC modell

Globális operátor overloading

BME MOGI Gépészeti informatika 8.

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

ANDROID ALKALMAZÁSFEJLESZTÉS

Bevezetés a Java programozási nyelvbe

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

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Már megismert fogalmak áttekintése

Java I. A Java programozási nyelv

Java II. I A Java programozási nyelv alapelemei

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Áttekintés. Tartalom. Mi is az a Bean?

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

Generikus Típusok, Kollekciók

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

Programozási technológia

Access adatbázis elérése OLE DB-n keresztül

Programozási nyelvek Java

Párhuzamos és Elosztott Rendszerek II

Objektumorientált programozás C# nyelven

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Szoftvertechnolo gia gyakorlat

7. K: JAVA alapok Konzultáció

Concurrency in Swing

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

JAVA webes alkalmazások

A JavaServer Pages (JSP)

Segédanyag: Java alkalmazások gyakorlat

Átírás:

Enterprise JavaBeans fejlesztési példa Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Enterprise JavaBeans példa

A J2EE SDK installálása Jelenlegi verzió: 1.4 béta (2002. november) Szükséges hozzá a J2SDK legalább 1.4 verziója Letöltés, telepítés Beállítások: J2EE_HOME a telepítés helyére mutasson J2EE_HOME/bin legyen a PATH-ban ANT_HOME legyen az ant helye (alapban megegyezik a J2EE_HOME -al JAVA_HOME a J2SDK helyére mutasson JAVA_HOME/bin legyen a PATH-ban Enterprise JavaBeans példa EJBpelda / 2

A J2EE SDK installálása (folyt.) A j2ee parancs elindítja a szükséges program komponenseket. (A -verbose kapcsoló mutatja történéseket.) A j2ee -stop parancs leállítja a szervert. Enterprise JavaBeans példa EJBpelda / 3

ant Fontosabb segédprogramok Mint a make (Apache) cloudscape Java-ban írt relációs adatbáziskezelő deploytool Alkalmazás telepítő j2eeadmin A J2EE környezet konfigurálására Enterprise JavaBeans példa EJBpelda / 4

Stateless session bean A feladat: (J2EE Turorial-ból) Készítsünk egy bean-t, amely dollárt yen-re, illetve yen-t euróra tud váltani. Ez egy állapot nélküli session bean lesz, mert Nem kell perzisztens adatokat kezelnie Eseti feladatot old meg, a kliens egyszer meghivja, és visszakapja tőle az eredményt. A kipróbáláshoz kell majd egy kliens és egy JSP, mint Web komponens. Enterprise JavaBeans példa EJBpelda / 5

deploytool Új alkalmazás készítése File -> New -> Application Browse File név: ConverterApp.aer Az aer kiterjesztés egy összecsomagolt, telepítésre előkészített alkalmazás szabványos kiterjesztése. Válasszuk a New Application funkciót Enterprise JavaBeans példa EJBpelda / 6

A Converter remote interface import javax.ejb.ejbobject; import java.rmi.remoteexception; import java.math.*; public interface Converter extends EJBObject { public BigDecimal dollartoyen (BigDecimal dollars) throws RemoteException; public BigDecimal yentoeuro (BigDecimal yen) throws RemoteException; } Enterprise JavaBeans példa EJBpelda / 7

A Converter home interface import java.io.serializable; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface ConverterHome extends EJBHome { Converter create() throws RemoteException, CreateException;} Enterprise JavaBeans példa EJBpelda / 8

A Converter bean osztály import java.rmi.remoteexception; import javax.ejb.sessionbean; Import javax.ejb.sessioncontext; import java.math.*; public class ConverterBean implements SessionBean { Enterprise JavaBeans példa EJBpelda / 9

A Converter bean osztály (folyt.) // adattagok BigDecimal yenrate = new BigDecimal("121.6000"); BigDecimal eurorate = new BigDecimal("0.0077"); Enterprise JavaBeans példa EJBpelda / 10

A Converter bean osztály (folyt.) // Business metódusok // Ezért van az egész felhajtás! public BigDecimal dollartoyen(bigdecimal dollar) { BigDecimal result = dollar.multiply(yenrate); return result.setscale(2,bigdecimal.round_up); } public BigDecimal yentoeuro(bigdecimal yen) { BigDecimal result = yen.multiply(eurorate); return result.setscale(2,bigdecimal.round_up); } Enterprise JavaBeans példa EJBpelda / 11

A Converter bean osztály (folyt.) // A SessionBean interface deklarálja az // alábbi metódusokat, tehát kötelező // implementálni, de most nincs funkciójuk. public ConverterBean() {} public void ejbcreate() {} public void ejbremove() {} public void ejbactivate() {} public void ejbpassivate() {} public void setsessioncontext(sessioncontext sc) {} } // ConverterBean Enterprise JavaBeans példa EJBpelda / 12

JAR file előállítása A fejlesztőeszköz segítségével A ConverterJAR.jar file tartalma ConverterBean.class ConverterHome.class Converter.class Egy deployment descriptor, amit a fejlesztőeszköz állít elő Hozzáadás a ConverterApp.ear file-hoz Enterprise JavaBeans példa EJBpelda / 13

J2EE alkalmazás kliens Java program, amely nem feltétlenül ugyanazon a JVM-en fut, mint az alkalmazás szerver Két jar file, amiből az egyik alkalmazás szerver specifikus, így a fejlesztőeszköz generálja A másikat a fejlesztőnek kell megírnia, abban van a kliens funkcionalitása A kliens a bean-t a JNDI segítségével találja meg Enterprise JavaBeans példa EJBpelda / 14

J2EE alkalmazás kliens (folyt.) import javax.naming.context; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; import java.math.bigdecimal; public class ConverterClient { public static void main(string[] args) { try { // Egy JNDI kontextus létrehozása Context initial = new InitialContext(); Enterprise JavaBeans példa EJBpelda / 15

J2EE alkalmazás kliens (folyt.) // A kliens JNDI név kontextusának megszerzése Context myenv = (Context)initial.lookup("java:comp/env"); // A bean referenciájának megszerzése Object objref = myenv.lookup("ejb/simpleconverter"); // Megfelelő típusra konvertálás ConverterHome home = (ConverterHome)PortableRemoteObject. narrow(objref,converterhome.class); // Zöld: JNDI azonosítók Enterprise JavaBeans példa EJBpelda / 16

J2EE alkalmazás kliens (folyt.) // Kérés az EJB konténerhez, hogy hozzon létre // egy bean példányt. // A kérés ereménye egy objektum referencia Converter currencyconverter =home.create(); BigDecimal param = new BigDecimal("100.00"); // Innen már minden egyszerű: a kapott objektum // referencia segítségével meghívható a business // metódus BigDecimal amount = currencyconverter.dollartoyen(param); System.out.println(amount); Enterprise JavaBeans példa EJBpelda / 17

J2EE alkalmazás kliens (folyt.) amount = currencyconverter.yentoeuro(param); System.out.println(amount); System.exit(0); } catch (Exception ex) { System.err.println("Unexpected exception!"); ex.printstacktrace(); } // catch } // main } // ConverterClient Enterprise JavaBeans példa EJBpelda / 18

J2EE alkalmazás kliens (folyt.) Ezután a kliens is csomagolandó egy jar file-ba A file-t hozzá kell adni az alkalmazás ear filejához Be kell állítani a megfelelő JNDI azonosítókat Az alkalmazást telepíteni kell valamilyen eszközzel (deploytool vagy fejlesztőeszköz) A kliens a runclient segédprogammal futtatható Enterprise JavaBeans példa EJBpelda / 19

Web kliens A bean kliense lehet például egy JSP is. Ez egy tipikus megoldás Enterprise JavaBeans példa EJBpelda / 20

Web kliens (folyt.) <%@ page import="converter,converterhome,javax.ejb.*, java.math.*, javax.naming.*, javax.rmi.portableremoteobject, java.rmi.remoteexception" %> <%! private Converter converter = null; public void jspinit() { try { InitialContext ic = new InitialContext(); Object objref = ic.lookup("java:comp/env/ejb/theconverter"); ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objRef, ConverterHome.class); converter = home.create(); Enterprise JavaBeans példa EJBpelda / 21

Web kliens (folyt.) } catch (RemoteException ex) { System.out.println("Couldn't create converter bean."+ ex.getmessage()); } catch (CreateException ex) { System.out.println("Couldn't create converter bean."+ ex.getmessage()); } catch (NamingException ex) { System.out.println("Unable to lookup home: "+ "TheConverter "+ ex.getmessage()); } } Enterprise JavaBeans példa EJBpelda / 22

public void jspdestroy() { %> } <html> <head> </head> Web kliens (folyt.) converter = null; <title>converter</title> <body bgcolor="white"> <h1><b><center>converter</center></b></h1> <hr> Enterprise JavaBeans példa EJBpelda / 23

Web kliens (folyt.) <p>enter an amount to convert:</p> <form method="get"> <input type="text" name="amount" size="25"> <br> <p> <input type="submit" value="submit"> <input type="reset" value="reset"> </form> <% %> String amount = request.getparameter("amount"); if ( amount!= null && amount.length() > 0 ) { BigDecimal d = new BigDecimal (amount); Enterprise JavaBeans példa EJBpelda / 24

<p> <% %> Web kliens (folyt.) <%= amount %> dollars are <%= converter.dollartoyen(d) %> Yen. <p> <%= amount %> Yen are <%= converter.yentoeuro(d) %> Euro. } </body> </html> Enterprise JavaBeans példa EJBpelda / 25

Web kliens (folyt.) Ezután ugyanúgy csomagolás (war file-ba), majd hozzáadás az alkalmazás ear file-jához Telepítés, majd a JSP a szokásos módon indítható Enterprise JavaBeans példa EJBpelda / 26

Állapottal rendelkező session bean Készítése lényegében ugyanaz, mint az állapot mentes esetben Mivel állapota lehet, általában nem csak egy paraméter nélküli create metódus van a home interface-ben, hanem több create. Példa: egy online könyvesbolt kosara. Enterprise JavaBeans példa EJBpelda / 27

Remote interface import java.util.*; import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface Cart extends EJBObject { public void addbook(string title) throws RemoteException; public void removebook(string title) throws BookException, RemoteException; public Vector getcontents() throws RemoteException; } Enterprise JavaBeans példa EJBpelda / 28

Remote interface (megjegyzések) A pirossal jelzett részek kötelezőek extends EJBObject RemoteException A zölddel jelzett BookException jelzi, hogy segédosztály(ok)ra is szükség lesz. Enterprise JavaBeans példa EJBpelda / 29

Home interface import java.io.serializable; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface CartHome extends EJBHome { Cart create(string person) throws RemoteException, CreateException; Cart create(string person, String id) throws RemoteException, CreateException; } Enterprise JavaBeans példa EJBpelda / 30

Home interface (megjegyzések) Több create metódus, paraméterekkel A kivételek kötelezőek Enterprise JavaBeans példa EJBpelda / 31

import java.util.*; import javax.ejb.*; A bean osztály public class CartBean implements SessionBean { String customername; String customerid; Vector contents; public void ejbcreate(string person) throws CreateException {... } Enterprise JavaBeans példa EJBpelda / 32

A bean osztály (folyt.) public void ejbcreate(string person, String id) throws CreateException {... } public void addbook(string title) { } contents.addelement(title); Enterprise JavaBeans példa EJBpelda / 33

A bean osztály (folyt.) public void removebook(string title) throws BookException { boolean result = contents.removeelement(title); if (result == false) { } throw new BookException(title + } " not in cart."); Enterprise JavaBeans példa EJBpelda / 34

A bean osztály (folyt.) public Vector getcontents() { return contents; } public CartBean() {} public void ejbremove() {} public void ejbactivate() {} public void ejbpassivate() {} public void setsessioncontext(sessioncontext sc) {} } Enterprise JavaBeans példa EJBpelda / 35

A bean osztály (megjegyzések) A create metódusoknak nem üres implementációjuk van Több meglepetés nincs Csomagolás, alkalmazáshoz adás, telepítés ugyanúgy A bean jar file-jához kell csomagolni a segéd osztályokat (pl. BookException) is. Enterprise JavaBeans példa EJBpelda / 36

BMP entitás bean Adatbázisban tárolt adatok reprezentálása A bean állapotának és az adatbázis tartalmának a szinkronizálása a bean feladata Enterprise JavaBeans példa EJBpelda / 37

BMP példa Példa: egy bankszámla adatait kezelő bean. A SavingAccountEJB állapota a savingaccount táblában tárolódik, amely az alábbi SQL utasítással képezhető: CREATE TABLE savingsaccount (id VARCHAR(3) CONSTRAINT pk_savingsaccount PRIMARY KEY, firstname VARCHAR(24), lastname VARCHAR(24), balance NUMERIC(10,2)); Enterprise JavaBeans példa EJBpelda / 38

A bean osztály A SavingsAccountBean osztály implementálja Az EntityBean interface-t Egy vagy több ejbcreate és ejbpostcreate metódust "finder" (kereső) metódusokat A business metódusokat "home" metódusokat Enterprise JavaBeans példa EJBpelda / 39

A bean osztály (folyt.) Korlátozások Az osztály public kell legyen Az osztály nem lehet abstract vagy final Egy üres kontruktort kell tartalmaznia Nem implementálhatja a finalize metódust Az EntityBean interface deklarál számos olyan metódust, amit a bean osztálynak (nem üresen) implementálnia kell (pl. ejbactivate, ejbload stb.) Enterprise JavaBeans példa EJBpelda / 40

A bean osztály (folyt.) Az ejbcreate metódus A konténer hívja meg a kliens create metódus hívásának hatására Új elemet illeszt az adatbázisba Inicializálja a bean adattagjait Visszaadja a primary key-t Több is definiálható A példában az insertrow private metódus egy INSERT SQL utasítást ad ki. Enterprise JavaBeans példa EJBpelda / 41

A bean osztály (folyt.) Az ejbcreate metódus forrása: public String ejbcreate(string id, String firstname, String lastname, BigDecimal balance) throws CreateException { if (balance.signum() == -1) { throw new CreateException ("A negative initial balance is not allowed."); } Enterprise JavaBeans példa EJBpelda / 42

A bean osztály (folyt.) try { insertrow(id, firstname, lastname, balance); } catch (Exception ex) { throw new EJBException("ejbCreate: " + ex.getmessage()); } this.id = id; this.firstname = firstname; this.lastname = lastname; this.balance = balance; return id; } Enterprise JavaBeans példa EJBpelda / 43

A bean osztály (folyt.) Az ejbpostcreate metódus Implementálni kell A konténer közvetlenül az ejbcreate után hívja meg Az argumentumok számának és típusának a két metódusra egyeznie kell A visszatérési értéke kötelezően void. Gyakran üres. (A példában is az.) Enterprise JavaBeans példa EJBpelda / 44

A bean osztály (folyt.) Az ejbremove metódus A konténer ezt hívja meg a kliens remove metódushívásának hatására Feladat a bean eltávolítása az adatbázisból. Megfelel egy DELETE SQL utasításnak Enterprise JavaBeans példa EJBpelda / 45

A bean osztály (folyt.) Az ejbremove metódus implementációja: public void ejbremove() { try { deleterow(id); } catch (Exception ex) { throw new EJBException("ejbRemove: " + } } ex.getmessage()); Enterprise JavaBeans példa EJBpelda / 46

A bean osztály (folyt.) Az ejbload és ejbstore metódusok Ha a konténer szükségesnek tarja, meghívja Értelemszerűen implementálandó Ha egy business metódus tranzakcionális, végrahajtása előtt meghívódik az ejbload, utána az ejbstore Enterprise JavaBeans példa EJBpelda / 47

A bean osztály (folyt.) Kereső (finder) metódusok A kliens ezek segítségével kereshet meg egy adott entitás beant. A példában három kereső metódust hívhat a kliens SavingsAccount jones = home.findbyprimarykey("836"); Collection c = home.findbylastname("smith"); Collection c = home.findinrange(20.00, 99.00); A bean osztálynak kell implementálnia ezeket ejbfind prefix-el. (pl. ejbfindbylastname) Enterprise JavaBeans példa EJBpelda / 48

A bean osztály (folyt.) Kereső (finder) metódusok (folytatás) Az ejbfindbyprimarykey implementálása kötelező, a többi opcionális A kliens nem ezeket hívja közvetlenül, hanem a home interface megfelelő (ejb prefix nélküli) függvényeit A visszatérési értékek a primary key vagy annak kollekciója. Enterprise JavaBeans példa EJBpelda / 49

A business metódusok A bean osztály (folyt.) Általában nem tartalmaznak adatbázis kezelést. Az adatfüggetlen logikát valósítják meg. A példa üzleti metódusai: Enterprise JavaBeans példa EJBpelda / 50

A bean osztály (folyt.) public void debit(bigdecimal amount) throws InsufficientBalanceException { if (balance.compareto(amount) == -1) { throw new InsufficientBalanceException(); } balance = balance.subtract(amount); } Enterprise JavaBeans példa EJBpelda / 51

A bean osztály (folyt.) public void credit(bigdecimal amount) { balance = balance.add(amount); } public String getfirstname() { return firstname; } public String getlastname() { return lastname; } public BigDecimal getbalance() { return balance; } Enterprise JavaBeans példa EJBpelda / 52

A bean osztály (folyt.) A "home" metódusok A valamennyi bean-re jellemző üzleti logikát tartalmazzák Nem hivatkozhatnak a bean perzisztens állapotára Általában bean példányok kollekcióján manipulálnak Példa: ejbhomechargeforlowbalance Kezelési költséget von le minden olyan számláról, aminek egyenlege túl kicsi Enterprise JavaBeans példa EJBpelda / 53

A bean osztály (folyt.) A home interface tartalmazza az ejbhome prefix nélküli definíciókat, az implemetációs párjuk a bean osztályban van. A kliens a fentit az alábbi módon hívja: SavingAccountHome home;... home.chargeforlowbalance(...) Enterprise JavaBeans példa EJBpelda / 54

A home interface A kilens által hívható metódusokat definiálja create metódusok "finder" metódusok Egyéb, általános metódusok (mint most a példában a ChargeForLowBalance) Implementációs párjaik valamilyen prefix-el a bean osztályban találhatók. Enterprise JavaBeans példa EJBpelda / 55

A home interface (folyt.) create metódusok Paraméterszignatúrájuk meg kell egyezzen a a megfelelő ejbcreate metódusével. Visszatérési érték típusa a remote interface. A throw ugyanazt a kivétel listát kell tartalmazza, mint a megfelelő ejbcreate metódusé. A throw kell, hogy tartalmazza a javax.ejb.createexception kivételt, a remote home interface ezen felül még a java.rmi.remoteexeption kivételt is. Enterprise JavaBeans példa EJBpelda / 56

A home interface (folyt.) "finder " metódusok Ezeknek is megvan a párjuk a bean osztályban A megfelelők paraméterszignatúrája és kivétel listája meg kell egyezzen A visszatérési értékük típusa a remote interface, vagy abból alkotott kollekció Meg kell jelölni a javax.ejb.finderexception kivételt. A remote home interface metódusainál meg kell jelölni a java.rmi.remoteexception kivételt. Enterprise JavaBeans példa EJBpelda / 57

home metódusok A home interface (folyt.) Mindegyiknek van egy párja a bean osztályban, amelyek neve az ejbhome prefix-el az itt megadott névből képzendő A nevek nem kezdődhetnek create-el vagy find-al A paraméterszignatúráknak és a kivétel listának páronként egyeznie kell. Nem dobhatják a FinderException kivételt Enterprise JavaBeans példa EJBpelda / 58

A home interface (folyt.) import java.util.collection; import java.math.bigdecimal; import java.rmi.remoteexception; import javax.ejb.*; public interface SavingsAccountHome extends EJBHome { public SavingsAccount create(string id, String firstname, String lastname, BigDecimal balance)throws RemoteException, CreateException; Enterprise JavaBeans példa EJBpelda / 59

A home interface (folyt.) public SavingsAccount findbyprimarykey (String id) throws FinderException, RemoteException; public Collection findbylastname(string lastname)throws FinderException, RemoteException; public Collection findinrange(bigdecimal low, BigDecimal high) throws FinderException, RemoteException; Enterprise JavaBeans példa EJBpelda / 60

A home interface (folyt.) public void chargeforlowbalance (BigDecimal minimumbalance, BigDecimal charge)throws InsufficientBalanceException, RemoteException; } Enterprise JavaBeans példa EJBpelda / 61

Remote interface A kliens által hívható üzleti metódusokat definiálja Minden definícióhoz tartozik egy implementáció a bean osztályban, azonos paraméterszignatúrával Az argumentumoknak és a visszatérési értéknek érvényes RMI típusoknak kell lenniük. A metódusoknak dobniuk kell a java.rmi.remoteexception kivételt. A local remote interface-re a fenti két megkötés nem érvényes Enterprise JavaBeans példa EJBpelda / 62

Remote interface (folyt.) import javax.ejb.ejbobject; import java.rmi.remoteexception; import java.math.bigdecimal; public interface SavingsAccount extends EJBObject { public void debit(bigdecimal amount) throws InsufficientBalanceException, RemoteException; Enterprise JavaBeans példa EJBpelda / 63

Remote interface (folyt.) public void credit(bigdecimal amount) throws RemoteException; public String getfirstname()throws RemoteException; public String getlastname()throws RemoteException; public BigDecimal getbalance()throws } RemoteException; Enterprise JavaBeans példa EJBpelda / 64

Két kategória: Kivételkezelés rendszer (system) kivételek hiba a szolgáltatásokban (pl. adatbázis vagy a kívánt objektum nem található) a konténer megszüntetheti a bean-t. a kliens nem tudja lekezelni ha tranzakció közben keltkezik, a konténer visszavonja a tranzakciót Enterprise JavaBeans példa EJBpelda / 65

Kivételkezelés (folyt.) alkalmazás (application) kivételek. hiba az üzleti logika végrehajtása közben lehet programozó által definiált vagy előre deiniált a kliens megkapja a kivételt, és annak feladata lekezelni ha a kivétel tranzakció közben keletkezik, a konténer nem vonja vissza azt Enterprise JavaBeans példa EJBpelda / 66

Kivételkezelés (folyt.) Előredefiniált system kivételek: Módszer ejbcreate ejbfindprimarykey (és minden finder metódus, ami egy objektumot ad vissza) ejbremove Kivétel CreateException ObjectNotFoundException (a FinderException leszármazottja) RemoveException Ok Érvénytelen input paraméter Az adatbázisban nem található a szükséges sor Az adatbázisból nem törölhető a szükséges sor Enterprise JavaBeans példa EJBpelda / 67

Kivételkezelés (folyt.) Előredefiniált application kivételek: Módszer ejbload Kivétel NoSuchEntityException Ok A betöltendő adatbázis sor nem taláható ejbstore NoSuchEntityException A módosítandó adatbázis sor nem taláható Bármelyik módszer EJBException Rendszerhiba történt Enterprise JavaBeans példa EJBpelda / 68

CMP entitás bean Adatbázisban tárolt adatok reprezentálása. A bean állapotának és az adatbázis tartalmának a szinkronizálása a konténer feladata. A konténer kezeli a bean-ek közötti kapcsolatokat is. A szükséges beállításokat a deployment descriptorban kell leírni. Nem kell adatbázis kezelést kódolni, ami egyben hordozhatóbbá is teszi a bean-t. Enterprise JavaBeans példa EJBpelda / 69

CMP entitás bean példa A példa egy sportszövetség csapatnévsorainak kezelését végző alkalmazás (RosterApp). A kliens a RosterEJB session bean-t éri el. A RosterEJB session bean három entity bean-t kezel: PlayerEJB, TeamEJB, LeagueEJB. Ezeket a lokális interface-ükön keresztül éri el. Egy Player több Team tagja is lehet, de minden Team csak egy League-hez tartozhat. Ennek megfelelően az alkalmazás architektúrája: Enterprise JavaBeans példa EJBpelda / 70

CMP entitás bean példa (folyt.) Enterprise JavaBeans példa EJBpelda / 71

Egy sportolót reprezentál A PlayerEJB kódja A következő részekből áll: Entity bean osztály (PlayerBean) Lokális home interface (LocalPlayerHome) Lokális interface (LocalPlayer) Enterprise JavaBeans példa EJBpelda / 72

A PlayerBean osztály Az osztálynak public-nak és abstract-nak kell lennie. Implementálnia kell az alábbiakat: Az EntityBean interface-t Egy vagy több ejbcreate és ejbpostcreate metódust Minden perzisztens (adatbázisra leképzendő) és kapcsolati (relationship, kapcsolókulcsot képező) mezőre implementálni kell egy-egy get és set metódust. Ezek abstract metódusok. Enterprise JavaBeans példa EJBpelda / 73

A PlayerBean osztály (folyt.) Implementálnia kell (folytatás): Tetszőleges számú select metódust (abstract metódusként) A home metódusokat Az üzleti metódusokat Tilos implementálni A finder metódusokat A finalize metódust Enterprise JavaBeans példa EJBpelda / 74

Kódolási különbségek Osztálydefiníció Adatbázis elérés Perzisztens állapot Elérési metódusok a perzisztens és kapcsoló mezőkhoz CMP abstract Generált Virtuális perzisztens mezők reprezentálják Szükséges BMP Nem abstract Fejlesztő által kódolt Adattagok reprezentálják Nem szükséges Enterprise JavaBeans példa EJBpelda / 75

Kódolási különbségek (folyt.) findbyprimaykey metódus Speciális finder metódusok Select metódusok Az ejbcreate metódus visszatérési értéke CMP A konténer kezeli A konténer kezeli, de a fejlesztőnek kell definiálni EJB QL lekérdezésekkel A konténer kezeli Nincs BMP A fejlesztő írja meg A fejlesztőnek kell megírnia Nincs Primary key-nek kell lennie Enterprise JavaBeans példa EJBpelda / 76

Kódolási különbségek (folyt.) Azonos szabályok szerin kell kódolni az üzleti metódusokat a home metódusokat. Enterprise JavaBeans példa EJBpelda / 77

A perzisztens mezők A konténer automtikusan gondoskodik a perzisztens mezők adatbázisba mentéséről illetve visszatöltéséről A példa mezői: playerid (elsődleges kulcs) name position salary A PlayerBean osztály által definiált elérési metódusok: Enterprise JavaBeans példa EJBpelda / 78

A perzisztens mezők (folyt.) public abstract String getplayerid(); public abstract void setplayerid(string id); public abstract String getname(); public abstract void setname(string name); public abstract String getposition(); public abstract void setposition(string position); public abstract double getsalary(); public abstract void setsalary(double salary); Enterprise JavaBeans példa EJBpelda / 79

A perzisztens mezők (folyt.) A névképzés szabályai: A get vagy set szóval kezdődik. A mgefelelő perzisztens mező nagy kezdőbetűvel írt nevével folytatódik. Enterprise JavaBeans példa EJBpelda / 80

A kapcsoló mezők Egy PlayerEJB példány több TeamEJB példányhoz kapcsolódhat. A deployment descriptor egy kapcsolómezőt (team) definiál. A kapcsolómező elérési függvényei: public abstract Collection getteams(); public abstract void setteams(collection teams); Enterprise JavaBeans példa EJBpelda / 81

A select metódusok Hasonlóak a finder metódusokhoz az alábbiakban: Az adatbázist kérdezik le és objektumokat adnak vissz A deployment descriptor a select metódushoz egy EJB QL lekérdezést specifikál Az entity bean osztálynak nem kell implementálnia a metódusokat Enterprise JavaBeans példa EJBpelda / 82

A select metódusok (folyt.) Különböznek a finder metódusoktól az alábbiakban: Visszaadhat perzistens mezőt vagy mezőket, vagy a kapcsolódó bean-ek home interface-ét. (A finder metódus csak home interface-t adhat vissza.) Nem szerepel sem remote, sem a local interfaceben, így nem hiívhatja a kliens. (Általában az üzleti metódusok hívják.) A select meódusok a bean osztályban definiáltak. Finder metódust ez az osztály nem definiálhat. Enterprise JavaBeans példa EJBpelda / 83

A select metódusok (folyt.) A PlayerBean osztályban definiált select metódusok: public abstract Collection ejbselectleagues (LocalPlayer player throws FinderException; public abstract Collection ejbselectsports (LocalPlayer player throws FinderException; Enterprise JavaBeans példa EJBpelda / 84

A select metódusok (folyt.) Mivel ezeket a metódusokat csak az üzleti logika metódusai érhetik el, a kliens által is szükséges funkciókat a PlayerBean osztály becsomagolhatja, például: public Collection getleagues() throws FinderException { LocalPlayer player = (team.localplayer)context.getejblocalobject (); return ejbselectleagues(player); } Enterprise JavaBeans példa EJBpelda / 85

Életciklus metódusok A perzisztenciát a konténer kezeli, így csak az ejbcreate metódusra van szüksége a PlayerBean osztályban. A példában: public String ejbcreate (String id, String name, String position, double salary) throws CreateException { setplayerid(id); setname(name); setposition(position); setsalary(salary); return null; } Enterprise JavaBeans példa EJBpelda / 86

A local home interface Definiálja a create, finder és home metódusokat a lokális kliensek számára A create metódus szabályai: paraméterek és kivételek mint az ejbcreate esetén visszatérési érték típusa a bean local interface-e dobnia kell a javax.ejb.createexception kivételt Enterprise JavaBeans példa EJBpelda / 87

A local home interface (folyt.) A finder metódusok szabályai: a név a find-al kezdődik a visszatérési érték típusa a bean local interface-e vagy azok kollekciója dobnia kell a javax.ejb.finderexception kivételt a findbyprimarykey metódus definiálása kötelező A példa local home interface-e: Enterprise JavaBeans példa EJBpelda / 88

A local home interface (folyt.) package team; import java.util.*; import javax.ejb.*; public interface LocalPlayerHome extends EJBLocalHome { public LocalPlayer create (String id, String name, String position, double salary)throws CreateException; Enterprise JavaBeans példa EJBpelda / 89

A local home interface (folyt.) public LocalPlayer findbyprimarykey (String id) throws FinderException; public Collection findbyposition (String position) throws FinderException;... public Collection findbyleague (LocalLeague league) throws FinderException;... } Enterprise JavaBeans példa EJBpelda / 90

A local interface Azokat az üzleti és elérési metódusokat definiálja, amelyeket a lokális kliensek használhatnak. A példában: két üzleti metódus: getleagues és getsports get metódusok a kliensek számára a set metódusok rejtettek a kliensek elől, mert nem szerepelnek az interface-ben. A példa LocalPlayer interface-e: Enterprise JavaBeans példa EJBpelda / 91

package team; A local interface (folyt.) import java.util.*; import javax.ejb.*; public interface LocalPlayer extends EJBLocalObject { public String getplayerid(); public String getname(); public String getposition(); public double getsalary(); public Collection getteams(); Enterprise JavaBeans példa EJBpelda / 92

A local interface (folyt.) } public Collection getleagues() throws FinderException; public Collection getsports() throws FinderException; Enterprise JavaBeans példa EJBpelda / 93

The J2EE Tutorial Irodalom Enterprise JavaBeans Technology Fundamentals Short Course Braun Tamás: Internet banki alkalmazás fejlesztése J2EE technológiával és az IBM Websphere alkalmazás szerverrel Diplomaterv, Általános Informatikai Tanszék, Miskolc, 2002. Enterprise JavaBeans példa EJBpelda / 94