Next previous CORBA: vad, varför, hur? Innehåll Datornätverk Behov och krav CORBA Historik, principer, arkitektur och beståndsdelar Exempel i Java Internetprogrammering.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
”Ett sätt att distribuera Business Objects via webben”
Leif Håkansson’s Square Dancer Rotation
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Objektorienterad tänkande
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Next previous Lite mer om CGI-programmering Innehåll Vad är CGI? Vad är Forms? Vad är Perl? Forms, CGI och Perl Internetprogrammering F 14 Läs också: Kursboken.
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Programmering B PHP Lektion 2
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Arv.
Programmeringsteknik för Media1 & K1
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
1. En infrastruktur för programutveckling
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Servlets — Java på serversidan. previous next 2 Servlets Introduktion Javaservlets är en i raden av SUN:s många tillämpningar av Java. Servlets kan grovt.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
1 Logging and monitoring of TCP traffic in SSH tunnels Masters thesis Anton Persson.
Next previous CORBA: vad, varför, hur? Innehåll Datornätverk Behov och krav CORBA Historik, principer, arkitektur och beståndsdelar Exempel i Java Internetprogrammering.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
7. Delegerare och notifierare
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Programmeringsteknik för K och Media
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
RMI Av: Josefina & Sarah DS04.
Presentationens avskrift:

next previous CORBA: vad, varför, hur? Innehåll Datornätverk Behov och krav CORBA Historik, principer, arkitektur och beståndsdelar Exempel i Java Internetprogrammering F 10a Läs också den utmärkta och konkreta tutorialen som du hittar på följande adress: Läs också den utmärkta och konkreta tutorialen som du hittar på följande adress:

previous next 2 CORBA Nätverk av datorer Idag har vi ett behov av att kommunicera mellan olika datorer och annan hårdvara Vi vill kunna använda olika sätt att lösa ett problem, tex mha olika programmeringsspråk Vi vill ha kostnadseffektiva lösningar Vi vill inte binda oss till en viss leverantör Troligen finns mycket programvara, ny eller gammal, av olika slag i organisationen

previous next 3 CORBA CORBA (Common Object Request Broker Architecture) Standardisering av distribution konstruerad av OMG (Object Management Group) –OMG en sammanslutning av flera hundra (>600) intressenter för att standardisera objekttekniker Digital, HP, SUN, IBM, Oracle, Netscape, Microsoft, Ericsson mfl Avsikt –att konstruera ett språk- och plattformsoberoende objektorienterat system för distribution Tillåter konstruktion av applikationer som kommunicerar över både plattforms och språkgränser –minimerar beroendet av både hårdvara och programmeringsspråk –enklare att använda mjukvara från olika leverantörer

previous next 4 CORBA... CORBA... Baserad på en server-klient-modell –en server erbjuder service –en klient utnyttjar den –på en viss plattform kan vissa objekt ta rollen av servrar medan andra tar rollen av klienter Finns bindningar till flera programspråk –C++, ADA, Smalltalk, Java, C, COBOL,...

previous next 5 CORBA... CORBA STARTA... Starta namnserver –dvs starta det objekt/program som ansvarar för att hantera namngivna delade (/distribuerade) objekt Starta server med objekt –bind objektet till namnservern –låt servern vänta på att klienter skall kommunicera med dess objekt Starta klienter och anslut till servern –fråga namnservern om referens till visst objekt –skicka meddelanden till objektet

previous next 6 CORBA Meddelanden mellan klient och server förmedlas av en mäklare, Object Request Broker (ORB) –dom går aldrig direkt utan alltid via ORBen Både klient och server ”isolerar” implementationen av klasser med hjälp av IDLer (Interface Description Language) Object Request Broker... CORBA... Klient Objektets implementation IDL ”Skelett” Meddelande (Request) IDL ”Stubbe”

previous next 7 CORBA... På serversidan definierar ett så kallat skelett API:et för ett serverobjekt På klientsidan beskrivs serverns objekt med en så kallad stubbe Ett protokoll som heter IIOP (Internet Inter-ORB Protocol) definierar hur transport av objekt och meddelanden mellan server och klienter på binär nivå sker –IIOP specificerades i CORBA 2.0, tidigare var inte denna del standardiserad vilket gjorde att olika implementationer gjorde på sina egna sätt.

