Aufgaben zur Klausur „Enterprise Application Integration“ im SS

Werbung
Aufgaben zur Klausur „Enterprise Application Integration“ im SS 2006
Aufgabe 1: Integrationstopologien
(6+12=18 Punkte)
In der Vorlesung haben Sie drei verschiedene Topologien zur Gestaltung einer
Integrationsinfrastruktur kennen gelernt.
a) Erläutern Sie die Struktur der „Hub and Spokes“ Topologie und der „Punkt zu Punkt“
Integration am Beispiel einer Integration von 4 Systemen mithilfe jeweils einer
kommentierten Grafik!
b) Stellen Sie die Eigenschaften dieser Integrationsansätze mithilfe der nachfolgenden
Tabelle stichwortartig gegenüber!
„Hub and Spokes“ Topologie
„Punkt zu Punkt“ Integration
Implementierungsaufwand
Wartungsaufwand
Standardisierungsgrad der
Schnittstellen
Performanz
Skalierbarkeit
Flexibilität
Aufgabe 2: Vergleich von MOM und BPEL
(7 Punkte)
Vergleichen Sie MOM und BPEL wie in der Vorlesung vorgestellt stichwortartig und
tabellarisch anhand von sieben Aspekten!
Aufgabe 3: Java Message Service
(16+4=20 Punkte)
a) Gegeben seien drei Message-Driven Beans, die über ein Topic Nachrichten mit aktuellen
Aktienkursen entgegen nehmen und in eine dahinter liegende Datenbankeintragen. Die
Nachricht ist vom Typ ObjectMessage und enthält ein Objekt der Klasse
StockInformation. Als Antwort wird eine Nachricht vom Typ TextMessage
zurückgesendet, in der der „Erfolg“ oder „Misserfolg“ des Eintragens des Kurses in die
Datenbank als String enthalten ist („Der Aktienkurs wurde erfolgreich/nicht erfolgreich
eingetragen“).
Vervollständigen Sie das Gerüst der vorliegenden Java-Klasse
StockClient.java an den grau markierten Stellen um die Logik zum
Versenden der ausgehenden Nachricht und zum Empfang der drei Antwortnachrichten!
Sie können davon ausgehen, dass die Antworten auf jeden Fall innerhalb von 10
Sekunden eintreffen.
1/7
StockInformation.Java:
import java.io.Serializable;
public class Stockinformation implements Serializable {
private String stockID;
private float stockPrice;
public StockInformation (String stockID, float stockPrice) {
this stockID = stockID;
this stockPrice = stockPrice;
}
public String getStockID
return this.stockID;
}
public float getStockPrice
return this.stockPrice;
}
}
StockClient.Java:
import java.util.*;
import javax.jms.*;
import javax.naming.*;
public class StockClient {
private InitialContext ctx;
private TopicConnectionFactory tcf;
private TopicConnection tc;
private TopicSession ts;
_ hier Ergänzung einfügen
public StockClient () throws NamingException, JMSException {
ctx = new InitialContext ();
tcf = (TopicConnectionFactory) ctx
,lookup (“ConnectionFactory“);
tc = tcf.createTopicConnection();
ts = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE)
tc.start();
_ hier Ergänzung einfügen
}
public String [] sendStockMessage (StockInformation stockInformation)
throws JMSException {
String [] result = new String [3];
TextMessage[] answerMessages = new TextMessage [3];
2/7
_ hier Ergänzung einfügen
return result;
}
public void close [] throws NamingException, JMSException {
this.tc.close ();
this.ctx.close();
}
public static void main String[] arge) {
try {
StockClient stockClient = new StockClient();
StockInformation stockInformation =
new StockInformation {“EAI AG“, 1742.23f};
String[] results = stockClient.sendStockMessage (stockInformation);
for (String result : results)
System.out.printIn(result);
stockClient.close ();
} catch (Exception e) {
e.printStackTrace ();
}
}
}
Ein Wetterdienst bietet seine Wettervorhersagen mithilfe des JMS-Nachrichtendienstes an.
Die Abnehmer der Vorhersagen sollen wahlweise alle versendeten Vorhersagen oder nur die
für einen bestimmten Ort empfangen können.
Stellen Sie dar, welche Art von Destination (Queue oder Topic) für diese Situation am
geeignetsten ist! Begründen Sie Ihre Antwort stichpunktartig und präzise!
3/7
Aufgabe 4:
(18+9= 27 Punkte)
a) Gegeben sei ein Web Service, der eine Operation returnRevenue zur Verfügung
stellt, die die Erlöse aller Monate für ein Jahr zurückgibt und dabei eine Jahreszahl als
Parameter erwartet. Die Beschreibung des Web Services im WSDL-Format finden Sie
weiter unten unter dem Punkt RevByYear?wsdl.
Implementieren Sie einen Prozess in der Business Process Execution Language (BPEL),
der unter Verwendung des gerade beschriebenen Web Services die aufsummierten Erlöse
für ein Jahr ausgibt! Berücksichtigen Sie dabei die vorgegebenen Dokumente
RevenueByYear .wsdl, RevenueByYear.pdd und wsdlCatalog.xml, und
ergänzen Sie RevenueByYear.Bpel!
Hinweis: Fehlerbehandlung
vernachlässigen!
und
Logging
können
Sie
bei
dieser
Aufgabe
RevByYear?wsdl
<xml version=“1.0“ encoding=”UTF-8“?>
<wsdl:definitions targetNamespace=“http://revenues“
xmlns:apachesoap=“http://xml.apache.org/xml-soap“ xmlns:impl=“http://revenues“
xmlns:intf=“http://revenues“ xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/“
xmlns:wsdlsoap=“http://schemas.xmlsoap.org/wsdl/soap/“
xmlns:xsd=“http://www.w3.org/2001/XMLSchema“>
<wsdl:types>
<schema elementFormDefault=“qualified“ targetNamespace=“http://revenues“
xmlns=“http://www.w3.org/2001/XMLSchema“>
<element name=“returnRevenue“>
<complexType><sequence>
<element name=“in0“ type=“xsd:int“/>
</sequence></complexType>
</element>
<element name=„returnRevenueResponse“>
<complexType><sequence>
<element maxOccurs=”unbounded“ name=”returnRevenueReturn“ type=”xsd:int“/>
</sequence></complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name=“returnRevenueResponse“>
<wsdl:part element=”impl:returnRevenueResponse“ name=”parameters“/>
</wsdl:message>
<wsdl:message name=“returnRevenueRequest“
<wsdl:part element=“impl:returnRevenue“ name=“parameters“/>
</wsdl:message>
<wsdl:portType name=“RevenuesByYear“>
<wsdl:operation name=“returnRevenue“>
<wsdl:input message=“impl:returnRevenueRequest” name=“returnRevenueRequest“/>
<wsdl:output message=”impl:returnRevenueResponse“
name=“returnRevenueResponse“/>
</wsdl:operation>
</wsdl:portType>
4/7
<wsdl:binding name=“RevByYearSoapBinding“ type=“impl:RevenuesByYear“>
<wsdlsoap:binding style=“document“
transport=“http://schemas.xmlsoap.org/soap/http“/>
<wsdl:operation name=“returnRevenue“>
<wsdlsoap:operation soapAction=““/>
<wsdl:input name=“returnRevenueRequest“>
<wsdlsoap:body use=“literal“/>
</wsdl:input>
<wsdl:output name=“returnRevenueResponse“:
<wsdlsoap:body use=“literal“/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name=“RevenuesByYearService“>
<wsdl:port binding=“impl:RevByYearSoapBinding“ name=“RevByYear“>
<wsdlsoap:address location=“http://localhost:8080/axis/services/RevByYear“/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
RevenueByYear.wsdl:
<?xml version=“1.0“ encoding=“utf-8“?>
<wsdl:definitions targetNamespace=“http://revenue.by.year“>
xmlns:tns=“http://revenue.by.year“
xmlns:rby=“http://revenues“
xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/“
xmlns:plnk=“http://schemas.xmlsoap.org/ws/2003/05/partner-link/“
xmlns:xsd=“http://www.w3.org/2001/XMLSchema>“
<wsdl:types>
<xsd:schema targetNamespace=“http://revenue.by.year“>
<xsd:element name=“year“ type=“xsd:int“/>
<xsd:element name=“revenue“ type=“xsd:int“/>
<xsd:schema>
</wsdl:types>
<wsdl:message name=“RevenueRequest“>
<wsdl:part name=“parameter“ element=“tns:year“/>
</wsdl:message>
<wsdl:message name=“RevenueReponse“>
<wsdl:part name=“parameter“ element=“tns:revenue“/>
</wsdl:message>
<wsdl:portType name=“RevenueByYear“>
<wsdl:operation name=“getRevByYear“/>
<wsdl:input message=“tns:RevenueRequest“/>
<wsdl:output message=“tns:RevenueResponse“/>
</wsdl:operation>
</wsdl:portType>
<plnk:partnerLinkType name=“RevenueByYearPLT“/>
<plnk:role> name=“Caller“>
<plnk:portType name=“tns:RevenueByYear“/>
<plnk:role>
</plnk:partnerLinkType>
5/7
<plnk:partnerLinkType name = „RevenuesByYearPLT“>
<plnk:role name =“Receiver“>
<plnk:portType name=“rby:RevenuesByYear“/>
</plnk:role>
</plnk:partnerlinkType>
</wsdl:definitions>
RevenueByYear.pdd:
<?xml version=“1.0“ encoding=“UTF-8“?>
<process location=“bpel/RevenueByYear.bpel“
name =“tns:RevenueByYearProcess“
xmlns=“http://schemas.active-endpoints.com/pdd/2004/09/pdd.xsd“
xmlns:tns=“http://revenue.by.year“
xmlns:wsa=“http://schemas.xmlsoap.org/ws/2003/03/addressing“>
<partnerLinks>
<partnerLink name=“RevenueByYearPL“>
<myRole allowedRoles=““ binding=“MSG“ service=“RevenueByYearService“/>
</partnerLink>
<partnerLink name=“RevenuesByYearPL“>
<partnerRole endpointReference=“static“ invokeHandler=“default:Service“>
<wsa:EndpointReference xmlns:rby=“http://revenues“>
<wsa:Address>http://localhost:8080/axis/services/RevByYear</wsa:Address>
<wsa:ServiceName PortName=“RevByYear“> rby:RevenuesByYearService
</wsa:EndpointReference>
</partnerRole>
</partnerLink>
</partnerLinks>
<wsdlReferences>
<wsdl location=“wsdl/RevenueByYear.wsdl“ namespace=“http://revenue.by.year“/>
<wsdl location=“http://localhost:8080/axis/services/RevByYear?wsdl“
namespace=“http://revenues“/>
<wsdlReferences>
<process>
wsdlCatalog.xml:
<?xml version „1.0“ encoding=“UTF-3“?>
<wsdlCatalog>
<wsdlEntry location=“wsdl/RevenueByYear.wsdl“
classpath=“wsdl/RevenueByYear.wsdl“/>
</wsdlCatalog>
RevenueByYear.bpel:
<?xml version=“1.0“ encoding=“utf-3“?>
<process name=“RevenueByYearProcess“ targetNamespace=“http://revenue.by.year“
xmlns:tns=“http://revenue.by.year xmlns:rby=http://revenues“
xmlns=“http://schemas.xmlsoap.org/ws/2003/03/business-process/“
xmlns:xsd=“http://www.w3.org/2001/XMLSchema“
xmlns:bpws=“http://schemas.xmlsoap.org/ws/2003/03/business-process/“
6/7
xmlns:soapenc=“http://schemas.xmlsoap.org/soap/encoding/>“
<partnerLinks>
<partnerLink name=“RevenueByYearPL“ partnerLinkType=“tns:RevenueByYearPLT“
myRole=“Caller“/>
<partnerLink name=“RevenuesByYearPL“ partnerLinkType=“tns:RevenuesByYearPLT“
partnerRole=“Receiver“/>
</partnerLinks>
_ hier Ergänzung einfügen
b) Beschreiben Sie den Aufruf der Operation returnRevenue des Web Service aus
Aufgabenteil a) aus einem Java-Client anhand einer Grafik. Zeichnen Sie sämtliche beteiligte
Klassen in das Diagramm ein und kennzeichnen Sie alle Ihnen bekannten Protokolle, die bei
der Kommunikation verwendet werden. Zeigen Sie zudem auf, an welchen Stellen
Nachrichten an den Server und die Antworten an den Client in andere Formate konvertiert
werden müssen! Gehen Sie davon aus, dass sowohl der Client als auch der Server mit Hilfe
des Apache Axis-Frameworks in der Version 1.3 realisiert wurden!
7/7
Herunterladen