Programrendszerek Fejleszt

About This Presentation
Title:

Programrendszerek Fejleszt

Description:

Programrendszerek Fejleszt se 7/4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Telep t s le r /2 – PowerPoint PPT presentation

Number of Views:2
Avg rating:3.0/5.0
Slides: 90
Provided by: Van9158

less

Transcript and Presenter's Notes

Title: Programrendszerek Fejleszt


1
Programrendszerek Fejlesztése
  • 7/4

2
A mai eloadás tartalma
  • Alkalmazás keretrendszerek
  • JEE
  • Eroforráskezelés
  • JNDI
  • Tranzakciókezelés
  • Tároló által menedzselt tranzakciók
  • Bab által menedzselt tranzakciók
  • EJB
  • RMI
  • JPA
  • EJB

3
Vállalati szoftver
  • 10 ügyvéd 11 féle válasz
  • Több mint egy weboldal
  • 2 vagy több rétegu architektúra
  • Komponens alapú elosztott rendszerek
  • Együttmuködés más rendszerekkel
  • Karbantartható kód/alkalmazás

4
Példa
Kliens
Kliens
Kliens
Kliens
Szerver
Szerver
Szerver
Szerver
Szerver
Címtár
Adatbázis
Adatbázis
5
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

6
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

7
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

8
Alkalmazás rétegelés
  • Az alkalmazás kompnensek feladatának elválasztása
  • Megjelenítés réteg
  • A kérés/válasz objektuomkra koncentrál
  • Megoldja a modell alapján a GUI renderelést
  • Formázási és nem üzleti logika alapú validálási
    logikát tartalmaz
  • A más rétegek által dobott kivételeket kezeli
  • Perzisztencia réteg
  • A tárolókkal kommunikál
  • Lekérdezés nyelvet biztosít
  • ORM képesség
  • JDBC, Hibernate, iBATIS, JDO, Entity Beans,
  • Domén réteg
  • Az üzleti objektumokat tárolja, ezek a többi
    rétegben is felhasználhatóak
  • Kezeli az üzleti objektumok közötti komplex
    relációat
  • Gazdag üzleti logika
  • ORM
  • A domén objektumok csak egymástól függhetnek

9
Szolgáltatás réteg?
  • Hogyan pozicionáljuk a lazán csatolt üzleti
    logikát?
  • Mi a szolgáltatás logika?
  • Hogyan kell a konténer szintu szolgáltatásokat
    megvalósítani?
  • Hogyan kezeljük a POJO alapú alkalmazásokban a
    tranzakciókat?
  • Hogyan kommunikáljunk a megjelenítési rétegbol a
    perzisztencia rétegbe?
  • Hogyan kapunk üzleti logikát megvalósító
    szolgáltatásokat?
  • Hogyan kommunikálnak az üzleti objektumok a
    perzisztencia téteggel?
  • Hogyan adjuk át a prezisztencia rétegben
    található objektumokat a UI rétegnek?

10
Alkalmazás rétegek
  • Szolgáltatás réteg
  • Egy átjáró amely segítségével az üzleti logikát
    biztosítjuk a külvilág számára
  • Kezeli a tároló szintu szolgáltatásokat
    (tranzakciók, biztonság, )
  • Sok alkalmazásban nincs megfeleloen definiálva

11
Alkalmazás keretrendszerek
  • JEE
  • Spring
  • OSGI
  • SCA/SDO

12
Java 2 Enterprise Edition
  • J2EE tartalmazza a J2SE-t
  • API, szabvány, tervezési minta gyujtemény
  • Elemei (rétegek szerint)
  • Prezentáció
  • Adat tárolás kinyerés
  • Kommunikáció

13
API gyujtemény
  • JSP
  • Servlet
  • JavaMail
  • JSF
  • RMI
  • CORBA
  • JMS
  • JDBC
  • JNDI
  • EJB
  • JAX
  • SAX
  • DOM
  • JTA
  • JAAS

14
Megvalósítások
  • Tomcat
  • JBoss
  • WebSphere
  • iPlanet
  • J2EE SDK
  • http//www.javaskyline.com/serv.html

