Einführung
Das Java Messaging System (JMS) bietet einen plattformübergreifenden Standard für die asynchrone Übertragung von
Geschäftsdaten und Ereignissen im Unternehmen. Die Übertragung findet normalerweise prozess- und maschinenübergreifend
statt. Objekte in Anwendungen, die in der Regel auf verschiedenen Maschinen laufen, kommunizieren untereinander, indem
Sie über eine durch das JMS definierte Standardmenge an Schnittstellen auf die Services der MOM (Message-oriented
Middleware) zugreifen.
JMS stellt eine Menge von Schnittstellen bereit, die den Java-Programmierer (der die Nachrichtenproduzenten und
-konsumenten implementiert) von den MOM-Providern isolieren.
Diese Inhaltsseite beschreibt die wichtigsten Konzepte und die typische Verwendung von JMS.
Nachrichten
Eine Nachricht ist ein geschlossenes Paket von Geschäftsdaten. Sie besteht aus drei Einheiten:
-
Header: Enthält die Netz-Route-Informationen und Nachrichten-IDs.
-
Eigenschaften: Enthält die Metadaten für die Nachricht. JMS legt einige Eigenschaften verbindlich fest, aber
die Anwendungsprogrammierer können eigene Eigenschaften hinzufügen.
-
Nutzdaten: Enthält die tatsächlichen Geschäftsdaten. Die Nutzdaten werden vollständig vom
Anwendungsprogrammierer gesteuert.
In JMS ist die Nachricht in ein Objekt eingebunden, das die Schnittstelle javax.jms.Message implementiert. Ein
Java-Programm kann, wie im folgenden Diagramm gezeigt, über diese Schnittstellen auf die Nachrichteneinheiten
zugreifen. Die Nutzlast kann in mehreren Variationen geliefert werden, die später erläutert werden.
Der Header enthält Eigenschaften der Nachricht, die immer enthalten sein müssen. Folgende Eigenschaften sind im
Header enthalten:
-
MessageID (Nachrichten-ID)
-
Timestamp (Zeitmarke)
-
CorrelationID (Korrelations-ID)
-
ReplyTo (Antwort an)
-
Destination (Nachrichtenziel)
-
DeliveryMode (Zustellmodus)
-
Redelivered (erneut zugestellt)
-
Type (Typ)
-
Expiration (Ablaufdatum)
-
Priority (Priorität)
Mit Hilfe der Eigenschaften können die Anwendungsprogrammierer Metadaten für die Nachricht bereitstellen. Die
Eigenschaften bestehen aus einer beliebigen Menge von Namen-Wert-Paaren.
JMS unterstützt sechs Arten von Nutzdaten:
-
Textnachrichten
-
Objektnachrichten
-
Bytenachrichten
-
Zuordnungsnachrichten
-
Datenstromnachrichten
-
Nachricht (kein Hauptteil vorhanden)
Die Arten der Nutzdaten spiegeln sich in der Klassenhierarchie wider, in der Schnittstellen die
javax.jms.Message erweitern. Im folgenden Klassendiagramm werden häufig verwendete Text-, Objekt- und
Bytenachrichten gezeigt. Textnachrichten sind im allgemeinen Träger von XML-Daten.
Nachrichtenziele
JMS definiert das Konzept eines Nachrichtenziels. Nachrichten werden an Nachrichtenziele gesendet und von
Nachrichtenzielen empfangen. Es gibt zwei Arten von Nachrichtenzielen:
Warteschlangen sind Nachrichtenziele, die verwendet werden, wenn die Nachrichten nur einen einzigen Empfänger
haben. Wenn man die Nachrichten mit dem Senden von herkömmlichen Postsendungen vergleicht, dann entsprechen die
Nachrichten den Postfächern, die einem bestimmten Empfänger gehören. Die Übertragung unter Verwendung von
Warteschlangen wird als Punkt-zu-Punkt-Übertragung bezeichnet.
Topics sind Nachrichtenziele, die verwendet werden, wenn Nachrichten von mehreren Empfängern empfangen werden
sollen und jeder Empfänger eine bestimmte Art von Nachrichten empfangen möchte. Wenn man wieder den Vergleich mit
herkömmlichen Postsendungen zugrunde legt, dann ist dies ähnlich wie das Schreiben eines Artikels für eine Zeitung -
der Artikel (die Nachricht) wird von einer beliebigen Zahl von Empfängern gelesen. Diese Modell wird häufig als
Publish/Subscribe-Modell bezeichnet.
Zustellung der Nachricht
Nachrichten können auf zwei Arten zugestellt werden:
-
Persistent
-
Nicht persistent
Die persistente Zustellung von Nachrichten beinhaltet das Speichern der Nachricht in einer Datei oder einer Datenbank.
Auf diese Weise ist eine garantierte Lieferung möglich. Die nicht persistente Zustellung verbessert die Leistung und
reduziert den Speicheraufwand, allerdings kann die Lieferung der Nachricht nicht garantiert werden. Für die meisten
Anwendungen, die JMS verwenden, wird in der Regel die persistente Zustellung gewählt.
JMS-Clients
JMS-Clients sind Java-Objekte, die JMS verwenden. Zwei Rollen sind definiert:
-
Nachrichtenproduzenten: Java-Programme, die Nachrichten erstellen und senden.
-
Nachrichtenkonsumenten: Java-Programme, die Nachrichten empfangen.
Das folgende Diagramm zeigt in einem Überblick, wie Produzent, Konsumenten und JMS-Provider zusammenarbeiten.
Ein Nachrichtenproduzent kann jede Java-Klasse sein, die Zugriff auf eine JMS-Implementierung hat. Die
Nachrichtenproduzenten erstellen und senden Nachrichten.
Ein Nachrichtenkonsument kann jede Java-Klasse sein, die Zugriff auf eine JMS-Implementierung hat. Die
Nachrichtenkonsumenten empfangen und verwalten Nachrichten.
Ein JMS-Client verwendet für den Zugriff auf JMS eine Gruppe von Schnittstellen. Die Objekte, die die
JMS-Schnittstellen implementieren, werden über eine Gruppe von Factorys erstellt. Die ursprüngliche Factory ist die
Verbindungs-Factory (ConnectionFactory). Die Verbindungs-Factory wird über JNDI ermittelt. Der JMS-Client
verwendet die Verbindungs-Factory, um Verbindungsobjekte zu erstellen. Das Verbindungsobjekt wird zum Erstellen eines
Sitzungsobjekts verwendet, das wiederum als Factory für die übrigen JMS-Objekte dient. Die folgende Abbildung zeigt die
wichtigsten Beziehungen zwischen den Factorys ohne die Details der Warteschlangen und Topics.
Verbindungs-Factorys, Verbindungen und Sitzungen können zwei Formen annehmen: eine für Warteschlangen und eine für
Topics. Das folgende Klassendiagramm zeigt die Schnittstellenhierarchie für JMS-Schlüsselkonzepte.
JMS-Provider
Ein JMS-Provider ist eine Implementierung, die die JMS-Spezifikation erfüllt. Der JMS-Provider ist zuständig für den
Empfang, das Speichern und die Zustellung von Nachrichten.
Weitere Informationen
Weitere Informationen zu JMS finden Sie auf der Website http://java.sun.com/products/jms/.
|