Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Middleware und nachrichtenorientierte Middleware • Eine Software heißt Middleware genau dann, wenn sie die Entwicklung und den Betrieb eines verteilten Systems ermöglicht und Funktionen anbietet, die über einfache Netzwerkkommunikation hinausgehen. • Eine Middleware heißt nachrichtenorientierte Middleware (MOM) genau dann, wenn die Kommunikation zwischen den beteiligten Komponenten durch den Austausch von Nachrichten über eine Zwischeninstanz erfolgt. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Vor- und Nachteile einer MOM Vorteile: Nachteile: – Kommunikation auf hohem Abstraktionsniveau – lose Kopplung zwischen einzelnen Komponenten – Entwickler können sich auf Anwendungslogik konzentrieren – nicht „out-of-the-box“ verwendbar – zusätzlicher Overhead – ungeeignet für Echtzeitsysteme – zusätzliche Lizenzkosten Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Java Message Service (JMS) • Der Java Message Service (JMS) ist eine Schnittstellenspezifikation von Sun Microsystems zum Zugriff auf nachrichtenorientierte Middleware. • JMS definiert die Syntax und Semantik beim Zugriff auf eine nachrichtenorientierte Middleware und wurde erstmals im Jahre 1998 veröffentlicht. • Die aktuelle Spezifikation stammt aus dem Jahr 2002 und trägt die Versionsnummer 1.1. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Einsatz von JMS nachrichtenorientierte Middleware API Client API • MOM ohne JMS Server • MOM mit JMS Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Server JMS JMS nachrichtenorientierte Middleware API API Client Point-to-Point (P2P) JMS-Provider Warteschlange Konsument 1 Konsument 1 Produzent Warteschlange Konsument 2 Konsument 2 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Publish/Subscribe (Pub/Sub) JMS-Provider Topic 1 Produzent 1 Topic 2 Abonnent von Topic 1 und 3 Topic 3 Produzent 2 Topic 4 Topic 5 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Abonnent von Topic 3 und 5 Verbindungsfabriken <<interface >> ConnectionFactory <<interface >> QueueConnectionFactory <<interface >> TopicConnectionFactory Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Verbindungen <<interface >> Connection <<interface >> QueueConnection <<interface >> TopicConnection Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Sitzungen <<interface >> Session <<interface >> QueueSession <<interface >> TopicSession Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtenproduzenten <<interface >> MessageProducer <<interface >> TopicPublisher <<interface >> QueueSender Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtenkonsumenten <<interface >> MessageConsumer <<interface >> QueueReceiver <<interface >> TopicSubscriber Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichten <<interface>> ObjectMessage <<interface>> Message <<interface>> BytesMessage <<interface>> MapMessage <<interface>> TextMessage <<interface>> StreamMessage Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Aufbau einer JMS-Nachricht • Nachrichtenkopf (Header) – Der Nachrichtenkopf wird zur Identifikation und zur Übertragung der Nachricht benötigt und umfasst mehrere Felder. • Nachrichteneigenschaften (Properties) – Nachrichteneigenschaften erlauben das Speichern von Zusatzinformationen zur Nachricht. • Nachrichtenrumpf (Body) – Der Nachrichtenrumpf enthält die Nutzdaten. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtentypen • BytesMessage – Übertragung einer Menge uninterpretierter Bytes • StreamMessage – Übertragung sequentiell gelesen und geschriebener Daten • MapMessage – Übertragung von Name/Wert-Paaren • TextMessage – Übertragung von Textdaten • ObjectMessage – Übertragung serialisierbarer Objekte Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Header-Felder einer Nachricht (1) • JMSCorrelationID – Abhängigkeiten zwischen Nachrichten • JMSDeliveryMode – PERSISTENT – NON_PERSISTENT • JMSDestination – Nachrichtenziel • JMSExpiration – Verfallsdatum der Nachricht • JMSMessageID – eindeutiger Bezeichner Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Header-Felder einer Nachricht (2) • JMSPriority – Priorität von 0 (niedrig) bis 10 (hoch) • JMSRedelivered – Nachricht wurde mehrfach ausgeliefert • JMSReplyTo – Ziel der Antwortnachricht festlegen • JMSTimestamp – Übergabezeit der Nachricht an den JMS-Provider • JMSType – Nachrichtentyp der Nachricht Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtenziele <<interface >> Destination <<interface >> Queue <<interface >> Topic <<interface >> TemporaryQueue <<interface >> TemporaryTopic Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Ausnahmen in JMS InvalidDestination exception JMSSecurity exception JMSException MessageNotWriteable exception MessageNotReadable exception RessourceAllocation exception Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes ECHO-Dienst mit P2P Konsument JMSEchoClient 1 4 TEMP_2 Produzent 1 JMS-Provider TEMP_1 ECHO 1 JMSEchoClient 2 2 JMSEchoServer 3 TEMP_2 Produzent 3 4 Konsument Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes DAYTIME-Dienst mit Pub/Sub JMSDaytimeSubscriber 1 JMS-Provider DAYTIME JMSDaytimeSubscriber 2 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes JMSDaytimePublisher Literatur • Ressourcen von Sun Microsystems Inc. zum Java Message Service (JMS); http://java.sun.com/products/jms • Sun Microsystems Inc.: Java Message Service Specification; http://java.sun.com/products/jms/docs.html • Sun Microsystems Inc.: Java Message Service API Tutorial; http://java.sun.com/products/jms/tutorial/index.html • Richard Monson-Haefel, David A. Chappell: Java Message Service – Creating Distributed Enterprise Applications; O'Reilly 2001 • Levent Erdogan: Java Message Service (JMS) for J2EE; New Riders Publishing 2002 • Markus Mathes: Zeitverhalten von nachrichtenorientierter Middleware und deren Einsatz in der Industrieautomation; Diplomarbeit Fachhochschule Fulda 2004 • Florian Heidinger, Markus Mathes, Helmut Dohmann: Java Messaging Service (JMS) – Einsatz in der Industrieautomation; Automatisierungstechnische Praxis (atp) Ausgabe 05/2004 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Aufgaben In „Middleware in Java“ finden Sie • Wiederholungs-, • Vertiefungs-, • Programmieraufgaben zu den vorgestellten Themen. Zur Festigung und Vertiefung des Erlernten wird eine Bearbeitung der Aufgaben empfohlen. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes