Fejlett Programoz - PowerPoint PPT Presentation

1 / 53
About This Presentation
Title:

Fejlett Programoz

Description:

Fejlett Programoz si Technik k 2. 15/12 – PowerPoint PPT presentation

Number of Views:74
Avg rating:3.0/5.0
Slides: 54
Provided by: Vand1160
Category:

less

Transcript and Presenter's Notes

Title: Fejlett Programoz


1
Fejlett Programozási Technikák 2.
  • 15/12

2
Az elozo eloadás tartalma
  • J2EE
  • JNDI
  • RMI
  • Corba

3
Forrás
  • Ed Roman Mastering Enterprise Java Beans
  • http//www.theserverside.com/
  • http//www.theserverside.com/books/wiley/mastering
    EJB/downloads/MasteringEJB1.zip (2.0 elotti
    verzióról szól !!)

4
A mai eloadás tartalma
  • Java Enterprise Edition
  • EJB specifikáció (2.0)
  • EJB komponensek
  • Remote, Home, Local, Local Home interfész
  • Session Bean
  • Stateless
  • Statefull
  • Entity Bean
  • BMP
  • CMP
  • Message Driven Bean
  • Durable
  • Non Durable

5
Példa
Kliens
Kliens
Kliens
Kliens
Szerver
Szerver
Szerver
Szerver
Szerver
Címtár
Adatbázis
Adatbázis
6
Megoldandó problémák
  • Távoli eljárás hívás
  • Terhelés elosztás
  • Transzparens hiba turés
  • Együttmuködés háttér rendszerekkel
  • Tranzakció kezelés
  • Klaszterezés
  • Dinamikus telepítés
  • Tiszta leállítás
  • Naplózás auditálás
  • Rendszer menedzsment
  • Szálkezelés
  • MOM
  • Objektum életciklus
  • Eroforrás gyujtemény
  • Biztonság
  • Gyorstár

7
Megoldás
  • Minden cég megírja a saját szoftverét
  • Komplex problémák
  • Egyedi tudás
  • Drága
  • Elore megírt komponenseket használ (MiddleWare)
  • Tesztelt, kevesebb hibával rendelkezo
  • Olcsóbb (TCO)
  • A saját problémájával foglalkozhat

8
Komponens architektúrák
  • Explicit MiddleWare
  • Komplex API gyujtemény melyet nekünk kell
    hívogatnunk
  • Implicit MiddleWare
  • Csak az üzleti logikával kell foglalkoznunk
  • Konfiguráció fájl -gt Kérés elfogó (Request
    Interceptor)
  • Megoldások
  • CORBA Component Model
  • .NET
  • J2EE - EJB

9
Enterprise Java Beans
  • EJB
  • Szerver oldali komponens
  • Java interfészek halmaza
  • Specifikáció mely leírja a komponensek és az
    alkalmazásszerverek együttmuködését
  • Érvek EJB mellett
  • Sokan támogatják
  • Nyílt szabvány, elvileg gyártó független
  • Gyors alkalmazás fejlesztés
  • Platform független

10
EJB rendszer
  • Bean fejleszto
  • Telepítheto adott funkciót ellátó komponenesket
    gyárt
  • Alkalmazás szintetizáló
  • O látja át az adott problémát és tervezi meg
    hozzá az alkalkalmazást
  • EJB telepíto
  • Biztonsági, integrációs kérdések (LDAP, tuzfal,
    )
  • Rendszer Adminisztrátor
  • Rendszer menedzsment, monitorozás,
  • Alkalmazás szerver gyártó
  • Fejleszto eszköz gyártók

11
EJB típusok (2.1)
  • Viszony Bab (Session Bean)
  • Az üzleti folyamat modellezésére szolgál
  • Munkafolyamat, árazás, hitel kártya engedélyezo,
  • Entitás Bab (Entity Bean)
  • Az üzleti adatot modellezik
  • Termék, egyed, rendelés,
  • Üzenet vezérelt Bab (Message Driven Bean)
  • Hasonló mint a viszony bab, csak üzenetekkel
    lehet kommunikálni vele

12
Mitol EJB az EJB?
  • javax.ejb.EnterpriseBean interfész
  • Üres interfész, csak a neve a fontos
  • A java.io.Serializable interfészt bovíti
  • Az alábbi interfészek származnak belole
  • javax.ejb.EntityBean
  • javax.ejb.SessionBean
  • javax.ejb.MessageDrivenBean

13
Az EJB objektum
  • Nem kapcsolódunk közvetlenül az EJB-hez
  • Az EJB tároló elfogja a hívást és delegálja a Bab
    példánynak (Instance Pooling)
  • EJB objektum ragasztóként funkcionál, Ragasztó
    Eszköztár
  • A tárló generálja (tárolónként más-más lehet)
  • Implicit MiddleWare
  • Kivételek (transzparent fail-over)
  • Alkalmazás szintu
  • Rendszer szintu

14
Remote Interface
  • Ezzel tudatjuk az EJB objektummal, hogy mely
    metódusokat szeretnénk távolról elérni (RMI-IIOP,
    RemoteExeption)
  • Ose
  • javax.ejb.EJBObject extends java.rmi.Remote
  • EJBHome getEJBHome()
  • Handle getHandle()
  • java.lang.Object getPrimaryKey()
  • boolean isIdentical(EJBObject obj)
  • void remove()

15
Home Objektum
  • A kliens tole kéri az EJB példányt (Helyszín
    Transzparens)
  • Feladata
  • EJB objektumok létrehozása
  • Meglévo EJB objektumok megtalálása
  • EJB objektumok eltávolítása
  • Tároló specifikus
  • Automatikusan generált

16
Home Interfész
  • Tudja hogyan kell az EJB objektumot inicializálni
  • javax.ejb.EJBHome
  • getEJBMetaData
  • getHomeHandle
  • remove

17
Local Interfész
  • A Home interfész használata lassú
  • Kliens a helyi csonkhoz fordul
  • A helyi csonk átalakítja a paramétereket
    hálózaton hasznáhatóvá
  • A váz Visszaalakítja oket
  • A váz meghívja az EJB objektumot
  • Az EJB végrehajtja a szükséges MiddleWare
    muveleteke
  • Az EJB objektum meghívja Bab példányt és így
    vissza
  • Helyette
  • A kliens meghívja a lokális objektumot
  • A lokális objektum elvégzi a megfelelo MiddleWare
    muveleteket
  • A Lokális objektum meghívja a Bab példányt
  • javax.ejb.EJBLocalObject
  • EJBLocalHome getEJBLocalHome()
  • java.lang.Object getPrimaryKey()
  • boolean isIdentical(EJBLocalObject obj)
  • void remove()
  • Problémák
  • Nincs távoli objektum hozzáférés (csak azonos
    processzen belül)
  • A paraméterek referencia szerint adódnak át
    (késobb problémás lehet átalakítani)

18
Telepítés leírók
  • Forrás kódok nélkül is hangolható a rendszer
  • XML fájlok
  • Ezekben specifikálhatjuk azokat a
    szolgáltatásokat melyekre szükségünk van a Tároló
    részérol
  • Bab menedzsment
  • Tranzakció
  • Biztonság

19
Ejb-jar fájlok
  • Ezekben a fájlokban fogjuk össze komponensünket
  • Elemei
  • EJB class fájlok
  • Home interfész
  • Local interfész
  • Remote interfész
  • Local Home interfész
  • Telepítés leíró
  • Gyártó specifikus konfig. fájlok

20
Egy minta viszony EJB
  • Session Bean
  • Remote Interface
  • Home Interface
  • Local Interface
  • LocalHome Interface