15
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

16
Eroforrás hozzáférés
  • A JEE komponensek sok fajta eroforráshoz
    férhetnek hozzá (email, LDAP, fájl, )
  • A JNDI feladata a név szolgáltatás biztosítása a
    komponensek számára

17
JNDI
  • Java Naming and Directory Interface
  • A J2EE legfontosabb összetevoje (a J2SEE nek is
    része)
  • Feladata
  • Objektumok referenciáinak tárolása keresheto
    formában
  • Együttmuködés a címtár alapú rendszerekkel
    (amelyek tudják az információt hierarchikusan
    kezelni)
  • Felépítése
  • JNDI API
  • Elnevezés menedzser
  • JDNI SPI
  • Szolgáltatók (Service Provider)
  • LDAP
  • COS
  • RMI
  • DNS
  • NIS
  • Fájl Rendszer
  • Windows Reg.
  • Novell Fájl R.

18
Elnevezés, Címtár
  • Elnevezés (Naming)
  • LDAP, DNS, COS,
  • Kötés binding
  • Referenciák, Címek
  • Konteksztus (Context) (név-objektum kötés halmaz)
  • Névterek, Elnevezési rendszerek konteksztusok
    halmaza
  • Címtár (directory)
  • Az objektumok rendelkeznek tulajdonságokkal is
  • Tulajdonság azonosító
  • Címtár szolgáltatás
  • Directory Schema
  • Keresések,

19
JNDI csomagok
  • javax.naming
  • Kontesztus (Context)
  • Kezdo kontesztkus (Initial Context)
  • list, lisBindings, bind, reBind, unBind
  • Al kontesztus - subContext
  • Nevek (Name , CompositeName )
  • String, Name
  • Kötések
  • Referenciák
  • javax.naming.directory
  • Attribútumok lekérdezése
  • DirContext, getAttributes(), modifyAttributes(),
    search()
  • javax.naming.event
  • javax.naming.ldap (Teljesebb LDAP)
  • LDAP v3
  • LdapContext
  • javax.naming.spi

