10.1 Remote Method Invocation (RMI)



Ähnliche Dokumente
7 Remote Method Invocation (RMI)

Remote Method Invocation

Mobile und Verteilte Datenbanken

Themen. Web Service - Clients. Kommunikation zw. Web Services

Verteilte Systeme: Übung 4

Java RMI Remote Method Invocation

Java-Programmierung. Remote Method Invocation - RMI

Wiederholung: Beginn

SOA. Prof. Dr. Eduard Heindl Hochschule Furtwangen Wirtschaftsinformatik

Enterprise Applikation Integration und Service-orientierte Architekturen. 09 Simple Object Access Protocol (SOAP)

Java Remote Method Invocation (RMI)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Web-Sevices : WSDL Entwicklung von Web-Anwendungen

Remote Method Invocation

Remote Method Invocation

Architektur von SOAP basierten Web Services

Webservices. 1 Einführung 2 Verwendete Standards 3 Web Services mit Java 4 Zusammenfassung. Hauptseminar Internet Dienste

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

Einführung: Verteilte Systeme - Remote Method Invocation -

Implementierung von Web Services: Teil I: Einleitung / SOAP

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Client/Server-Programmierung

Client/Server-Programmierung

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Konzepte von Betriebssystem-Komponenten Middleware RMI

Auszug aus JAX-WS Folien

Thema: Web Services. Was ist ein Web Service?

Autor: Peter Seemann Seminar: Softwarearchitekturen Betreuer: Benedikt Meurer

Zustandsgebundene Webservices

Mobile und Verteilte Datenbanken

VVA Webservice Online Lieferbarkeits-Abfrage

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Definition Web Service

Workflow, Business Process Management, 4.Teil

