WS 08/09 Blatt 3 – 03.12.2008 - Institut für Architektur von

Werbung
Prof. Dr . Frank Leymann / Thorsten Scheibler
Institut für Architektur von Anwendungssystemen
Universität Stuttgart
Übungen
„Message-basierte Anwendungen“
WS 08/09
Blatt 3 – 03.12.2008
Aufgabe 3.1: Guaranteed Messaging und Transactions
Einige Quality of Services (QoS) können auch auf Session-Ebene (TopicSession,
QueueSession) gesetzt werden. Dazu gehört u.a. die Persistenz von Nachrichten,
„nicht dauerhafte“ bzw. „dauerhafte“ Abonnenten und einiges mehr. Ein
dauerhafter Abonnent erhält alle Nachrichten, auch wenn zwischenzeitlich die
Verbindung zum JMS Server abbricht. Welches Problem kann auftreten, wenn ein
Herausgeber eine nicht-persistente Nachricht versendet und der JMS Server
ausfällt, bevor er die Nachricht an den Abonnenten weiterleiten kann? In diesem
Zusammenhang ist es wichtig, dass Sie sich mit den unterschiedlichen
„Acknowledge Modes“ 1 vertraut machen (siehe Abbildung 5.1).
Abbildung 3.1: Normaler Ablauf mit persistenten Nachrichten
Warum kann der oben erwähnte Fehlerfall mit Hilfe von persistenten Nachrichten
nicht auftreten?
Eine Anwendung versendet eine Gruppe von Nachrichten. Erst nachdem die
letzte Nachricht versendet ist, soll der Empfänger damit beginnen die
Nachrichten zu verarbeiten- die bereits gesendeten Nachrichten hat er auch
empfangen, also lokal zwischen gespeichert. Die Kommunikation soll nicht in
einer JMS-Transaktion durchgeführt werden. Überlegen Sie sich, wie der
Empfänger erkennt, dass die Gruppe der Nachrichten komplett ist und er mit der
eigentlichen Verarbeitung beginnen kann.
1
Nachzulesen in der JMS-Spezifikation: http://java.sun.com/products/jms/docs.html
oder im Buch: JMS API Tutorial and Reference von Mark Happner et.al.
Seite 1 von 3
Message-basierte Anwendungen
WS 08/09
Übungsblatt 3
03.12.2008
Mehrere Nachrichten können auch in einer JMS-Transaktion ausgeführt werden
(Beispiel siehe Abbildung 5.2). Ein Request-Reply Schema, also eine SendenOperation gefolgt von einer Empfangen-Operation darf allerdings nicht
zusammen gruppiert werden. Warum ist dies der Fall?
Abbildung 3.2: Normaler Ablauf mit persistenten Nachrichten
Aufgabe 3.2: Entwicklung eines Publish-Subscribe Verbindung
Die in den vorangegangenen Aufgaben entwickelten Grundlagen werden nun in
einem praktischen Beispiel umgesetzt. Gegeben sei ein Börsensystem, das in
unregelmäßigen Abständen Börsenkurse einzelner Firmen per JMS auf einem
Server veröffentlicht (PubSub).
Entwickeln Sie zunächst die StockServer-Klasse, die sich mit einem Topic auf
einem Nachrichtensystem verbindet, im Anschluss JMS-Nachrichten generiert
und diese an das Topic veröffentlicht. Verwenden Sie als Nachrichtentyp eine
MapMessage.
Als Gegenpart wird die StockSubscriber-Klasse entwickelt. Diese Klasse schreibt
sich auf einem Topic ein und lauscht als MessageListener solange, bis eine neue
Nachricht eintrifft. Aus dieser Nachricht liest sie den Firmenname und den
Aktienkurs, um entsprechend des Inhaltes reagieren zu können (siehe nächste
Aufgabe). Die StockSubscriber-Klasse soll auch in einem Fehlerfall alle
versendeten Nachrichten des StockServers irgendwann erhalten. Erläutern Sie
außerdem, welche Einstellungen bzw. Konfigurationen am JMS Provider (JMS
Server) vorzunehmen sind.
Aufgabe 3.3: Entwicklung einer Point-to-Point Verbindung
Nachdem die StockSubscriber-Klasse Nachrichten entgegengenommen hat,
wertet Sie diese aus. Geht dabei der Kurs einer Aktie bis zu einem bestimmten
Wert zurück (100-90 €), versucht die Klasse Aktien der Firma zu verkaufen.
Erreicht der Wert einen bestimmten Minimalbetrag (10-1 €), werden die Aktien
gekauft.
Um dies zu simulieren wird die Klasse Sender implementiert. Sie verbindet sich
mit zwei Queues mit den Namen Buy_Queue und Sell_Queue (Point-to-Point),
erzeugt eine TextMessage mit Kundennummer, Anzahl der Aktien und Wert und
sendet diese an die entsprechende Queue.
Erläutern Sie außerdem, welche Einstellungen bzw. Konfigurationen am JMS
Provider (JMS Server) vorzunehmen sind.
Aufgabe 3.4: Entwicklung der Queue-Empfänger
Damit die Verkauf- bzw. Kaufnachrichten auch verarbeitet werden, wird ein
SellAgent bzw. BuyAgent entwickelt. Diese verbinden sich mit der jeweiligen
Queue, nehmen die Nachrichten entgegen und geben Sie auf der Konsole aus.
Stellen Sie den entsprechenden Quellcode auf.
Seite 2 von 3
Message-basierte Anwendungen
WS 08/09
Übungsblatt 3
03.12.2008
Aufgabe 3.5: Zusammenführen aller Teil zu einer Anwendung
Wenn Sie alle Teile implementiert haben, können Sie die komplette Anwendung
zusammenfügen. Dabei ergibt sich folgendes Bild:
Publish-Subscribe
Messaging
Point – to – Point
Messaging (Queues)
Messaging
Server
Messaging
Server
Subscriber
„DTAG“
Stock Quote
Stock Server
„DCAG“
Stock Quote
„MAN“
Stock Quote
DAX Topic
ck
Sto tes
o
Qu
Dax
Subscriber
Buy Queue
Buy
Message
Buy Agent
Sell Queue
Sell
Message
Sell Agent
Buy
Message
Buy or Sell
Sender
Sell
Message
Zur Ausführung müssen Sie zunächst ihren JMS-Provider konfigurieren. Im
Anschluss starten Sie den StockServer, der in unregelmäßigen Abständen
Aktienkurse unterschiedlicher Firmen veröffentlicht. Starten Sie im Anschluss den
StockSubscriber, der nach Erhalt von Nachrichten den Sender anstößt, der
wiederum Kaufen- oder Verkaufen-Nachrichten in die entsprechende Queue
stellt. Ein BuyAgent bzw. SellAgent empfängt diese Nachrichten und gibt eine
Meldung auf der Konsole aus.
Anmerkung zur Programmierung:
Falls sie nicht die Möglichkeit haben die Java Klassen am Computer zu
entwickeln, dürfen Sie eine Art Pseudo-Code schreiben. Verwenden Sie aber die
Methoden der Java- und JMS-Bibliotheken.
Seite 3 von 3
Herunterladen