previous next 8 CORBA CORBA innehåller flera ”services” Några viktiga är –Lifscykel, grundläggande mekanismer för att skapa, initiera, ta bort objekt mm –Relations, hanterar relationer mellan objekt –Namn, namnger delade objekt så att flera klienter unikt kan referera dem –Persistens, hanterar persistenta objekt, dvs objekt som är långlivade –Extern lagring, kan flytta objekt mellan intern och externa lagringsformer –Transaktion, ger en infrastruktur för att hantera transaktioner –Händelse, låter objekt kommunicera mha händelser –Parallellkontroll, koordinerar objekt och access till delade resurser Några andra (ett urval) –Trader, erbjuder sätt att "hitta" objekt utgående önskad service –Säkerhet, erbjuder säkerhetsmekanismer som identifiering och auktorisering –Time, för synkronisering av händelser, hantering av alarm och liknande

previous next 9 CORBA Kommunikationen mellan klienter och servrar Lös koppling till plattform, programspråk och detaljer mha –Adaptorer som döljer skillnader –Brokers förmedlar meddelanden –Bryggor mellan protokoll det finns bryggor mellan olika protokoll

previous next 10 CORBA CORBA och API-beskrivningar I CORBA beskrivs gränssnitten (API:erna) för objekten med så kallade IDL:er, dvs grässnittsbeskrivningar. En IDL påminner till stor del om Java:s gränssnittsbeskrivningar (dvs Java:s interface). –En IDL kan dock innehålla konstruktioner som har sitt ursprung i C/C++, som tex typedef, struct och sequence –Vidare deklareras parametrar till metoder som antingen in, parameterns värde skickas med som argument till metoden, dvs den typ av parameteröverföring Java använder sig av out, parameterns värde sätts i metoden och anropande variabel förändras inout, parametern används som både in och out samtidigt Gränssnitt organiseras så att ett eller flera gränssnitt definieras i en modul (eng. module)

previous next 11 CORBA Exempel: Steg 1) Gör gränssnittsbeskrivning module MyApp { interface MyInterface { string myMethod(); }; modulenamnet blir ett package i Java då vi "kör" idltojava och IDL-interfacet blir ett vanligt Java-interface CORBAs string blir sedan String i Java då vi implementerar motsvarande Java-interface (via idltojava )

previous next 12 CORBA Steg 2) På serversidan... I koden på serversidan kontaktar vi först aktuell ORB Därefter skapar vi en referens till namnservern Vi skapar ett serverobjekt (dvs en vanlig instans i Java) och "registrerar" det hos namnservern Till slut låter vi servern vänta på att serva anslutande klienter

previous next 13 CORBA... så här ser det ut i Java... Skapa referens till ORB ( args innehåller adress för namnservern) ORB orb = ORB.init(args, null); Fråga ORB om namnserver org.omg.CORBA.Object nameServiceRef = orb.resolve_initial_references("NameService"); Gör om referensen till ett namnkontextobjekt NamingContext ncRef = NamingContextHelper.narrow(nameServiceRef); Skapa ett en instans av ett objekt som implementerar MyInterface och registrera det i ORBen MyServerClass objectRef = new MyServerClass(); orb.connect(objectRef);

previous next 14 CORBA... serversidan... Konstruera ett namnkomponentobjekt med ett namn för objektreferensen som vi vill dela NameComponent nc = new NameComponent("MittObjektNamn", ""); NameComponent path[] = {nc}; Bind objektet objectRef till namnet path i namnservern, så att klienter kan referera till det. Dvs om någon klient sedan ber namnservern om ett objekt med detta namn så får den en referens till objectRef. ncRef.rebind(path, objectRef); Vänta på att klienter skall ansluta java.lang.Object sync = new java.lang.Object(); synchronized (sync) {sync.wait();}

previous next 15 CORBA Steg 3) Konstruera klient På klientsidan refererar vi ORBen på samma sätt som på serversidan, dvs Vi kontaktar namnservern Vi ber namnservern om referens till namngivet objekt Vi skickar meddelanden till objekten

