Arten von Broker Architekturen Details zur Remote Method Invocation

Werbung
Arten von Broker Architekturen
• Common Object Request Broker Architecture (CORBA)
– Entworfen von Object Management Group (OMG)
– Für Datenaustausch und Kommunikation zwischen
Komponenten verschiedener Programmiersprachen
• Remote Method Invocation (RMI)
– Java Standard zur Kommunikation von verteilten Objekten
– Spezifisch für Java, es können nur Java-Objekte miteinander
kommunizieren und ausgetauscht werden
• Distributed Component Object Model (DCOM)
– Microsoft-eigener Standard für verteilte Kommunikation
– Grundsätzlich auch zwischen verschiedenen Sprachen
• Heute: Webservice-Standards (WSDL, SOAP, XML,…)
http://www.dke.univie.ac.at
Details zur Remote Method Invocation
Client
Server Application
Stub
Skeleton
Remote Reference
layer
Remote Reference
layer
Transport Layer
Network
Transport Layer
Stub = abstrakter „Rumpf“, entspricht in Java einem Interface
Skeleton = realisiert zum Stub passende Implementierung, in Java Implementierung des StubInterfaces + serverspezifische Eigenschaften
http://www.dke.univie.ac.at
1
Beispiel zur Illustration
Name: String
Produktnr: Integer
Menge: Integer
Kunde
„Formular für
Anfrage“
Produkt:
P
d kt String
St i
Menge: Integer
Remote Reference
layer
Transport Layer
Lieferant
Formular +
Verarbeitung
GET /index.html?produkt=TV
HTTP/1.1 Host:
www.lieferant.com
Network
Source address: 131.130.1.78
Destination address: 120.1.89.3
Length: 1278
Checksum: FDAE64B12
Data: …..
Remote Reference
layer
Transport Layer
http://www.dke.univie.ac.at
Details Web Service Kommunikation
Client
Stub
Remote Reference
layer
Transport Layer
Server Application
WSDL
Endpoints,
Operations, Messages
SOAP / HTTP
Head, Body
Network
Skeleton
Remote Reference
layer
Transport Layer
http://www.dke.univie.ac.at
2
Serialisierung / Deserialisierung
• Serialisierung = Umwandlung eines Objekts in einen
Datenstrom
• Voraussetzung für die Übertragung von Objekten ist
ihre Serialisierbarkeit
• Manche Objekte können nicht serialisiert werden, da
sie beispielsweise lokal gebundene Referenzen
beinhalten, zB eine konkrete Verbindung zu einer
Datenbank
• Serialisierbare Klassen sollten möglichst klein
gehalten werden um Overhead bei der
Kommunikation zu vermeiden
http://www.dke.univie.ac.at
XML-Serialisierung in Java mit JAXB I
http://java.sun.com/webservices/docs/1.6/tutorial/doc/
http://www.dke.univie.ac.at
3
XML-Serialisierung in Java mit JAXB II
http://java.sun.com/webservices/docs/1.6/tutorial/doc/
http://www.dke.univie.ac.at
Ein einfacher Web Service in Java mit
Apache CXF
Benötigte Software (OpenSource):
–
–
–
–
–
Java EE SDK
Apache Tomcat
Apache CXF (inkl. Springframework)
Eclipse Entwicklungsumgebung
WebTools Plugins für Eclipse
Implementierung von:
–
–
–
–
Interface (Stub)
Klassen, die das Interface implementieren
Konfiguration der Deployment Deskriptoren
Konfiguration von CXF
http://www.dke.univie.ac.at
4
Eclipse Übersicht
Another
Tool
Eclipse Platform
Workbench
Java
Development
Tools
(JDT)
Help
JFace
SWT
Plug-in
Development
Environment
(PDE)
Workspace
Team
Your
Tool
Debug
Their
Tool
Platform Runtime
Eclipse Project
http://www.dke.univie.ac.at
Beispiel-Interface
package demo.spring;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(name = "HelloWorld", targetNamespace = "http://spring.demo/")
@SOAPBinding(use = SOAPBinding.Use.LITERAL, parameterStyle =
SOAPBinding.ParameterStyle.WRAPPED)
public interface HelloWorld {
@WebMethod(operationName = "sayHi", action = "")
@WebResult(name = "return", targetNamespace = "")
public Dataobject sayHi(
@WebParam(name = "arg0", targetNamespace = "")
String arg0);
}
http://www.dke.univie.ac.at
5
Beispiel-Implementierung des Interface
package demo.spring;
import javax.jws.WebService;
@WebService(endpointInterface = "demo.spring.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public Dataobject sayHi(String text) {
System.out.println(text);
return new Dataobject(text, "Name");
}
}
http://www.dke.univie.ac.at
Beispiel-Konfiguration web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
g p
p
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
http://www.dke.univie.ac.at
6
Beispiel-Konfiguration beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf
xmlns:jaxws=
http://cxf.apache.org/jaxws
apache org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="helloWorld"
implementor="demo.spring.HelloWorldImpl"
address="/HelloWorld" />
</beans>
http://www.dke.univie.ac.at
Ergebnis WSDL I
<wsdl:definitions name="HelloWorldImplService"
targetNamespace="http://spring.demo/">
<wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified"
targetNamespace "http://spring demo/">
targetNamespace="http://spring.demo/">
<xs:complexType name="dataobject">
<xs:sequence>
<xs:element minOccurs="0" name="meaning" type="xs:string"/>
<xs:element minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="sayHi" type="sayHi"/>
<xs:complexType name="sayHi">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="sayHiResponse" type="sayHiResponse"/>
<xs:complexType name="sayHiResponse">
http://www.dke.univie.ac.at
7
Ergebnis WSDL II
<xs:sequence>
<xs:element minOccurs="0" name="return" type="dataobject"/>
</xs:sequence>
</xs:complexType>
/
l T
</xs:schema>
</wsdl:types>
<wsdl:message name="sayHiResponse">
<wsdl:part element="tns:sayHiResponse" name="result">
</wsdl:part>
</wsdl:message>
<wsdl:message name="sayHi">
<wsdl:part element="tns:sayHi" name="parameters">
</wsdl:part>
</wsdl:message>
http://www.dke.univie.ac.at
Ergebnis WSDL III
<wsdl:portType name="HelloWorld">
<wsdl:operation name="sayHi">
<wsdl:input message="tns:sayHi" name="sayHi">
</wsdl:input>
<wsdl:output message="tns:sayHiResponse" name="sayHiResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>−
<wsdl:binding name="HelloWorldImplServiceSoapBinding"
type="tns:HelloWorld">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
http://www.dke.univie.ac.at
8
Ergebnis WSDL IV
<wsdl:operation name="sayHi">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="sayHi">
<soap:body
b d use="literal"/>
"lit l"/
</wsdl:input>
<wsdl:output name="sayHiResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>−
<wsdl:service name="HelloWorldImplService">
<wsdl:port binding="tns:HelloWorldImplServiceSoapBinding"
name="HelloWorldImplPort">
<soap:address location="http://localhost:8080/DKEWebService/HelloWorld"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
http://www.dke.univie.ac.at
Testen des Web Service über Eclipse
Web Services Explorer
http://www.dke.univie.ac.at
9
Alternative Web Services über EJB mit
JBOSS Application Server
Benötigte Software (OpenSource):
–
–
–
–
Java EE SDK
JBOSS Application Server (inkl. EJB Container)
Eclipse Entwicklungsumgebung
JBOSS Plugin für Eclipse
Implementierung von:
– Interface (Stub)
– Klassen, die das Interface implementieren
– Konfiguration der Deployment Deskriptoren
http://www.dke.univie.ac.at
Beispiel Implementierung
package at.ac.dke;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
javax jws soap SOAPBinding;
@WebService(name = "TestWs", targetNamespace = "http://hugo.dke.ac.at")
@SOAPBinding
(
style = SOAPBinding.Style.DOCUMENT,
use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.WRAPPED
)
public class TestWs
{
@WebMethod
public String greet( @WebParam(name = "name")
String name )
{
return "Hello" + name;
}}
http://www.dke.univie.ac.at
10
Beispiel-Konfiguration web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java
xmlns=
http://java.sun.com/xml/ns/javaee
sun com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestWS</display-name>
<servlet>
<servlet-name>TestWs</servlet-name>
<servlet-class>at.ac.dke.TestWs</servlet-class>
<load-on-startup>1</load-on-startup>
<load
on startup>1</load on startup>
</servlet>
<servlet-mapping>
<servlet-name>TestWs</servlet-name>
<url-pattern>/TestWs</url-pattern>
</servlet-mapping>
http://www.dke.univie.ac.at
Ergebnis
http://www.dke.univie.ac.at
11
.NET Framework
http://www.dke.univie.ac.at
Open Source .NET Entwicklung
http://www.mono-project.com/
http://www.dke.univie.ac.at
12
Einige Vergleiche zwischen .NET und
J2EE
http://www.dke.univie.ac.at
Programmiersprachen
• J2EE baut auf einer einzigen Sprache auf: Java
• .NET ist von Grund auf mehrsprachig konstruiert
– C# als neue (wichtigste) Sprache
– VB.NET (eigtl. Visual Basic 7), Managed C++, JScript.NET
– weitere Sprachen von Microsoft oder von Drittanbietern:
• J#, PERL, APL, COBOL, Eiffel, Fortran, Haskell
etc.
• Die Herausforderung ist nicht der Bytecode Compiler
(da gibt auch für JavaVM verschiedene Sprachen)
sondern die Interoperabilität auf Klassenebene
während der Laufzeit (ohne Linking).
http://www.dke.univie.ac.at
13
Plattformneutralität
• .NET = Windows
– Rotor - eine Betaversion der C# und JScript.NET Compilers
und der CLI (Common Language Infrastructure) für Open
BSD Unix von Microsoft als Shared Source.
– Projekt Mono: Versuch gesamtes .NET Framework als Open
Source für Linux zu implementieren. http://www.gomono.com/
• J2EE = gegeben
http://www.dke.univie.ac.at
Glossar
•
•
•
•
•
•
•
IIS – Internet Information Server: Der Webserver von Microsoft
CLR – Common Language Runtime: gemeinsame Laufzeitumgebung für alle .NET
Anwendungen.
CG – Garbage Collection: Sie sorgt dafür, das Speicher, der von einem Programm
angefordert und benutzt wurde automatisch wieder freigegeben wird.
wird Vorsicht beim
Programmieren: Die GC bestimmt, wann Speicher physikalisch freigegeben wird. Deshalb
sollten „teure“ Resourcen - wie bspw. Datenbankverbindungen - explizit innerhalb einer
eigens dafür geschriebenen Methode „entsorgt“ werden. Diese Methode sollte immer dann
aufgerufen werden, wenn die Resourcen unmittelbar freigegeben werden sollen.
MSIL – Microsoft Intermediate Language
JIT – Just in time
Managed Code: In der .NET Plattform wird kein nativer Code mehr erzeugt. Stattdessen
generieren Compiler unter .NET eine Zwischensprache (MSIL), die dann unter Aufsicht der
CLR bei Bedarf (JIT) in nativen Code übersetzt und ausgeführt wird. Deshalb wird der von
den Compilern erzeugte Code auch Managed Code genannt.
.config-Datei: Jede .NET Anwendung kann mit benutzerspezifischen Einstellungen
versehen werden. Diese Einstellungen können in einer XML-Datei abgelegt sein, die sich im
Verzeichnis der Anwendung befinden muss. Die Datei muss außerdem die Endung .config
haben und den gleichen Namen wie die Anwendung besitzen (z.B.: C:\Test.exe und
C:\Test.exe.config).
Quelle: Microsoft
http://www.dke.univie.ac.at
14
Herunterladen