1 Fejlett Programozási Technikák 2. 15/11. Fejlett Programozási Technológiák 2. 2 A mai előadás tartalma Probléma a Java Servlet-tel Template eszközök.

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements

Windows Communication Foundation (WCF)
Elosztott objektumok használata Tihanyi Sándor december.
Hálózati és Internet ismeretek
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Erőállóképesség mérése Találjanak teszteket az irodalomban
Adatbányászati technikák (VISZM185)
RMI = Remote Method Invocation
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
1 Fejlett Programozási Technikák 2. 15/9. Fejlett Programozási Technológiák 2. 2 Az előző mai előadás tartalma: Számítógépes biztonság Jáva és a biztonság.
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Fejlett Programozási Technológiák II. Világos Zsolt 1. gyakorlat.
9. Háttér logika Dr. Bilicki Vilmos Szegedi Tudományegyetem
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Osztott alkalmazások kezelése. VIR elosztott architektúra indítékai: - meglévő komponensek integrációja - WEB / Internet elterjedése (nemzetköziség) -
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
WSDL alapismeretek A WSDL (Web Services Description Language – Web szolgáltatások leíró nyelv) egy XML-alapú nyelv a Web szolgáltatások leírására és azok.
Hálózatkezelés, java.net Elek Tibor
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
SPRING FRAMEWORK bemutatása
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Szombathely Dinamikus WEB programozás: PHP és JSP.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
SOAP alapismeretek A SOAP egy egyszerű XML alapú protokoll, ami lehetővé teszi, hogy az alkalmazások információt cseréljenek a HTTP-én keresztül. Forrás:
WEB MES (webes gyártásirányító rendszer)
Programrendszerek Fejlesztése
A CORBA Rudics Attila 541. Bevezetés Probléma: A nagy számítógépes hálózati rendszerek heterogenitása -különféle architektúrájú számítógépek -különféle.
szakmérnök hallgatók számára
ARCHITECTArchitect AcademyFoundationsInsidersMCPtréningekvizsgákgyakorlatprojektek Novák István eEvangelist – „Dive deeper” Grepton Zrt. Technológiai vezető.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
A Visual Basic nyelvi elemei
Illés Zoltán ELTE Informatikai Kar
Java web programozás 7-8..
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Java web programozás 6..
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
DLL használata és készítése Feladat
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Webszervizek (JAX-WS, és JAX-RS) bemutatása
Java Önelemzés Dynamikus Proxy
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hálózatkezelés Java-ban
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JBoss Wildfly Kalla Mór
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

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

Fejlett Programozási Technológiák 2. 2 A mai előadá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

Fejlett Programozási Technológiák 2. 3 A mai előadás tartalma: J2EE  JNDI  RMI Corba

Fejlett Programozási Technológiák 2. 4 Irodalom The JNDI tutorial The RMI tutorial Fintan Bolton: Pure CORBA

Fejlett Programozási Technológiák 2. 5 Vállalati szoftver 10 ügyvéd 11 féle válasz Több mint egy weboldal 2 vagy több rétegű architektúra  Komponens alapú elosztott rendszerek  Együttműködés más rendszerekkel  Karbantartható kód/alkalmazás

Fejlett Programozási Technológiák 2. 6 Java 2 Enterprise Edition J2EE tartalmazza a J2SE-t API, szabvány, tervezési minta gyűjtemény Elemei (rétegek szerint):  Prezentáció  Adat tárolás kinyerés  Kommunikáció

Fejlett Programozási Technológiák 2. 7 Prezentáció JSP Servlet JavaMail

Fejlett Programozási Technológiák 2. 8 Adatkezelés JDBC JNDI EJB JAX SAX DOM JTA JAAS

Fejlett Programozási Technológiák 2. 9 Kommunikáció RMI CORBA JMS

Fejlett Programozási Technológiák Megvalósítások Tomcat JBoss WebSphere iPlanet J2EE SDK …

Fejlett Programozási Technológiák JNDI Java Naming and Directory Interface A J2EE legfontosabb összetevője (a J2SEE –nek is része) Feladata:  Objektumok referenciáinak tárolása kereshető formában  Együttműkö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.

Fejlett Programozási Technológiák 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, …

Fejlett Programozási Technológiák JNDI csomagok javax.naming  Kontesztus (Context) Kezdő 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

Fejlett Programozási Technológiák 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 "); System.exit(-1);} String name = args[0]; Hashtable env = new Hashtable(11); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFact ory"); 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(); } catch (NamingException e) { System.err.println("Problem looking up " + name + ": " + e); } }}

Fejlett Programozási Technológiák 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");

Fejlett Programozási Technológiák 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://localhost:389/o=JNDITutorial"); env.put(Context.SECURITY_PRINCIPAL, "joeuser"); env.put(Context.SECURITY_CREDENTIALS, "joepassword"); try { DirContext ctx = new InitialDirContext(env); Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People"); System.out.println("sn: " + attrs.get("sn").get()); ctx.close(); } catch (NamingException e) { System.err.println("Problem getting attribute: " + e); }

Fejlett Programozási Technológiák Attribútum, Attribútum hierarchia:  Név – vezetéknév Attributes answer = ctx.getAttributes("cn=Ted Geisel, ou=People"); 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 ModificationItem[3]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("mail", mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("telephonenumber", " ")); mods[2] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("jpegphoto"));

Fejlett Programozási Technológiák 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("ou=People", matchAttrs); String[] attrIDs = {"sn", "telephonenumber", "golfhandicap", "mail"}; NamingEnumeration answer = ctx.search("ou=People", 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 = "(&(sn=Geisel)(mail=*))"; NamingEnumeration answer = ctx.search("ou=People", filter, ctls); Binding Attributes attrs = new BasicAttributes(true); // case-ignore Attribute objclass = new BasicAttribute("objectclass"); objclass.add("top"); objclass.add("organizationalUnit");attrs.put(objclass); Context result = ctx.createSubcontext("ou=Fruits", attrs);

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák RMI Remote Method Invocation Objektum orientált RPC  Teljes objektumokat tudunk átküldeni, nem csak előre definiált típusokat Java specifikus Elosztott szemétgyűjtő Biztonságos Egyszerű (nincs IDL) URl szerű: rmi://host:port/objektumnév

Fejlett Programozási Technológiák Különbségek Elosztott vs. Normál Java alkalmazás  Távoli objektum hivatkozása használható  A Cast ugyanúgy műkö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

Fejlett Programozási Technológiák Felépítése Java.RMI.remote interfész  Ezt kell bőví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 szerepelő 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

Fejlett Programozási Technológiák Műkö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ötelező) Szerver oldali reprezentáció:  Kiolvassa a paramétereket és visszaalakítja őket (unmarshals)  Meghívja a megfelelő objektum megfelelő metódusát  Átalakítja és átküldi az eredményt (marshals)

Fejlett Programozási Technológiák 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/WeatherService"; Naming.rebind( serverObjectName, service );} Kliens megvalósítás String remoteName = "rmi://" + server + "/WeatherService"; WeatherService weatherService =( WeatherService ) Naming.lookup( remoteName ); List weatherInformation = weatherService.getWeatherInformation(); Fordítás  Javac  Rmic -> csonk osztályok (rmic –v1.2 -> vázat is gyárt) Futtatás  rmiregistry  Java Server  Java Kliens

Fejlett Programozási Technológiák Paraméter átadás Serializable (menthető) 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üldődik 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

Fejlett Programozási Technológiák Szemét gyűjtés Referencia számláló szemét gyűjtő  Minden JVM-en belül számon tartja az aktív referenciákat  Referenced üzenet  Együttműködés a helyi szemétgyűjtővel: Gyenge referencia Normál referencia

Fejlett Programozási Technológiák Dinamikus osztály betöltés Bármilyen objektum átvihető (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ímről betölteni  java.rmi.server.RMIClassLoader.getClassAnnotatio n

Fejlett Programozási Technológiák RMI és a tűzfalak 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

Fejlett Programozási Technológiák 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.Remote 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.Remote obj, boolean force)

Fejlett Programozási Technológiák Aktiválható távoli objektum Sok objektum -> erőforrás foglalás A klienseknek meg kell őrizniük a referenciát (szemét gyűjtő) Szerver leállás esetén is megmarad Aktiválható objektum -> 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 (ő kapja meg a kérést és továbbítja az aktivátornak)  Távoli objektum

Fejlett Programozási Technológiák 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  Ebből érdemes származtatni az osztályunkat

Fejlett Programozási Technológiák 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.MyRemoteInterface { public ActivatableImplementation(ActivationID id, MarshalledObject data) throws RemoteException {super(id, 0); } public Object callMeRemotely() throws RemoteException { return "Success"; }}

Fejlett Programozási Technológiák 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.getSystem().registerGroup(exampleGroup); String location = "file:/home/rmi_tutorial/activation/"; MarshalledObject data = null; ActivationDesc desc = new ActivationDesc (agi, "examples.activation.ActivatableImplementation", location, data); MyRemoteInterface mri = (MyRemoteInterface)Activatable.register(desc); Naming.rebind("ActivatableImplementation", mri); System.exit(0);

Fejlett Programozási Technológiák Futtatás javac rmic rmiregistry rmid -J-Djava.security.policy=rmid.policy & java setup java server java client

Fejlett Programozási Technológiák Összefoglaló RMI – java RPC Java IDL, RMI IIOP java.rmi.Remote RemoteException Exportálás Rmiregisrty, rmic Rmid UnicastRemoteObject, Activable

Fejlett Programozási Technológiák CORBA OMG - Object Management Group 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 Előnyei:  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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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 megfelelő 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  Démon vagy könyvtár

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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

Fejlett Programozási Technológiák 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.IDLEntity { }  SystemClockOperations.java public interface SystemClockOperations { long currentTimeMillis (); }  _SystemClockImplBase.java

Fejlett Programozási Technológiák 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.InvalidName, org.omg.CosNaming.NamingContextPackage.InvalidName, CannotProceed, NotFound { if ( ( corbaName == null ) || ( corbaName.trim().length() == 0 ) ) throw new IllegalArgumentException( "Registration name cannot be null or blank." );

Fejlett Programozási Technológiák 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(); }

Fejlett Programozási Technológiák 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.NamingContext Package.InvalidName,NotFound, 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 ); } …

Fejlett Programozási Technológiák Futtatás idlj tnameserv –ORBinitialPort 1050 java SystemClockImpl –ORBinitialPort 1050 java SystemClockClient –ORBinitialPort 1050 Az alapértelmezett port a 900-as lenne

Fejlett Programozási Technológiák 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 ); void intOutMethod( inout long intValue ); };

Fejlett Programozási Technológiák Összefoglaló IDL IIOP IOR tnameserv

Fejlett Programozási Technológiák A következő előadás tartalma EJB