Fejlett Programoz - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

Fejlett Programoz

Description:

Title: Fejlett Programoz si Technik k 2. Author: Vanda Last modified by: bilickiv Created Date: 2/1/2002 7:50:30 PM Document presentation format – PowerPoint PPT presentation

Number of Views:68
Avg rating:3.0/5.0
Slides: 50
Provided by: Van9158
Category:

less

Transcript and Presenter's Notes

Title: Fejlett Programoz


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

2
A mai eloadás tartalma
  • Probléma a Java Servlet-tel
  • Template eszközök
  • Java Server Pages
  • Áttekintés
  • Elemei
  • Életciklusa
  • Objektumok
  • Java Beanek használata
  • Java Standard Tag Library
  • Custom Tag Library
  • Java Server Faces
  • Feladata
  • Elemei
  • Navigáció
  • Támogató Bean

3
A mai eloadás tartalma
  • J2EE
  • JNDI
  • RMI
  • Corba

4
Irodalom
  • The JNDI tutorial http//java.sun.com/products/jnd
    i/tutorial/trailmap.html
  • The RMI tutorial http//java.sun.com/j2se/1.4.2/do
    cs/guide/rmi/index.html
  • Fintan Bolton Pure CORBA

5
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

6
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ó

7
Prezentáció
  • JSP
  • Servlet
  • JavaMail

8
Adatkezelés
  • JDBC
  • JNDI
  • EJB
  • JAX
  • SAX
  • DOM
  • JTA
  • JAAS

9
Kommunikáció
  • RMI
  • CORBA
  • JMS

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

11
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.

12
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,

13
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

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

15
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")

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

17
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"))

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

19
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

20
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

21
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

22
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

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

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

25
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

26
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

27
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

28
RMI és a tuzfalak
  • java.rmi.server.RMISocketFactory
  • Alapértelmezett próbálkozás 1099-es port
  • HTTP-be csomagolva
  • HTTP POST
  • 1099-es port
  • 80-as port cgi script

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

30
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

31
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

32
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"

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

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

35
Összefoglaló
  • RMI java RPC
  • Java IDL, RMI IIOP
  • java.rmi.Remote
  • RemoteException
  • Exportálás
  • Rmiregisrty, rmic
  • Rmid
  • UnicastRemoteObject, Activable

36
CORBA
  • OMG - Object Management Group www.omg.org
  • OMA Object Management Architecture
  • Common Object Request Borker Architecture
  • Feladata A távoli eljárás hívások és az Objektum
    orientált fejlesztés összeházasítása
  • Elonyei
  • Nyílt szabvány
  • Objektum orientált
  • Helyszín transzparens
  • Platform, nyelv és implementáció független
  • Ada, Cobol, C, C, Smalltalk, Lisp, Java
  • Támogatja az átjárókat (DCE RPC,DCOM)
  • Lehet szinkron, aszinkron (3.0)
  • QoS

37
Szolgáltatásai
  • 1. Naming Service
  • 2. Event Management Service
  • 3. Life Cycle Service
  • 4. Persistent State Service
  • 5. Transaction Service
  • 6. Concurrency Service
  • 7. Relationship Service
  • 8. Externalization Service
  • 9. Query Service
  • 10. Licensing Service
  • 11. Property Service
  • 12. Time Service
  • 13. Security Service
  • 14. Notification Service
  • 15. Trader Service
  • 16. Collections Service

38
CORBA tartományok
  • 1. Common Enterprise Models
  • 2. Finance/Insurance
  • 3. Electronic Commerce
  • 4. Manufacturing
  • 5. Healthcare
  • 6. Telecommunications
  • 7. Transportation
  • 8. Life Science Research
  • 9. Utilities
  • 10. C4I (Command, Control, Communications,
    Computers, and Intelligence)
  • 11. Space

39
Fontosabb elemei
  • OMG Interfész definiáló Nyelv IDL
  • C - hoz hasonló
  • Nyelv és platform független
  • IDL fordítók
  • Proxy objektumok Csonk, Váz kód (stub, skeleton)
  • Internet Inter-ORB Protocol
  • GIOP speciális jól definiált verziója (TCP)
  • Object Adapter
  • Típusai
  • BOA - Basic Object Adapter
  • POA - Portable Object Adapter
  • A megfelelo nyelvben definiált adatstruktúra és
    az IDL interfész összerendelése
  • A CORBA objektumok életciklusának menedzselése
  • Aktiválás
  • Deaktiválás
  • Object Request Broker
  • A váz és csonk kódok kezelése
  • Runtime az alkalmazásokhoz kapcsolásra
  • Távoli szerverek megtalálása és aktiválása