20
Használata (fájl rendszer)
  • import javax.naming.Context
  • import javax.naming.InitialContext
  • import javax.naming.NamingException
  • import java.util.Hashtable
  • class Lookup
  • public static void main(String args)
  • if (args.length ! 1)
  • System.err.println("usage java Lookup
    ltfilenamegt")
  • System.exit(-1)
  • String name args0
  • Hashtable env new Hashtable(11)
  • env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.
    jndi.fscontext.RefFSContextFactory")
  • try
  • Context ctx new InitialContext(env)
  • Object obj ctx.lookup(name)
  • System.out.println(name " is bound to "
    obj)
  • NamingEnumeration list ctx.list("awt")
  • while (list.hasMore()) NameClassPair nc
    (NameClassPair)list.next()
  • System.out.println(nc) ctx.close()

21
Kötés, Konteksztus
  • Kötés
  • bind, rebind, unbind, rename
  • Fruit fruit new Fruit("orange")
  • ctx.bind("favorite", fruit)
  • Fruit fruit new Fruit("lemon")
  • ctx.rebind("favorite", fruit)
  • ctx.unbind("favorite")
  • ctx.rename("report.txt", "old_report.txt")
  • Al kontesztus
  • createSubcontext, destroySubcontext
  • ctx.createSubcontext("new")
  • ctx.destroySubcontext("new")

22
Használata címtár esetén
  • import javax.naming.Context
  • import javax.naming.directory.InitialDirContext
  • import javax.naming.directory.DirContext
  • import javax.naming.directory.Attributes
  • import javax.naming.NamingException
  • import java.util.Hashtable
  • class Getattr
  • public static void main(String args)
  • Hashtable env new Hashtable(11)
  • env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.
    jndi.ldap.LdapCtxFactory")
  • env.put(Context.PROVIDER_URL, "ldap//localhost3
    89/oJNDITutorial")
  • env.put(Context.SECURITY_PRINCIPAL, "joeuser")
  • env.put(Context.SECURITY_CREDENTIALS,
    "joepassword")
  • try
  • DirContext ctx new InitialDirContext(env)
  • Attributes attrs ctx.getAttributes("cnTed
    Geisel, ouPeople")
  • System.out.println("sn "
    attrs.get("sn").get())
  • ctx.close()
  • catch (NamingException e)

23
Attribútum,
  • Attribútum hierarchia
  • Név vezetéknév
  • Attributes answer ctx.getAttributes("cnTed
    Geisel, ouPeople")
  • for (NamingEnumeration ae answer.getAll()
    ae.hasMore())
  • Attribute attr (Attribute)ae.next()
  • System.out.println("attribute "
    attr.getID())
  • / Print each value /
  • for (NamingEnumeration e attr.getAll()
    e.hasMore()
  • System.out.println("value " e.next()))
  • Módosítás
  • ModificationItem mods new ModificationItem3
  • mods0 new ModificationItem(DirContext.REPLACE_
    ATTRIBUTE, new BasicAttribute("mail",
    "geisel_at_wizards.com"))
  • mods1 new ModificationItem(DirContext.ADD_ATTR
    IBUTE,
  • new BasicAttribute("telephonenumber", "1 555
    555 5555"))
  • mods2 new ModificationItem(DirContext.REMOVE_A
    TTRIBUTE,
  • new BasicAttribute("jpegphoto"))

24
Keresés, Kötés
  • Search
  • Attributes matchAttrs new BasicAttributes(true)
    // ignore attribute name case
  • matchAttrs.put(new BasicAttribute("sn",
    "Geisel"))
  • matchAttrs.put(new BasicAttribute("mail"))
  • NamingEnumeration answer ctx.search("ouPeople",
    matchAttrs)
  • String attrIDs "sn", "telephonenumber",
    "golfhandicap", "mail"
  • NamingEnumeration answer ctx.search("ouPeople",
    matchAttrs, attrIDs)
  • Search control, Search filter
  • String attrIDs "sn", "telephonenumber",
    "golfhandicap", "mail"
  • SearchControls ctls new SearchControls()
  • ctls.setReturningAttributes(attrIDs)
  • ctls.setSearchScope(SearchControls.SUBTREE_SCOPE)
  • ctls.setCountLimit(1) ctls.setTimeLimit(1000)
  • String filter "((snGeisel)(mail))"
  • NamingEnumeration answer ctx.search("ouPeople",
    filter, ctls)
  • Binding
  • Attributes attrs new BasicAttributes(true) //
    case-ignore
  • Attribute objclass new BasicAttribute("objectcla
    ss")
  • objclass.add("top") objclass.add("organizationalU
    nit")attrs.put(objclass)

25
Eroforrás injektálás
  • A konténer automatikusan beinyektálja a
    megfeleloen annotált mezobe/tulajdonságba
  • Inicializáláskor (mezo/tulajdonság)
  • Futás idoben (osztály alapú)
  • _at_Resource
  • Név (name)
  • Típus (type)
  • Azonosítás típusa (authenticationType)
  • Megosztható (shareable)
  • Csatolás neve (mappedName)
  • Leírás (dessc)

26
Elosztott rendszerek
  • Gyakran kliens-szerver
  • Problémák
  • A távoli objektum megtalálása
  • Bájt kód betöltése
  • Kommunikáció
  • Socket használat
  • RPC használat
  • RMI
  • Corba
  • RMI IIOP
  • SOAP
  • XML RPC

27
RMI
  • Remote Method Invocation
  • Objektum orientált RPC
  • Teljes objektumokat tudunk átküldeni, nem csak
    elore definiált típusokat
  • Java specifikus
  • Elosztott szemétgyujto
  • Biztonságos
  • Egyszeru (nincs IDL)
  • URl szeru rmi//hostport/objektumnév

28
Különbségek
  • Elosztott vs. Normál Java alkalmazás
  • Távoli objektum hivatkozása használható
  • A Cast ugyanúgy muködik
  • instanceOf is
  • A távoli objektumoknál az interfésszel
    kommunikálunk nem a megvalósító osztállyal
  • A távoli eljárás hívások eredménye és paraméterei
    érték szerint adódnak át
  • A távoli objektum hivatkozásként adódik át
  • Külön hibakezelés kell

29
Felépítése
  • Java.RMI.remote interfész
  • Ezt kell bovítenünk
  • Minden metódusnál specifikálni kell a
    java.rmi.RemoteException kivételt
  • A távoli eljárás deklarálásánál a benne szerepelo
    objektumokat interfészekkel kell megadnunk
  • RemoteException
  • Kommunikációs hiba
  • Paraméter átalakítás hiba
  • Protokol hiba
  • RemoteObject
  • java.lang.Object
  • java.rmi.server.UnicastRemoteObject
  • java.rmi.activation.Activatable

30
Muködése
  • Hagyományos RPC megoldás
  • Csonkok (stubs) elrejtik a hálózati protokollokat
    és a serializációt
  • Kliens oldali reprezentáció vagy proxy
  • Ugyanazt az interfészt valósítja meg mint a
    távoli osztály
  • Egy csonk metódus hívás
  • Kapcsolatot kezdeményez a távoli JVM-mel
  • Átalakítja és átviszi a paramétereket (marshalls)
  • Megvárja az eredményt !!!!!!
  • Kiolvassa és visszaalakítja a paramétereket
    (unmarshalls)
  • Visszaadja az eredményt a hívónak
  • Vázak (skeletons) a szerver oldali ragasztó
    (Java2 ben nem kötelezo)
  • Szerver oldali reprezentáció
  • Kiolvassa a paramétereket és visszaalakítja oket
    (unmarshals)
  • Meghívja a megfelelo objektum megfelelo metódusát
  • Átalakítja és átküldi az eredményt (marshals)

31
Használata
  • Távoli interfész deklarálás
  • public interface WeatherService extends Remote
  • public List getWeatherInformation() throws
    RemoteException
  • Osztály megvalósítás
  • public class WeatherServiceImpl extends
    UnicastRemoteObject implements WeatherService
  • public WeatherServiceImpl() throws
    RemoteException
  • super()updateWeatherConditions()
  • public List getWeatherInformation()
  • public static void main( String args ) throws
    Exception
  • WeatherService service new WeatherServiceImpl(
    )
  • String serverObjectName "rmi//localhost/Weather
    Service"
  • Naming.rebind( serverObjectName, service )
  • Kliens megvalósítás
  • String remoteName "rmi//" server
    "/WeatherService"
  • WeatherService weatherService ( WeatherService )
    Naming.lookup( remoteName )
  • List weatherInformation weatherService.getWeathe
    rInformation()
  • Fordítás
  • Javac
  • Rmic -gt csonk osztályok (rmic v1.2 -gt vázat is
    gyárt)

32
Paraméter átadás
  • Serializable (mentheto) objektumok
    (java.io.Serializable)
  • Távoli objektumok (nem exportált)
  • Érték szerint adódik át (serialization)
  • Távoli objektumok (exportált)
  • Referencia szerint adódik át (csonk)
  • Referencia integritás
  • Osztály kommentár (Annotation)
  • Az osztály elérési útvonala is átküldodik
  • Paraméter átvitel
  • java.rmi.Remote megvalósító osztály
  • Exportált csonk adódik vissza
  • Nem exportált az objektum adódik vissza
  • Egyéb osztály
  • Nem exportált az objektum adódik vissza

33
Szemét gyujtés
  • Referencia számláló szemét gyujto
  • Minden JVM-en belül számon tartja az aktív
    referenciákat
  • Referenced üzenet
  • Együttmuködés a helyi szemétgyujtovel
  • Gyenge referencia
  • Normál referencia

34
Dinamikus osztály betöltés
  • Bármilyen objektum átviheto (serializable)
  • Szükség van az osztály definícióra a másik
    oldalon is
  • Unmarshalling
  • Megpróbálja a helyi gépen feloldani
  • Ha nem megy akkor megpróbálja a távoli (az
    átivteli folyamban megadott annotateClass )
    címrol betölteni
  • java.rmi.server.RMIClassLoader.getClassAnnotation

35
UnicastRemoteObject
  • Távoli objektumok létrehozása és exportálása
  • Tulajdonságok
  • A referencia csak a létrehozó processz futása
    alatt él
  • TCP protokollt használ
  • protected UnicastRemoteObject()
  • protected UnicastRemoteObject(int port)
  • protected UnicastRemoteObject(int port,

  • RMIClientSocketFactory csf,

  • RMIServerSocketFactory ssf)
  • public Object clone()
  • public static RemoteStub exportObject(java.rmi.Re
    mote obj)
  • public static Remote exportObject(java.rmi.Remote
    obj, int port)
  • public static Remote exportObject(Remote obj,
    int port,

  • RMIClientSocketFactory csf,

  • RMIServerSocketFactory ssf)
  • public static boolean unexportObject(java.rmi.Rem
    ote obj,

  • boolean force)

36
Aktiválható távoli objektum
  • Sok objektum -gt eroforrás foglalás
  • A klienseknek meg kell orizniük a referenciát
    (szemét gyujto)
  • Szerver leállás esetén is megmarad
  • Aktiválható objektum -gt kérésre aktiválódik
  • Aktív objektum
  • Passzív objektum
  • Lusta aktiválás
  • Objektum aktiválás ID
  • Tranziens objektum ID
  • Aktiváló protokol
  • Aktivátor (aktiválás ID class hozzárendelés, JVM
    menedzselés)
  • Objektum csoport azonosító (JVM)
  • Osztály név
  • URL
  • Objektum specifikus adat
  • Aktivációs csoport (o kapja meg a kérést és
    továbbítja az aktivátornak)
  • Távoli objektum

37
Használata
  • rmid démon (egy JVM-et indít)
  • Aktiválás regisztrálása
  • Speciális konstruktor megvalósítása
  • ActivationDesc osztály
  • Csoport azonosító
  • Osztálynév
  • URL
  • MarshalledObject
  • ActivationID osztály
  • Távoli hivatkozás az aktivátorra
  • Az objektum egyedi azonosítója
  • Activatable osztály
  • Ebbol érdemes származtatni az osztályunkat

38
Példa
  • Interfész deklarálás
  • import java.rmi.
  • public interface MyRemoteInterface extends Remote
  • public Object callMeRemotely() throws
    RemoteException
  • Activatable megvalósotás
  • import java.rmi.import java.rmi.activation.
  • public class ActivatableImplementation extends
    Activatable
  • implements examples.activation.MyRemoteInterf
    ace
  • public ActivatableImplementation(ActivationID id,
    MarshalledObject data)
  • throws RemoteException super(id, 0)
  • public Object callMeRemotely() throws
    RemoteException
  • return "Success"

39
Példa
  • Setup osztály
  • public static void main(String args) throws
    Exception
  • System.setSecurityManager(new RMISecurityManager()
    )
  • Properties props new Properties()
  • props.put("java.security.policy",
    "/home/rmi_tutorial/activation/policy")
  • ActivationGroupDesc.CommandEnvironment ace
    null
  • ActivationGroupDesc exampleGroup new
    ActivationGroupDesc(props, ace)
  • ActivationGroupID agi ActivationGroup.getSyst
    em().registerGroup(exampleGroup)
  • String location "file/home/rmi_tutorial/activat
    ion/"
  • MarshalledObject data null
  • ActivationDesc desc new ActivationDesc (agi,
    "examples.activation.ActivatableImplementation",
  • location, data)
  • MyRemoteInterface mri (MyRemoteInterface)Activat
    able.register(desc)
  • Naming.rebind("ActivatableImplementation", mri)
  • System.exit(0)

40
Futtatás
  • javac
  • rmic
  • rmiregistry
  • rmid -J-Djava.security.policyrmid.policy
  • java setup
  • java server
  • java client

41
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

42
EJB
43
EJB típusok
  • 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) (CSAK lt EJB2.0)
  • Az üzleti adatot modellezik
  • Termék, egyed, rendelés,
  • Entitások - JPA (Java Persistence API) (CSAK gt
    EJB 3.0)
  • Üzenet vezérelt Bab (Message Driven Bean)
  • Hasonló mint a viszony bab, csak üzenetekkel
    lehet kommunikálni vele

44
EJB példa
45
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

46
Mitol EJB az EJB?
  • EJB 2.0
  • 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
  • EJB 3.0
  • POJO (_at_Stateless, interfészek _at_Remote, _at_Local )

47
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()

48
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

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

50
Local Interfész
  • A Remote 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)

51
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

52
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

53
Entitás kezelés
  • EJB 1,2.0
  • Entitás bab
  • EJB 3.0, 3.1
  • Entitás JPA
  • Hibernate 3.0

54
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

55
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)!

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

57
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

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

59
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

60
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

61
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)

62
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

63
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)

64
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)

65
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

66
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

67
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)

68
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

69
Példa
  • Bab
  • Telepíto

70
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

71
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

72
BMP, CMP életciklus
73
Entitás (gtEJB 3.0)
74
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
  • Három 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)
  • Singelton
  • Egy van belole, megorzi az állapotát

