Middleware. im Schweinsgalopp

Ähnliche Dokumente
RMI. Wir haben. Komponenten auf einem Rechner. Remote Method Invocation

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Remote Method Invocation

Java-Programmierung. Remote Method Invocation - RMI

Remote Method Invocation

Remote Method Invocation

Mobile und Verteilte Datenbanken

Konzepte von Betriebssystem-Komponenten Middleware RMI

Middleware. Host. Versuch einer Einleitung. dumme Terminals stellen Ausgaben dar und nehmen Eingaben an

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

7.1.5 Java RMI Remote Method Invocation ( (

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

Java Remote Method Invocation (RMI)

Remote Methode Invocation (RMI) ETIS SS05

Java RMI Remote Method Invocation

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

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

Wiederholung: Beginn

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006

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

Client/Server-Programmierung

Client/Server-Programmierung

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

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

-Testen verteilter Anwendungen

Grundlagen der Web-Entwicklung INF3172

Objektorientierte Softwareentwicklung

Einführung: Verteilte Systeme - Remote Method Invocation -

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010

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

Grundlagen verteilter Systeme

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

Mobile und Verteilte Datenbanken

Web-Konzepte für das Internet der Dinge Ein Überblick

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

Theorie und Praxis einer JSON-RPC-basierten Web-API

8.1.5 Java RMI Remote Method Invocation

Kommunikation. Björn und Georg

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

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Web-Services Implementierung mit Java

SOA. Prof. Dr. Eduard Heindl Hochschule Furtwangen Wirtschaftsinformatik

Warum EJB Technologie (1)?

Praktikum Verteilte Anwendungen

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP

5A Kooperation: Lösungen

Kommunikation in verteilten Anwendungen

J a v a S e r v l e t s

IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES Software AG. All rights reserved. For internal use only

7 Remote Method Invocation (RMI)

J Fernmethodenaufrufe Remote Method Invocation (RMI)

Übung zur Vorlesung "Einführung in Verteilte Systeme"

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2008

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 30. März 2006

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

SOAP Integrationstechnologie für verteilte Middlewarearchitekturen?

Web Services. Web Services in the News. Vision: Web of Services. Learning for Results. DECUS Symposium 2002, Vortrag 1K07,

Inhaltsverzeichnis. Zusammenfassung CORBA

AVO Übung 4. AspectIX. 18. Januar 2005 (WS 2004) Andreas I. Schmied Universität Ulm Fakultät für Informatik

Internetanwendungstechnik (Übung)

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

Client/Server-Programmierung

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

Seminararbeit. Konzept einer Schnittstelle zur Benutzerverwaltung in RiskShield-Server. Christoph Laufs INFORM GmbH INFORM GmbH 1

Kapitel WT:VI (Fortsetzung)

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

Praktikum aus Softwareentwicklung 2, Stunde 8

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

Implementierung von Web Services: Teil I: Einleitung / SOAP

Webservices. Grundlagen, Beispiel, Tomcat, Apache Axis

Übungen zu Softwaretechnik

Client/Server-Programmierung

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

Webservices. Entwicklercamp Denny Sternberg

<Insert Picture Here> Einführung in SOA

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

Definition Web Service

39 Object Request Brokers. 40 Components of an ORB Stubs and Skeletons Stub

Web Services. XML, WSDL, SOAP und UDDI Einblicke und Ausblicke J.M.Joller 1

Projektgruppe 453: Entwurf eines Managementwerkzeugs zur Verwaltung von Sicherheitsdiensten für komplexe eingebettete Dienstesysteme

Softwareentwicklung mit Enterprise JAVA Beans

Inhalt. Übung zur Vorlesung "Einführung in Verteilte Systeme" Das RMI-Schichtenmodell. Java Remote Method Invocation. Wintersemester 2004/05

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

14. RMI - Remote Method Invocation

Grundlagen des Grid Computing

Verteilte Systeme: Entfernte Methodenaufrufe

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 3)

Enterprise Application Integration Erfahrungen aus der Praxis

Evgenia Rosa ORACLE Deutschland GmbH BU Application Server

Web Service Entwicklung mit Java. Sven Lindow

6 Zusammenschaltung von Web-Services

H.1 FORMI: An RMI Extension for Adaptive Applications H.1 FORMI: An RMI Extension for Adaptive Applications

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Web-Services Implementierung

Transkript:

Middleware im Schweinsgalopp 1

Szenario Unternehmen verwendet SAP als ERP-System wickelt Versand über Dienstleister, hier UPS ab UPS bietet Verfolgung der Lieferung über Web- Schnittstelle Daten im ERP (z.b. Auftrag) und beim Dienstleister müssen abgeglichen werden Verschiedene Lösungswege 2

Separate Clients SAP GUI SAP Browser Spezieller Client für jede Anwendung Abgleich erfolgt manuell (copy-paste,...) Probleme: Effizienz, Konsistenz usw. UPS 3

Spezieller Client Client SAP Client Client Client Spezieller Client für diese Anwendung UPS integriert die Daten Probleme: Aufwand Für jede mögliche Anwendung muss neuer Client entwickelt werden (und installiert, gewartet,...) 4

Integration SAP-GUI SAP UPS Kopplung zwischen den (Server-) Systemen SAP greift auf Daten aus Fremdsystem zu Problem: Programmierung (auf Server) nötig Wie kommunizieren die verschiedenen Systeme? 5

Middleware Techniken zur Kopplung von Systemen Selbst gebastelt (Text, TCP/IP sockets, FTP,...) RPC (Remote Procedure Call) CORBA (Common Object Request Broker Architecture) COM+ (Common Object Model,.NET) RMI (Remote Method Invocation) XML-RPC SOAP (Simple Object Access Protocol) Web Services usw. 6

RMI Remote Method Invocation 7

Wir haben Komponenten auf einem Rechner Komp1 Komp2 8

Wir wollen zwei Rechner Komp1 Komp2 TCP/IP aber wie? 9

allgemein K1 Proxy Proxy K2 TCP/IP Client spricht nicht mit dem Server, sondern mit (Proxy-) Objekt, das die gleiche Schnittstelle hat wie das Server-Objekt. Für K2 sieht es aus, als ob ein Aufruf vom Proxy kommt --> K1 und K2 müssen nicht modifiziert werden (außer Verbindungsaufbau) Proxy kümmert sich um Kommunikation 10

Proxy überträgt Parameter (Objekte) übers Netz Serialisierung kümmert sich um Probleme wie: Verbindungsabbruch Übertragungsfehler Verschlüsselung verschiedene Transportmechanismen möglich Datenkonvertierung (hier nicht nötig, da alles Java) vgl. CORBA wird generiert: muß nicht programmiert werden 11

Vorgehen Schnittstelle definieren Java Interface keine eigene Sprache (vgl. CORBA) Schnittstelle implementieren (Server) Proxy erzeugen Wie finden Clients das Server-Objekt? registry Server muß angemeldet werden Beispiel: komplexe Berechnung 12

Schnittstelle import java.rmi.*; public interface Rechner extends Remote { public int compute(int par) throws RemoteException; } interface, keine Klasse muß public sein erweitert Remote jede Methode kann RemoteException werfen (Fehler auf der anderen Seite) 13

Implementierung import java.rmi.*; import java.rmi.server.*; public class RechnerImpl extends UnicastRemoteObject implements Rechner { // Default-Konstruktor muss implementiert werden // (kann RemoreException werfen public RechnerImpl() throws RemoteException { } public int compute(int par) throws RemoteException { return par+1; } } 14

Proxy erzeugen $> rmic RechnerImpl $> ls Rechner.class Rechner.java RechnerImpl.class RechnerImpl.java RechnerImpl_Skel.class RechnerImpl_Stub.class *_Stub ist der Proxy auf Client-Seite *_Skel ist der Dispatcher auf Server-Seite Quellcode behalten mit rmic -keep 15

Dateien K1 Proxy Proxy K2 RMI RechnerClient RechnerImpl_Stub RechnerImpl_Skel RechnerImpl 16

Anmerkung: IDL #include "orb.idl" #ifndef Rechner #define Rechner interface Rechner { long compute( in long arg0 ); }; #pragma ID Rechner "RMI:Rechner:0000000000000000" #endif rmic -idl Rechner erzeugt (CORBA-) IDL RMI kann über IIOP (Internet Inter Orb Protocol) aufgerufen werden 17

Registry+Server starten mit: rmiregistry Standard-Port: 1099 dann: Server registrieren: import java.rmi.*; import java.rmi.server.*; public class RechnerServer { public static void main(string args[]) { try { // Naming.bind() bindet nur einmal, sonst Fehler // Naming.rebind() ersetzt ggf. Bindung Naming.rebind("rmi://localhost/Rechner",new RechnerImpl()); } catch (Exception e) { e.printstacktrace(); } } } 18

Client holt sich die Referenz zum Remote-Objekt von der registry und los gehts import java.rmi.*; public class RechnerClient { public static void main(string args[]) { try { Rechner r = (Rechner) Naming.lookup("rmi://localhost/Rechner"); int ergebnis = r.compute(3); System.out.println(ergebnis); } catch (Exception e) {e.printstacktrace(); } } } et voila 19

Web services in 21 Minuten 20

Wir haben... K1 Proxy Proxy K2 RMI 21

Probleme RMI ist Java-spezifisch CORBA nicht, aber komplex komplexe Programmierung Kommunikation durch Firewalls RMI z.b. Port 1099 (normal zu) konkurrierende Standards 22

Idee Browser Webserver Servlet- Engine Servlet Servlet Servlet Servlet Browser schickt Anfrage (mit Parametern) an Servlet und kriegt generierte Antwort; wenn Browser = Client (-Programm) Engine = ORB Servlet = Server (Objekt) HTTP- = Funktionsparameter Parameter dann RPC 23

Schwierigkeiten Parameter nicht typisiert Ergebnis nicht strukturiert Statuscode + irgendwas (z.b. Text) keine (standardisierte) Fehlerbehandlung Lösung. Anfrage + Antwort als XML XML-RPC SOAP 24

SOAP Frage: <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <SOAP-ENV:Body> <ns1:getbestand xmlns:ns1="http://www.tillh.de/"> <ArtikelNr xsi:type="xsd:string">4711</artikelnr> </ns1:getbestand> </SOAP-ENV:Body> </SOAP-ENV:Envelope> und Antwort <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <SOAP-ENV:Body> <ns1:getbestandresponse xmlns:ns1="http://www.tillh.de/"> <result xsi:type="xsd:int">127</result> </ns1:getbestandresponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 25

wie? unabhängig von Plattform Programmiersprache Transport-Protokoll (HTTP, SMTP,...) trotzdem mühsam (von Hand) zu programmieren verschiedene Tools für Client und Server hier: apache axis 26

Server public class StoreService { public int getbestand(string ProductID) { Bestand b = new Bestand(); // rechnen... return 42; } } als.jws Datei im axis webapps-verzeichnis speichern Now for step 2... hm, wait a minute. You're done [axis User guide: http://ws.apache.org/axis/java/user-guide.html] 27

Client mal einfacher: require 'soap/rpc/driver' proxy = SOAP::RPC::Driver.new( "http://localhost:8080/axis/storeservice.jws", "http://localhost:8080/axis/storeservice.jws") proxy.add_method('getbestand', 'ID') puts "verfuegbar: #{proxy.getbestand("2")}" (ruby) 28

Client contd. mal komplizierter: public class getbestand { public static void main(string[] args) throws Exception { try { String ProductID = "2"; URL endpoint = new URL("http://localhost:8080/axis/StoreService.jws"); Service s = new Service(); Call c = (Call) s.createcall(); c.settargetendpointaddress(endpoint); c.setoperationname("getbestand"); Object[] params = new Object[] {ProductID}; Integer bestand = (Integer) c.invoke(params); System.out.println("Bestand fuer Produkt " + ProductID + ": " + bestand); } catch (Exception e) { e.printstacktrace(); } } } (Java) 29

Web services Web Services Security 56 UsernameToken Profile 15 X.509 Certificate Token Profile 16 Policy Language 13 Trust Language 41 Secure Conversation Language 17 Web Services Federation Language 28 WS-Federation: Active Requestor Profile 14 WS-Federation: Passive Requestor Profile 13 Kerberos Binding 17 Reliable Messaging 21 Coordination 16 Atomic Transaction 10 Business Activity Framework 13 WSDL 1.1 32 Policy Framework 15 Policy Attachment 10 Policy Assertions Language 9 Dynamic Discovery 22 Metadata Exchange 23 SOAP 1.2 Primer 39 SOAP 1.2 Messaging Framework 47 SOAP 1.2 Adjuncts 25 Addressing 15 MTOM 13 Enumeration 27 Eventing 21 Transfer 17 SOAP-over-UDP 7 Web Services for Management 23 BPEL4WS 74 Devices Profile 24 WS-I Basic Profile 50 The Internet RFC 791 (IP) 45 RFC 793 (TCP) 84 RFC 1034 (DNS) 55 RFC 1738 (URL) 25 RFC 1939 (POP3) 23 RFC 2616 (HTTP) 176 RFC 2821 (SMTP) 79 RFC 2822 (IMF) 51 some core standards with page count [http://www.tbray.org/ongoing/when/200x/2004/09/21/ws-research] 30

Einschub: REST Representational State Transfer Architecture HTTP Webserver Resourcen Client Darstellung der Resource, z.b. HTML-Darstellung eines Datensatzes in DB (nicht () der Datensatz selbst) Darstellungen der Ressourcen (üblicherweise XML) werden bewegt/manipuliert (verschiedene HTTP-Methoden ) Beispiel: GET /warenkorb/4711 31

HTTP-Methoden GET: Darstellung der Resource lesen POST: Resource ändern PUT: Resource erzeugen DELETE: Resource löschen HEAD: Metadaten lesen Idee: Server hat Resourcen, die über URI identifiziert werden. Funktion durch HTTP-Methode. Interaktion ist stateless (Skalierbarkeit ) 32

Objekte als Resourcen [http://www.oio.de/public/xml/rest-webservices.htm] 33

Beispiel: google calendar 34

mit API CalendarService myservice = new CalendarService("tillh-webcal-1"); myservice.setusercredentials("haenisch@ba-heidenheim.de", "geheim"); new EventFeed().declareExtensions(myService.getExtensionProfile()); EventFeed myfeed = myservice.getfeed(feedurl, EventFeed.class); EventEntry calentry = null; if (myfeed.getentries().size() > 0) { for (int n = 0; n < myfeed.getentries().size(); n++) { calentry = (EventEntry) myfeed.getentries().get(n); System.out.println("calEntry.getTitle().getPlainText()); } } } 35

Beispiel rails rails stellt Resourcen mit REST als default-schnittstelle zur Verfügung 36

Beispiel: strongloop (Node.js) 37

Beispiel: strongloop http://strongloop.com/wp-content/uploads/2013/12/strongloop-dec-5-loopback-webinar.pdf 38

Warum? http://strongloop.com/wp-content/uploads/2013/12/strongloop-dec-5-loopback-webinar.pdf 39