21
Viszony Bab
  • import javax.ejb.SessionContext
  • public class HelloBean implements
    javax.ejb.SessionBean
  • public void ejbCreate()
  • System.out.println("ejbCreate()")
  • public void ejbRemove()
  • System.out.println("ejbRemove()")
  • public void ejbActivate()
  • System.out.println("ejbActivate()")
  • public void ejbPassivate()
  • System.out.println("ejbPassivate()")
  • public void setSessionContext(SessionContext
    ctx)
  • System.out.println("setSessionContext
    ()")
  • public String hello()
  • System.out.println("hello()")
  • return "Hello, World!"

22
Távoli Interfész, Lokális Interfész
  • public interface Hello extends javax.ejb.EJBObject
  • public String hello() throws java.rmi.RemoteExcep
    tion
  • public interface HelloLocal extends
    javax.ejb.EJBLocalObject
  • public String hello()

23
Home, LocalHome interfész
  • public interface HelloHome extends
    javax.ejb.EJBHome
  • Hello create() throws java.rmi.RemoteException,
    javax.ejb.CreateException
  • public interface HelloLocalHome extends
    javax.ejb.EJBLocalHome
  • HelloLocal create() throws javax.ejb.CreateExcept
    ion

24
Telepítés leíró
  • !DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems,
    Inc.//DTD Enterprise JavaBeans 2.0//EN"
    "http//java.sun.com/dtd/ejb-jar_2_0.dtd"gt
  • ltejb-jargt
  • ltenterprise-beansgt
  • ltsessiongt
  • ltejb-namegtHellolt/ejb-namegt
  • lthomegtHelloHomelt/homegt
  • ltremotegtHellolt/remotegt
  • ltlocal-homegtHelloLocalHomelt/local-homegt
  • ltlocalgtHelloLocallt/localgt
  • ltejb-classgtHelloBeanlt/ejb-classgt
  • ltsession-typegtStatelesslt/session-typegt
  • lttransaction-typegtContainerlt/transaction-typegt
  • lt/sessiongt
  • lt/enterprise-beansgt
  • lt/ejb-jargt

25
Kliens
  • public class HelloClient
  • public static void main(String args) throws
    Exception
  • Properties props System.getProperties()
  • Context ctx new
    InitialContext(props)
  • Object obj ctx.lookup("HelloHome
    ")
  • HelloHome home (HelloHome)
  • javax.rmi.PortableRemoteObject.narrow(obj,
    HelloHome.class)
  • Hello hello home.create()
  • System.out.println(hello.hello())
  • hello.remove()

26
Teljes muködés
27
Viszony bab (Session Bean)
  • Üzleti folyamatot valósít meg
  • Nem mentodnek el a tartós tároló helyre
  • Rövid életuek (a kliens kód hívása alatt élnek)
  • Általában nem élik túl a szerver leállásokat
  • Két típusa van
  • Állapot mentes (Stateless)
  • Egy metódus hívásig él
  • Nem orzi meg állapotát
  • Minden egyede egyenlo, újrahasznosítható,
    készletezheto
  • Állapottal rendelkezo (Statefull)
  • Több egymást követo kérést tranzakciót képes
    kiszolgálni
  • Megorzi az állapotát (a viszony idejére)
  • Készletezés passivation, activation (eroforrások
    menedzselése)

28
Egyed bab (Entity bean)
  • Egy állandó adat memóriabeli Java reprezentációja
  • Tudja, hogyan kell elmentenie és kiolvasnia magát
  • A memóriabeli példányát módosítva módosul a
    tartós adat is (ejbLoad(), ejbStore() a
    szinkronizáció a tároló feladata)
  • Lehetséges megoldások
  • Serialization
  • Objet-Relational Mapping
  • Objektum adatbázisok
  • Csak egy szál férhet hozzá egy idoben -gt több EJB
    ugyanaz az adat -gt tranzakciók
  • Gyujteményezheto (Pooling)
  • ejbActivate(), ejbPassivate()
  • ejbStore(), ejbLoad()
  • Adatbázis kód
  • Bean Managed Persistence Entity Bean BMP
  • Container Managed Persistence Entity Bean - CMP

29
Egyed bab
  • Létrehozása, törlése (adatbázissal együtt!)
  • ejbCreate()
  • ejbRemove()
  • Elsodleges kulcsot megvalósító osztály
  • Az egyed babok kereshetoek
  • Finder metódusok (home interfész)
  • Az adatbázis módosításával módosul az egyed bab
    is (új is létrejön)!

30
Egyed bab környezet
  • Javax.ejb.EntityContext extends EJBContext
  • getEJBLocalObject(), getEJBObject() (this)
  • getPrimaryKey() connection pooling
  • ejbLoad
  • ejbRemove

31
BMP
  • Nekünk kell kézzel kódolnunk az adatbázis
    hozzárendelést
  • javax.ejb.EntityBean
  • setEntityContext
  • ejbFindlt..gt csak itt kell implementálni pl.
    select id from x where w gt 0,
  • PrimaryKey ejbFindTheBiggest,
  • kötelezo ejbFindByPrimaryKey
  • ezeket meg kell adni a Local, vagy home
    interfészben
  • EJBObject findltgt
  • ejbHomelt..gt globális muveletek (sorok
    megszámolása)
  • ejbCreate INSERT INTO
  • ejbActivate socket, . Nyitás
  • ejbLoad getPrimaryKey, Select
  • ejbStore UPDATE
  • ejbPassivate socket, zárás
  • ejbRemove getPrimaryKey, delete

32
Példa
  • Remote interface
  • Home interface
  • PK
  • Bean
  • Deployment Descriptor

33
Távoli interfész
  • public interface Account extends EJBObject
  • public void deposit(double amt) throws
    AccountException, RemoteException
  • public void withdraw(double amt) throws
    AccountException, RemoteException
  • public double getBalance() throws
    RemoteException
  • public String getOwnerName() throws
    RemoteException
  • public void setOwnerName(String name) throws
    RemoteException
  • public String getAccountID() throws
    RemoteException
  • public void setAccountID(String id) throws
    RemoteException

34
Helyi interfész
  • public interface AccountHome extends EJBHome
  • Account create(String accountID, String
    ownerName) throws CreateException,
    RemoteException
  • public Account findByPrimaryKey(AccountPK key)
    throws FinderException, RemoteException
  • public Collection findByOwnerName(String name)
    throws FinderException, RemoteException
  • public double getTotalBankValue() throws
    AccountException, RemoteException

35
Elsodleges Kulcs
  • public class AccountPK implements
    java.io.Serializable
  • public String accountID
  • public AccountPK(String id)
  • this.accountID id
  • public AccountPK()
  • public String toString()
  • return accountID
  • public int hashCode()
  • return accountID.hashCode()
  • public boolean equals(Object account)
  • return ((AccountPK)account).accountID.equals(ac
    countID)

36
Bean
  • public class AccountBean implements EntityBean
  • protected EntityContext ctx
  • private String accountID // PK
  • private String ownerName
  • private double balance
  • public double getBalance()
  • System.out.println("getBalance() called.")
  • return balance
  • public void setOwnerName(String name)
  • System.out.println("setOwnerName() called.")
  • ownerName name

37
Bean ejbFind
  • public Collection ejbFindByOwnerName(String name)
    throws FinderException
  • PreparedStatement pstmt null Connection conn
    null Vector v new Vector()
  • try
  • System.out.println("ejbFindByOwnerName("
    name ") called")
  • conn getConnection()
  • pstmt conn.prepareStatement("select id from
    accounts where ownerName ?")
  • pstmt.setString(1, name)
  • ResultSet rs pstmt.executeQuery()
  • while (rs.next())
  • String id rs.getString("id")
    v.addElement(new AccountPK(id))
  • return v
  • catch (Exception e) throw new
    FinderException(e.toString())
  • finally
  • try if (pstmt ! null) pstmt.close()
    catch (Exception e)
  • try if (conn ! null) conn.close() catch
    (Exception e)

38
Bean Remove
  • public void ejbRemove() throws RemoveException
  • AccountPK pk (AccountPK) ctx.getPrimaryKey()
    String id pk.accountID PreparedStatement
    pstmt null
  • Connection conn null
  • try
  • conn getConnection()
  • pstmt conn.prepareStatement("delete from
    accounts where id ?")
  • pstmt.setString(1, id)
  • if (pstmt.executeUpdate() 0)
  • throw new RemoveException("Account " pk "
    failed to be removed from the database")
  • catch (Exception ex) throw new
    EJBException(ex.toString())
  • finally
  • try if (pstmt ! null) pstmt.close()
    catch (Exception e)
  • try if (conn ! null) conn.close() catch
    (Exception e)

39
Telepítés leíró/1
  • ltejb-jargt
  • ltenterprise-beansgt
  • ltentitygt
  • ltejb-namegtAccountlt/ejb-namegt
  • lthomegtexamples.AccountHomelt/homegt
  • ltremotegtexamples.Accountlt/remotegt
  • ltlocal-homegtexamples.AccountLocalHomelt/local-ho
    megt
  • ltlocalgtexamples.AccountLocallt/localgt
  • ltejb-classgtexamples.AccountBeanlt/ejb-classgt
  • ltpersistence-typegtBeanlt/persistence-typegt
  • ltprim-key-classgtexamples.AccountPKlt/prim-key-cl
    assgt
  • ltreentrantgtFalselt/reentrantgt
  • ltresource-refgt
  • ltres-ref-namegtjdbc/ejbPoollt/res-ref-namegt
  • ltres-typegtjavax.sql.DataSourcelt/res-typegt
  • ltres-authgtContainerlt/res-authgt
  • lt/resource-refgt
  • lt/entitygt
  • lt/enterprise-beansgt

40
Telepítés leíró /2
  • ltassembly-descriptorgt
  • ltcontainer-transactiongt
  • ltmethodgt
  • ltejb-namegtAccountlt/ejb-namegt
  • ltmethod-intfgtLocallt/method-intfgt
  • ltmethod-namegtlt/method-namegt
  • lt/methodgt
  • ltmethodgt
  • ltejb-namegtAccountlt/ejb-namegt
  • ltmethod-intfgtRemotelt/method-intfgt
  • ltmethod-namegtlt/method-namegt
  • lt/methodgt
  • lttrans-attributegtRequiredlt/trans-attributegt
  • lt/container-transactiongt
  • lt/assembly-descriptorgt
  • lt/ejb-jargt

41
CMP
  • A bab fejleszto nem tudja milyen adtabázist
    fognak használni
  • A forráskódot nem szeretné kiadni
  • Szeparált adatbázis kezelés/ üzleti logika
  • A tároló fogja legenerálni a szükséges kódot a mi
    osztályunkból származtatva
  • A mezok az alosztályban vannak definiálva (ez
    tároló függo)
  • A get/set metódusok az alosztályban vannak
    definiálva
  • Az ososztályt mint absztrakt osztályt kell
    definiálni!
  • A megfelelo absztrakt get/set metódusokkal
  • A telepítés leíróból veszi a szükséges
    információkat (Abstract Persistence Schema)
  • Saját lekérdezo nyelv EJB-QL (SELECT OBJECT(a)
    FROM Accoun As a)

42
CMP metódusok
  • ejbSelectlt..gt ezzel is kitehetjük az SQL-t a
    leíróba (ejbSelectAllAccountBalances)
  • Csak a babon belül hívható
  • Absztrakt metódus
  • ejbHomelt..gt ezen belül használjuk az ejbSelect-et

43
Példa
  • Bab
  • Telepíto

44
Bab
  • public abstract class ProductBean implements
    EntityBean
  • protected EntityContext ctx
  • public ProductBean()
  • public abstract String getName()
  • public abstract void setName(String name)
  • public abstract String getDescription()
  • public String ejbCreate(String productID, String
    name, String description, double basePrice)
  • System.out.println("ejbCreate() called")
  • setProductID(productID)
  • setName(name)
  • setDescription(description)
  • setBasePrice(basePrice)
  • return productID

45
Telepítés leíró
  • ltejb-namegtProductlt/ejb-namegt
  • lthomegtexamples.ProductHomelt/homegt
  • ltremotegtexamples.Productlt/remotegt
  • ltejb-classgtexamples.ProductBeanlt/ejb-classgt
  • ltpersistence-typegtContainerlt/persistence-typegt
  • ltprim-key-classgtjava.lang.Stringlt/prim-key-clas
    sgt
  • ltreentrantgtFalselt/reentrantgt
  • ltcmp-versiongt2.xlt/cmp-versiongt
  • ltabstract-schema-namegtProductBeanlt/abstract-sch
    ema-namegt
  • ltcmp-fieldgt
  • ltfield-namegtnamelt/field-namegt
  • lt/cmp-fieldgt
  • ltprimkey-fieldgtproductIDlt/primkey-fieldgt
  • ltquerygt
  • ltquery-methodgt
  • ltmethod-namegtfindByNamelt/method-namegt
  • ltmethod-paramsgt
  • ltmethod-paramgtjava.lang.Stringlt/method-param
    gt
  • lt/method-paramsgt

46
BMP, CMP életciklus
47
Üzenet vezérelt bab (Message driven bean)
  • Az elozo komponensek RMI-IIOP-ot használtak
    kommunikációra
  • Hátrányai
  • A kliensnek várnia kell a válaszra (nem
    engedélyezetett a szál kezelés !!)
  • Nem megbízható
  • Egyszerre csak egy egyeddel kommunikál
  • Message Oriented MiddleWare
  • MSMQ, IBM MQSeries, cég függo
  • JMS szabványos igyekszik lenni (API/SPI)

48
JMS API
  • Messaging Domains
  • Publish/subscribe
  • Point-to-Point

49
Üzenet vezérelt bab
  • Teljesen el van különítve a többi komponenstol
  • Nincs home, remote, local, localhome interfész
  • Egy üzleti metódusuk van
  • onMessage() menet közben deríti ki mit is kapott
    (instanceof)
  • Nincs visszatérési értékük
  • Nem tudnak kivételt küldeni a küldonek
  • Állapotmentesek
  • Tartós vagy nem tartós listatagok
  • Tartós minden üzenetet megkap akkor is ha nem
    aktív
  • Nem tartós csak azokat kapja meg amikor aktív
    volt
  • javax.jms.MessageListener
  • onMessage()
  • javax.ejb.MessageDrivenBean
  • ejbRemove
  • setMessageDrivenContext

50
Példa Bean
  • public class LogBean implements
    MessageDrivenBean, MessageListener
  • protected MessageDrivenContext ctx
  • public void setMessageDrivenContext(MessageDriven
    Context ctx)
  • this.ctx ctx
  • public void ejbCreate() System.err.println("ej
    bCreate()")
  • public void onMessage(Message msg)
  • TextMessage tm (TextMessage) msg
  • try String text tm.getText()
    System.err.println("Received new message "
    text)
  • catch(JMSException e) e.printStackTrace()
  • public void ejbRemove()
  • System.err.println("ejbRemove()")

51
Telepítés leíró
  • ltejb-jargt
  • ltenterprise-beansgt
  • ltmessage-drivengt
  • ltejb-namegtLoglt/ejb-namegt
  • ltejb-classgtexamples.LogBeanlt/ejb-classgt
  • lttransaction-typegtContainerlt/transaction-type
    gt
  • ltmessage-driven-destinationgt
  • ltdestination-typegtjavax.jms.Topiclt/destination
    -typegt
  • lt/message-driven-destinationgt
  • lt/message-drivengt
  • lt/enterprise-beansgt
  • lt/ejb-jargt

52
Összefoglaló
  • Remote, Home, Local, Local Home interfész
  • Session Bean
  • Stateless
  • Statefull
  • Entity Bean
  • BMP
  • CMP
  • Message Driven Bean
  • Durable
  • Non Durable

53
A következo eloadás tartalma
  • .NET architektúra
  • IL
  • C
Write a Comment
User Comments (0)
About PowerShow.com