7.1.5 Java RMI Remote Method Invocation ( (

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

WSDL. Web Services Description Language. André Vorbach. André Vorbach

Java und XML 2. Java und XML

WebServices Zwischen Buzzword und Nutzen

Kapitel 5 Web-Services

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

SOAP Integrationstechnologie für verteilte Middlewarearchitekturen?

Übersicht. Angewandte Informatik 2 - Tutorium 6. Teile einer WSDL-Datei. Was ist WSDL. Besprechung: Übungsblatt 5

3 Objektorientierte Konzepte in Java

Grundlagen verteilter Systeme

Java: Vererbung. Teil 3: super()

Programmieren in Java

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Der lokale und verteilte Fall

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Programmieren II. Remote-Programmierung. Institut für Angewandte Informatik

Java Web Services Metadata JSR-181

3-schichtige Informationssystem-Architektur

Objektorientierte Programmierung

Übungen zu Softwaretechnik

SOAP, WSDL, UDDI. Martin Grimmer. Proseminar: Die Zukunft der Softwareentwicklung: Komponentensysteme/Web Services Vortrag 1 am

8.1.5 Java RMI Remote Method Invocation

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Asynchrone Webservices mit Axis 1.x in Java

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Applet Firewall und Freigabe der Objekte

Objektorientierte Programmierung. Kapitel 12: Interfaces

Java Kurs für Anfänger Einheit 5 Methoden

Softwareentwicklung in verteilten Umgebungen Middleware Case Studies (Coulouris et al., Kapitel 5 und 19) Dieter Schmalstieg Jens Grubert

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Man liest sich: POP3/IMAP

-Testen verteilter Anwendungen

Seminarbericht Rechnernetze XML Web Services Schnittstelle zwischen den Welten.NET und Java

ObjectBridge Java Edition

Javakurs zu Informatik I. Henning Heitkötter

Web Sockets mit HTML5. Quelle:

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Grundlagen von Python

Programmierkurs Java

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

Vorkurs C++ Programmierung

Kapitel 6. Vererbung

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

Kapitel 6. Vererbung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Verteilte Systeme: Übung 4

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die Programmierung

Große Übung Praktische Informatik 1

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase

Algorithmen und Datenstrukturen

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Software Reuse Sommer 2004

Securing SOAP e-services

XML-RPC, SOAP und Web Services. Jörn Clausen

Einführung in die Java- Programmierung

Praktikum Verteilte Anwendungen

Transkript:

10.1 Remote Method Invocation (RMI) Verteilte Java Anwendungen Methodenaufrufe auf Fremdobjekten (remote objects) Object Serialization Typen bleiben erhalten Package java.rmi (und andere) Vorläufige Version 411 c 2003 Peter Thiemann

Überblick Definition des remote interface Implementierung der Serverklassen Vorläufige Version 412 c 2003 Peter Thiemann

10.1.1 Remote Interface package examples.myremoteinterface; public interface MyRemoteInterface extends java.rmi.remote { String sayhello() throws java.rmi.remoteexception; } Protokoll = Methoden des Interface Falls andere Remote Objects als Parameter oder Ergebnis von Methoden auftreten, so darf nicht ihr Klassentyp, sonder ihr (remote) Interfacetyp deklariert werden! Vorläufige Version 413 c 2003 Peter Thiemann

10.1.2 Implementierung des Remote Interface package examples.myremoteinterface; import java.rmi.*; import java.rmi.server.unicastremoteobject; public class Hello extends UnicastRemoteObject implements MyRemoteInterface { erweitert den Server UnicastRemoteObject einfaches Remote Object mit TCP-Kommunikation ständig laufender Server deklariert gewünschtes Remote Interface Vorläufige Version 414 c 2003 Peter Thiemann

Konstruktor des Remote Object private String name; public Hello(String s) throws RemoteException { super(); name = s; } muss Konstruktor von UnicastRemoteObject aufrufen: exportiert das Objekt erzeugt einen Server, der an einem anonymen Port auf Methodenaufrufe für Hello wartet java.rmi.remoteexception: ausgelöst, falls Export des Objekts nicht möglich oder keine Netzwerkressourcen vorhanden Vorläufige Version 415 c 2003 Peter Thiemann

Implementierung des Remote Interface public String sayhello() throws RemoteException { return (name + " says: Hello World!"); } Methode aus MyRemoteInterface Argumente und Rückgabewerte: beliebige primitive Typen; Klassen müssen IF java.io.serializable implementieren Marshalling lokale Objekte werden kopiert (nur Felder, die weder statisch noch transient sind) fremde Objekte (remote objects) werden als Referenzen übergeben Vorläufige Version 416 c 2003 Peter Thiemann

Startmethode des Servers public static void main(string args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } Security Manager wacht darüber, daß keine illegalen Operationen ausgeführt werden auch selbstdefinierter Security Manager möglich ohne Security Manager: keine RMI Klassen möglich Vorläufige Version 417 c 2003 Peter Thiemann

... Erzeugen des Remote Objects try { Hello obj = new Hello("HelloServer"); mehrere Objekte möglich Objekt hört, sobald es konstruiert ist Vorläufige Version 418 c 2003 Peter Thiemann

Publikation des Remote Objects Naming.rebind("//host /HelloServer", obj); System.out.println("HelloServer bound in registry"); host : Hostname oder IP-Adresse des Serverrechners Verzeichnisdienst für remote objects: //host [:port ]/string URL ohne Schema Standardport des Verzeichnisdienstes: 1099 Remote Objects verlassen niemals ihren eigenen Adreßraum Registration nur direkt auf Serverrechner (Sicherheit!) Anfrage an Verzeichnisdienst Referenz auf das Remote Object Vorläufige Version 419 c 2003 Peter Thiemann

10.1.3 Verwendung des Remote Objects package examples.myremoteinterface; import java.awt.*; import java.rmi.*; public class HelloApplet extends java.applet.applet { String message = ""; public void init() { try { Hello obj = (Hello)Naming.lookup("//" + getcodebase().gethost() + "/HelloServer"); message = obj.sayhello(); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getmessage()); e.printstacktrace(); } } } public void paint(graphics g) { g.drawstring(message, 25, 50); } Vorläufige Version 420 c 2003 Peter Thiemann

Verwendung 1. Naming.lookup ("//host /service ") kontaktiert den Verzeichnisdienst auf host und fragt dort nach service falls er existiert, so liefert lookup ein Stub-Objekt, das mit dem service Objekt verbunden ist die entsprechende Klasse wird ggf. noch geladen 2. obj.sayhello () aktiviert das Stub-Objekt serialisiert die Parameter und verschickt sie empfängt die Antwort (warten) deserialisiert sie in ein Objekt entsprechend des Ergebnistyps String 3. Anzeige durch paint () Vorläufige Version 421 c 2003 Peter Thiemann

10.1.4 Erzeugung der Stubs rmic erzeugt (client) stubs und (server) skeletons aus Package (Bsp: examples.myremoteinterface) client stub Klasse implementiert Remote Interface führt Serialisierung durch und implementiert RMI Protokoll server skeleton führt Deserialisierung durch ruft Methode auf Ausgabe: class files Vorläufige Version 422 c 2003 Peter Thiemann

10.1.5 Einbettung in Applet <applet codebase="myclasses/" code="examples.myremoteinterface.helloapplet" width=500 height=120> </applet> webserver muss = RMI Objektserver code Attribut muss voll qualifiziert sein (Pfadname): HTML Seite in $(WWWDIR) Class files in $(WWWDIR)/myclasses/examples/myremoteinterface Vorläufige Version 423 c 2003 Peter Thiemann

10.1.6 Start des Verzeichnisdiensts rmiregistry caches interfaces restart on change Vorläufige Version 424 c 2003 Peter Thiemann

10.1.7 Start des Servers benötigt java.rmi.server.codebase Property, da client stubs vom Server verschickt werden. benötigt java.security.policy Property zur Initialisierung des SecurityManager java -Djava.rmi.server.codebase=\ http://myhost/~myusrname/codebase/ \ -Djava.security.policy=PATHTOPOLICYFILE \ examples.myremoteinterface.helloimpl Vorläufige Version 425 c 2003 Peter Thiemann

10.2 SOAP Simple Object Access Protocol XML-basiertes Protokoll für Remote Procedure Call Transport durch HTTP ( zustandslos) Serialization definiert durch XML Schema (Standardformat, Erweiterbarkeit) POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "Some-URI" <SOAP-ENV:Envelope...> <SOAP-ENV:Body> <m:getlasttradeprice xmlns:m="some-uri"> <symbol>dis</symbol> </m:getlasttradeprice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Vorläufige Version 426 c 2003 Peter Thiemann

SOAP: Reisebüro Reiseveranstalter <?xml version= 1.0?> <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:header> <m:reservation xmlns:m="http://travelcompany.example.org/reservation" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustunderstand="true"> <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</m:reference> <m:dateandtime>2001-11-29t13:20:00.000-05:00</m:dateandtime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustunderstand="true"> <n:name>marilyn Manson</n:name> </n:passenger> </env:header> <env:body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing>new York</p:departing> <p:arriving>los Angeles</p:arriving> <p:departuredate>2001-12-14</p:departuredate> <p:departuretime>late afternoon</p:departuretime> <p:seatpreference>aisle</p:seatpreference> </p:departure> Vorläufige Version 427 c 2003 Peter Thiemann

<p:return> <p:departing>los Angeles</p:departing> <p:arriving>new York</p:arriving> <p:departuredate>2001-12-20</p:departuredate> <p:departuretime>mid-morning</p:departuretime> <p:seatpreference/> </p:return> </p:itinerary> <q:lodging xmlns:q="http://travelcompany.example.org/reservation/hotels"> <q:preference>none</q:preference> </q:lodging> </env:body> </env:envelope> Vorläufige Version 428 c 2003 Peter Thiemann

Erklärung nur Elemente/Attribute mit NS Präfix env sind in SOAP definiert Rest anwendungsspezifisch env:header ist optional (Erweiterung) env:role zusammen mit env:mustunderstand: nächster Empfänger muss diesen Header verarbeiten oder die Nachricht zurückweisen (SOAP Nachrichten können über Proxies vermittelt werden) env:body ist verpflichtend Informationsaustausch zwischen Sender und Empfänger Übertragung durch HTTP (GET oder POST), Email, RPC, etc Vorläufige Version 429 c 2003 Peter Thiemann

SOAP: Reiseveranstalter Reisebüro <?xml version= 1.0?> <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:header> <m:reservation xmlns:m="http://travelcompany.example.org/reservation" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustunderstand="true"> <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</m:reference> <m:dateandtime>2001-11-29t13:35:00.000-05:00</m:dateandtime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustunderstand="true"> <n:name>marilyn Manson</n:name> </n:passenger> </env:header> <env:body> <p:itineraryclarification xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing> <p:airportchoices> JFK LGA EWR </p:airportchoices> </p:departing> </p:departure> Vorläufige Version 430 c 2003 Peter Thiemann

<p:return> <p:arriving> <p:airportchoices> JFK LGA EWR </p:airportchoices> </p:arriving> </p:return> </p:itineraryclarification> </env:body> </env:envelope> Vorläufige Version 431 c 2003 Peter Thiemann

Spezielle Konvertionen für SOAP RPC Nötige Information 1. Adresse des Zielknotens 2. Prozedur- / Methodenname. 3. Verweise oder Werte von Parametern und Rückgabewerten 4. Trennung zwischen Identifikation der Zielressource im Web von Daten bzw. Kontrollinformation 5. Protokoll zwischen den Knoten, Transportmittel 6. Header Information Vorläufige Version 432 c 2003 Peter Thiemann

10.3 WSDL Web Service Description Language XML basiert beschreibt Ort und Protokoll des Service Hauptelemente (XML): porttype Operationen des Service (vgl. RPC Programm) message Spezifikation der Nachrichtenparameter types Datentypen (XML Schema) binding Nachrichtenformat und Protokoll Vorläufige Version 433 c 2003 Peter Thiemann

WSDL Beispiel <message name="gettermrequest"> <part name="term" type="xs:string"/> </message> <message name="gettermresponse"> <part name="value" type="xs:string"/> </message> <porttype name="glossaryterms"> <operation name="getterm"> <input message="gettermrequest"/> <output message="gettermresponse"/> </operation> </porttype> xs ist XSchema namespace Vorläufige Version 434 c 2003 Peter Thiemann

WSDL Beispiel: Einweg-Operation <message name="newtermvalues"> <part name="term" type="xs:string"/> <part name="value" type="xs:string"/> </message> <porttype name="glossaryterms"> <operation name="setterm"> <input name="newterm" message="newtermvalues"/> </operation> </porttype> kein Rückgabewert keine Antwort Vorläufige Version 435 c 2003 Peter Thiemann

Weitere Operationsarten Ausgabeanforderung (kein <input>), Bsp: <message name="whattimevalue"/> <message name="thetimevalue"> <part name="time" type="xs:date"/> </message> <porttype name="date"> <operation name="currenttime"> <input name="whattime" message="whattimevalue"/> <output name="thetime" message="thetimevalue"/> </operation> </porttype> Notification : Ausgabe ohne Anforderung Vorläufige Version 436 c 2003 Peter Thiemann

SOAP Bindung <porttype name="glossaryterms"> <operation name="getterm">... <binding type="glossaryterms" name="b0"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation> <soap:operation soapaction="http://example.com/getterm"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> soap ist der SOAP name space style rpc, document transport definert Basisprotokoll (HTTP) Vorläufige Version 437 c 2003 Peter Thiemann

10.4 UDDI UDDI = Universal Description, Discovery and Integration Verzeichnisdienst zur Registration und Suche von Web Services Kommunikation via SOAP Teil von.net geschäftsorientiert verwendet WSDL für Service Beschreibung zunächst offline: Dienst für den Programmierer dynamisch verifiziert Vorläufige Version 438 c 2003 Peter Thiemann