40
CORBA alkalmazások telepítése
  • CORBA objektumok megtalálása
  • IOR Inter Operable object Reference (a
    szerverekre mutat)
  • IP cím
  • Port
  • Objektum ID
  • IOR beszerzése
  • Fájlból
  • CORBA név szolgáltatásból
  • CORBA objektum kereskedés szolgáltatásból
  • Szerverek megtalálása és aktiválása
  • ORB daemon processz
  • Implementáció tár
  • Szunnyadó szerver használata
  • Szerver megkeresése
  • Szerver aktiválása
  • CORBA hívás
  • Aktív szerver használata
  • Tranziens CORBA objektum használata

41
CORBA fejlesztés lépései
  • IDL interfész definiálása
  • SystemClock
  • A kiszolgáló implementálása
  • Az IDL fordító által generált váz fájlok
    használatával
  • A kliens implementálása
  • Az IDL fordító által generált csonk fájlok
    használatával
  • Az objektum referenciák kiosztása
  • A kiszolgáló és a kliens futtatása

42
SystemClock.idl
  • module clock
  • // The definition of the CORBA-enabled service
  • interface SystemClock
  • long long currentTimeMillis()
  • idlj
  • SystemClock.java
  • public interface SystemClock extends
    SystemClockOperations,
  • org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEn
    tity
  • SystemClockOperations.java
  • public interface SystemClockOperations
  • long currentTimeMillis ()
  • _SystemClockImplBase.java

43
SystemClockImpl.java/1
  • import org.omg.CORBA.ORB
  • import org.omg.CosNaming.
  • import org.omg.CosNaming.NamingContextPackage.
  • public class SystemClockImpl extends
    _SystemClockImplBase
  • public long currentTimeMillis()
  • return System.currentTimeMillis()
  • public SystemClockImpl( String params ) throws
    Exception
  • register( "TimeServer", params )
  • private void register( String corbaName, String
    params ) throws org.omg.CORBA.ORBPackage.Invalid
    Name,
  • org.omg.CosNaming.NamingContextPackage.InvalidName
    , CannotProceed, NotFound
  • if ( ( corbaName null ) (
    corbaName.trim().length() 0 ) )
  • throw new IllegalArgumentException(
  • "Registration name cannot be null or blank." )

44
SystemClockImpl.java/2
  • ORB orb ORB.init( params, null )
  • orb.connect( this )
  • org.omg.CORBA.Object corbaObject
  • orb.resolve_initial_references( "NameService" )
  • NamingContext naming
  • NamingContextHelper.narrow( corbaObject )
  • NameComponent namingComponent new
    NameComponent( corbaName, "" )
  • NameComponent path namingComponent
  • naming.rebind( path, this )
  • public static void main( String args ) throws
    Exception
  • SystemClock timeServer new SystemClockImpl(
    args )
  • java.lang.Object object new java.lang.Object()
  • synchronized( object )
  • object.wait()

45
SystemClockClient.java
  • import org.omg.CORBA.ORB
  • import org.omg.CosNaming.
  • import org.omg.CosNaming.NamingContextPackage.
  • public class SystemClockClient implements
    Runnable
  • private SystemClock timeServer
  • private void connectToTimeServer( String params
    ) throws org.omg.CORBA.ORBPackage.InvalidName,org.
    omg.CosNaming.NamingContextPackage.InvalidName,Not
    Found, CannotProceed
  • ORB orb ORB.init( params, null )
  • org.omg.CORBA.Object corbaObject
    orb.resolve_initial_references( "NameService" )
  • NamingContext naming NamingContextHelper.narrow
    ( corbaObject )
  • NameComponent nameComponent new NameComponent(
    "TimeServer", "" )
  • NameComponent path nameComponent
  • corbaObject naming.resolve( path )
  • timeServer SystemClockHelper.narrow(
    corbaObject )

46
Futtatás
  • idlj
  • tnameserv ORBinitialPort 1050
  • java SystemClockImpl ORBinitialPort 1050
  • java SystemClockClient ORBinitialPort 1050
  • Az alapértelmezett port a 900-as lenne

47
Minta IDL
  • module maptest
  • struct StructMap
  • boolean boolValue
  • char charValue
  • short shortValue
  • unsigned short uShortValue
  • long longValue
  • unsigned long uLongValue
  • long long longLongValue
  • unsigned long long uLongLongValue
  • float floatValue
  • double doubleValue
  • interface interfaceName
  • attribute long anAttribute
  • readonly attribute long roAttribute
  • const long constantValue 42
  • oneway void seqMethod( in StructMapSeq seq )
  • void boundSeqMethod( in BoundStructMapSeq seq )
  • void arrayMethod( in IntArray array )

48
Összefoglaló
  • IDL
  • IIOP
  • IOR
  • tnameserv

49
A következo eloadás tartalma
  • EJB
Write a Comment
User Comments (0)
About PowerShow.com