previous next 16 CORBA... så här ser klientens kod ut i Java... Skapa referens till ORB ( args anger adress för namnservern även här) ORB orb = ORB.init(args, null); Fråga ORB om namnserver org.omg.CORBA.Object nameServiceRef = orb.resolve_initial_references("NameService"); Gör om referensen till ett namnkontextobjekt NamingContext ncRef = NamingContextHelper.narrow(nameServiceRef); Konstruera ett namnkomponentobjekt med samma namn som det objekt som skapades på serversidan (som synes på exakt samma sätt också) NameComponent nc = new NameComponent("MittObjektNamn", ""); NameComponent path[] = {nc};

previous next 17 CORBA... klientsidan... Be namnservern om en referens till det objekt som har samma namn som namnkomponentobjektet MyInterface objectRef = MyInterfaceHelper.narrow(ncRef.resolve(path)); Skicka meddelande till serverobjektet (på exakt samma sätt som ett meddelande till ett icke distribuerat objekt) String result = objectRef.myMethod(); System.out.println("Serverobjektet svarade: " + result); Be namnservern om generiskt CORBA- objekt med givet namn Omvandla referensen till ett Java-objekt som implementerar interfacet

previous next 18 CORBA Konstruera klass och IDL Konstruera en IDL-beskrivning av gränssnittet mot klassen som konstrueras –server och klient kan ha olika definitioner (fast ofta används likadan IDL för både server och klienter) Generera hjälpklasser –i JDK1.2 används kommandot idltojava Skriv server med klassbeskrivning och instans för objektet som klienter skall kunna kommunicera med –Registrera objektet i ORBen och associera det med globalt namn (så att den unikt kan identifieras hos server och alla klienter). Vanligen används namnserver. Skriv klienter som via ORB och (vanligen) namnserver refererar serverobjektet och sedan skickar meddelanden till det

previous next 19 CORBA IDL (Interface Description Language) Ett programspråksneutralt sätt att beskriva en klass Några huvuddelar: –statiskt typat –"fördefinierade" primitiva typer med long, float, boolean, char, void, any osv –metoder och argument deklareras med typ –moduler som innehåller gränssnittsbeskrivningar –gränssnitt (Interface) Kan användas som typ Kan ärva från andra interface Javas Interface har stora likheter med CORBAs interface –datatyper, konstanter, operationer, fält, parametrar parametrar deklareras med typ och som in, out eller inout –undantagshantering (exceptions) undantag som skall kastas av metoder i klass deklareras i interfaces any motsvarar Javas Object

previous next 20 CORBA... IDL exempel, modul med fyra gränssnitt... module CosEventComm { exception Disconnected {}; interface PushConsumer { void push (in any event_data) raises (Disconnected); void disconnect_push_consumer ();}; interface PushSupplier { void disconnect_push_supplier ();}; interface PullConsumer { void disconnect_pull_consumer ();}; interface PullSupplier { any pull () raises (Disconnected); any try_pull (out boolean has_event) raises (Disconnected); void disconnect_pull_supplier ();}; }; Kan kasta undantag event_data:s värde skickas med som argument has_event ges värde i metoden try_pull Undantag deklareras på detta sätt

previous next 21 CORBA Java IDL I Java IDL gör vi först gränssnittsbeskrivningen –INTERFACE.idl Med kommandot idltojava genereras filer som vi kan utnyttja vid skrivandet av server och klienter idltojava INTERFACE.idl –En katalog med samma namn som modulen skapas och en Java-interface- beskrivning motsvarande IDL-beskrivningen skapas. –En del hjälpklasser som gör det enkelt att skriva servrar och klienter konstrueras –Alla dessa klasser definieras automatiskt tillhöra ett package med samma namn som modulen (och därmed också den nyskapade katalogens)

previous next 22 CORBA... Följande fem filer skapas: INTERFACE.java Javaversionen av interfacet _INTERFACEImplBase.java serverskellett som implementerar interfacet _INTERFACEStub.java klientstubbe som implementerar interfacet INTERFACEHelper.java en klass med statiska hjälpmetoder (tex narrow() som behövs för att ovandla CORBA-objektet till INTERFACE- typen) INTERFACEHolder.java "Håller" en instans av INTERFACE och hjälper till att hantera out och inout variabler som ju inte egentligen finns i Java