75
Életciklusok
76
Példa
  • _at_Singleton
  • _at_ConcurrencyManagement(BEAN)
  • public class DiscountRateBean
  • _at_PersistenceContext
  • private EntityManager entityManager
  • private Rate rate
  • _at_PostConstruct
  • private void init()
  • rate entityManager.find(Rate.class, 1)
  • _at_PreDestroy
  • private void destroy()
  • entityManager.merge(rate)
  • public synchronized void setRate(Rate rate)
  • this.rate rate
  • public synchronized Rate getRate()
  • return rate

77
Teljes muködés
78
Ü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)

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

80
Ü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

81
Példa Bean
82
Tranzakció kezelés
  • A tranzakciók használata bevált megoldás az adat
    integritás megorzése érdekében
  • Hibák, komplex helyzetek
  • Több felhasználó kezelése
  • A folyamatokat munka egységekbe tudjuk osztani
  • Hogyan oldjuk ezt meg amennyiben nem adatbázisban
    végezzük el a megfelelo muveleteket
  • EJB két típust támogat
  • Bab által kezelt tranzakciók
  • Konténer által kezelt tranzakciók

83
Konténer által kezelt tranzakció kezelés
  • A konténer szabja meg a tranzakció határokat
  • Viszony és üzenet babbal tudjuk használni
  • Egyszerusíti a fejlesztést mert alapesetben nem
    kell vele foglalkoznunk
  • Tipikus eset
  • A tároló adott bab metódus meghívásával egy új
    tranzakciót kezd amit befejez amint a metódus
    visszatért
  • Minden metódus egy-egy külön tranzakció
  • Nem lehet egyszerre használni a bab által kezelt
    tranzakció kezeléssel
  • Metódus szinten specifikálhatjuk a tranzakció
    igényeket

84
Tranzakció hatóköre
85
Példa
86
Bab által kezelt tranzakció kezelés
  • Akkor szokták használni a ha a tranzakció
    határokat kézben szeretnénk tartani
  • Az elozonél egy metódus egy tranzakcióhoz
    tartozhat
  • JDBC vagy JTA tranzakciókezelést lehet használni

87
(No Transcript)
88
A mai eloadás tartalma
  • Alkalmazás keretrendszerek
  • JEE
  • Eroforráskezelés
  • JNDI
  • Tranzakciókezelés
  • Tároló által menedzselt tranzakciók
  • Bab által menedzselt tranzakciók
  • EJB
  • RMI
  • JPA
  • EJB

89
A következo eloadás tartalma
  • Spring
  • Architektúra
  • IOC (Függoség injektálás)
  • AOP
  • Adatbázis
  • OSGI
  • Biztonság
  • Modul kezelés
  • Életciklus kezelés
  • Keretrendszer API
Write a Comment
User Comments (0)