previous next 23 CORBA Exempel: Hello World Ett enkelt CORBA-exempel där vi konstruerar ett objekt på en server som returnerar en sträng till den klient som ansluter Illustrerar hur IDL-beskrivning görs, hur skelett och stubbar samt andra hjälpklasser automatiskt konstrueras, hur en server respektive klient konstrueras, hur namnserver samt server och klient startas

previous next 24 CORBA 1) Hello World Interface module HelloApp{ interface Hello { string sayHello(); }; Gränssnittet definierar endast en metod, sayHello, vars resultat (returvärde) är en sträng ( string )

previous next 25 CORBA 2) Skapa hjälpklasser idltojava -fno-cpp Hello.idl Katalogen HelloApp och följande filer i denna katalog/package skapas: Hello.java _HelloImplBase.java _HelloStub.java HelloHelper.java HelloHolder.java om vi inte vill använda C-preprocessor (som inte säkert finns)

previous next 26 CORBA 3) Hello World Server import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; class HelloServant extends _HelloImplBase { int i = 0; public String sayHello() {return "\nHello world !! (no: " + ++i + ")\n";} } här följer en beskrivning av den klass vars instans vi vill distribuera _HelloImplBase implementerar interfacet Hello.java och är ett serverskelett, dvs en brygga mot ORBen

previous next 27 CORBA... public class HelloServer { public static void main(String args[]) {try{ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper.narrow(objRef); HelloServant helloRef = new HelloServant(); orb.connect(helloRef); NameComponent nc = new NameComponent("Hello", ""); NameComponent path[] = {nc}; ncRef.rebind(path, helloRef); kontakta ORB skapa referens till namnserver instansiera server- objekt och regi- strera det i ORBen konstruera namnobjekt och bind serverobjektet till detta namn i namnservern

previous next 28 CORBA... // vänta på att klienter skall ta kontakt java.lang.Object sync = new java.lang.Object(); synchronized (sync) { sync.wait(); } } catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); } }}

previous next 29 CORBA 4) Hello World Klient import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CORBA.*; public class HelloClient { public static void main(String args[]) {try{ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent("Hello", ""); NameComponent path[] = {nc}; Hello helloRef = HelloHelper.narrow(ncRef.resolve(path)); skapa referens till serverns "Hello"- objekt

previous next 30 CORBA... String hello = helloRef.sayHello(); System.out.println(hello); } catch (Exception e) { System.out.println("ERROR : " + e); e.printStackTrace(System.out); } }} skicka ett meddelande till serverobjektet

previous next 31 CORBA 5) Kompilera och Kör Kompilera javac *.java HelloApp/*.java Kör a) starta namnserver tnameserv -ORBInitialPort 1050 b) Starta HelloServer java HelloServer -ORBInitialPort 1050 c) Kör klient java HelloClient -ORBInitialPort 1050

previous next 32 CORBA Sammanfattning starta och anslut till namnserver starta namnserver tnameserv -ORBInitialPort PORTNUMMER starta namnserver tnameserv -ORBInitialPort PORTNUMMER Starta SERVER java SERVER -ORBInitialHost IPADRESS -ORBInitialPort PORTNUMMER Starta SERVER java SERVER -ORBInitialHost IPADRESS -ORBInitialPort PORTNUMMER Kör KLIENT java KLIENT -ORBInitialHost IPADRESS -ORBInitialPort PORTNUMMER Kör KLIENT java KLIENT -ORBInitialHost IPADRESS -ORBInitialPort PORTNUMMER

previous next 33 CORBA Exempel: på att bla definiera metod i klienten som anropas av servern I IDL-gränssnittet definierar vi ett gränssnitt för ett objekt som skickas med som parameter från klienten till servern Innan klienten anropar servern skapar klienten en instans av detta "call-back-objekt" och registrerar det i ORBen Från servern skickar vi ett meddelande till detta objekt som resulterar att en metod på klientsidan utförs Kodexempel i callback respektive kylanläggningsexemplen i exempelkatalogen: