1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter...

23
1 10.4 JMS - Java Message Service st Schnittstelle zu Implementierungen verschiedener Anbieter z.B. IBM MQSeries) st sehr liberal bezüglich der Semantik dieser Implementierung nterstützt sowohl Nachrichten-Stil als auch Ereignis-Stil ( Paket javax.jms API http:// java.sun.com / products / jms /javadoc-102a Spez. http://java.sun.com/products/jms/docs. Terminologie: Nachrichten: point-to-point via Queues/Schlangen Ereignisse: publish/subscribe via Topics/Themen Quelle und Senke heißen hier producer/consumer

Transcript of 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter...

Page 1: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

1

10.4 JMS - Java Message Service

ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries)

ist sehr liberal bezüglich der Semantik dieser Implementierungen

unterstützt sowohl Nachrichten-Stil als auch Ereignis-Stil

( Paket javax.jms API http://java.sun.com/products/jms/javadoc-102a Spez. http://java.sun.com/products/jms/docs.html )

JMS-Terminologie:

Nachrichten: point-to-point via Queues/Schlangen

Ereignisse: publish/subscribe via Topics/Themen

Quelle und Senke heißen hier producer/consumer

Page 2: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 2

Bestandteile einer Nachricht/Ereignismeldung:

Kopf (header), enthält Adresse (destination),Lieferart (delivery mode)Kennung (message ID)Einlieferungszeit (timestamp)Korrelationskennung (correlation ID)Antwortadresse (replyTo)Wiederholungsanzeige (redelivered)Nachrichtentyp (type)Löschzeitpunkt (expiration)Priorität (priority)

Eigenschaften (properties), d.h. Name/Wert-Paare mit Wertenprimitiver Typen oder String

Rumpf (body):

Page 3: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 3

Rumpf (body), bestimmt den Nachrichten-Typ:

StreamMessage Folge von primitiven WertenMapMessage Name/Wert-Paare mit primitiven WertenTextMessage Typ String (XML!)ObjectMessage serialisiertes Java-Objekt

BytesMessage Byte-Folge

StreamMessage,.. erweitern die Schnittstelle javax.jms.Message

(diese enthält 45 Operationen, hauptsächlich getters und setters)

Page 4: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 4

10.4.1 Sitzungen und Verbindungen

Nachrichten (messages) sind Objekte, die vom Sender

nach ihrer Erzeugung mit Inhalt gefüllt werden

Quellen und Senken sind Objekte, die bei ihrer Erzeugung

an eine bestimmte Queue (bzw. Topic) gebunden werden

und Operationen send bzw. receive für das

Senden bzw. Empfangen von Nachrichten anbieten

(Empfangen im Push Mode ist ebenfalls möglich)

Page 5: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 5

Sitzung (session) ist der obligatorisch bereitzustellende

Kontext für Quellen bzw. Senken – diese werden

grundsätzlich mit Bezug auf ein bestimmtes

Sitzungsobjekt erzeugt; eine Sitzung fungiert als

Fabrikobjekt für Quellen, Senken und Nachrichten.

Ein Sitzungsobjekt und die darüber erzeugten Objekte

werden i.d.R. von einem Thread benutzt. Wenn im Push Mode empfangen wird, werden alle Senken der Sitzung von

einem Thread bedient. Für nebenläufiges Senden/Empfangen sollten zwei getrennte Sitzungen verwendet werden.

Außerdem fungiert die Sitzung als Transaktionskontext

(und hat noch weitere Funktionen).

Page 6: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 6

Verbindung (connection) zum JMS muss hergestellt werden,

bevor – auf deren Basis – Sitzungen eröffnet werden

können. Beim Herstellen der Verbindung authentisiert

sich der Klient. Typischerweise hat der Dienst keinen

lokalen Repräsentanten, weshalb eine Verbindung i.d.R.

durch eine TCP-Verbindung realisiert wird.

Die Verbindung fungiert als Fabrik für Sitzungen.

Ein Verbindungsobjekt wird wiederum über eine

Verbindungsfabrik erzeugt. Diese stellt gleichsam den

„Anker“ des ganzen Messaging-Systems dar und wird über

das JNDI (Java Naming and Directory Interface) erhalten.

Page 7: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 7

:InitialContext :ConnectionFactory :Connection :Session

new

lookup

createConnection new createSession

new

createTextMessage

createProducer

start

Page 8: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 8

import javax.naming.*; // providing Context, // InitialContext, ......

import javax.jms.*; // providing Message, // ConnectionFactory, ...

.....

Context context = new InitialContext(); ConnectionFactory factory = (ConnectionFactory)context.lookup("JMSFactory");

Connection connection = factory.createConnection(); Session session = connection.createSession(

false, Session.AUTO_ACKNOWLEDGE); ................... // create producers/consumersconnection.start();

.....keine Transaktionen gewünscht

erst danach werden Nachrichten zugestellt

Page 9: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 9

10.4.2 Schlangen (Queues)

Anwendungsbeispiel:

Quelle generiert „zu erledigende Aufträge“ und legt

entsprechende Text-Nachrichten in einer Schlange ab,

die unter dem Namen „Assignments“ verzeichnet ist.

Queue tasks = (Queue)context.lookup(„Assignments");

TextMessage message = session.createTextMessage();message.setText("Do this and that ...");

MessageProducer producer = session.createProducer(tasks);producer.send(message);

Page 10: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 10

Senke nimmt Aufträge aus dieser Schlange im Pull Mode entgegen:

Queue tasks = (Queue)context.lookup("Assignments");

MessageConsumer consumer = session.createConsumer(tasks);

TextMessage message = (TextMessage)consumer.receive(); // oder für zeitlich begrenztes Warten: receive(3000);

String task = message.getText();

MessageProducer MessageConsumerQueue

(vgl. CORBA Event Service (10.3.1))

send receive

(Push) (Pull)

Page 11: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 11

10.4.3 Themen (Topics)

Anwendungsbeispiel:

Quelle generiert Ereignismeldungen zum Thema

„Sicherheitswarnungen“, das unter dem Namen

„Security Alerts“ verzeichnet ist.

Topic alerts = (Topic)context.lookup("Security Alerts");

TextMessage message = session.createTextMessage();message.setText("New security hole discovered in ...");

MessageProducer producer = session.createProducer(alerts);producer.send(message);

Page 12: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 12

Senke nimmt Meldungen im Push Mode entgegen. Dafür wird ein

Event Handler mit Schnittstelle MessageListener benötigt:

import javax.jms.*;

public class AlertListener implements MessageListener {public void onMessage(Message message) {

String alert = ((TextMessage)message).getText(); ..... // take action! }

}

Damit:

MessageConsumer consumer = session.createConsumer(alerts);consumer.setMessageListener(new AlertListener);connection.start();

Page 13: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 13

Dauerhaftes Abonnement (durable subscription)

überdauert das Stoppen und Wiederstarten einer Verbindung, d.h. wenn man später erneut an einem Thema interessiert ist,erhält man alle in der Zwischenzeit eingetroffenen Meldungen

MessageConsumer consumer = session.createDurableSubscriber(alerts, "mySub"); // not createConsumerconsumer.setMessageListener(new AlertListener);connection.start();.....connection.stop();.....consumer = session.createDurableSubscriber(alerts, "mySub"); // resumes subscription to topicconsumer.setMessageListener(new AlertListener);connection.start();

Page 14: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 14

10.4.4 Filterung

benutzt die Properties einer Meldung.

Anwendungsbeispiel: Meldungen enthalten ein „Betrifft“

in Gestalt einer String Property

TextMessage message = session.createTextMessage();message.setText("Beware of virus 4711 .....");message.setStringProperty("Subject", "Viruses")

Page 15: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 15

Empfänger sei nur an Viren-Meldungen interessiert:

entsprechenden Selektor (selector) verwenden !

String selector = "(Subject = 'Viruses')";

MessageConsumer consumer = session.createConsumer(alerts, selector);consumer.setMessageListener(new AlertListener);

connection.start();

Page 16: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 16

Syntax von Selektoren:

Teil der Syntax von SQL92 für bedingte Ausdrücke

Page 17: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 17

10.5 SIENA

Scalable Internet Event Notification Architecture

(Carzaniga et al. 1998-…)

Weltumspannender Ereignisdienst

Leistungsfähige Filterung

Raffiniert verteilte Architektur und Filterung

Page 18: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 18

Ereignismeldung (notification) = Menge typbehafteter Attribute,

z.B. string class = finance/exchanges/stock time date = Mar 4 11:43:37 MST 1998string exchange = NYSEstring symbol = DISfloat prior = 105.25float change = -4float earn = 2.04

10.5.1 Filtersprache

Page 19: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 19

Filter (filter) = Menge von Aussagen über einzelne Attribute, hauptsächlich mit Vergleichsoperatoren,

z.B. string class >* finance/exchangesstring exchange = NYSEstring symbol = DISfloat change < 0

Muster (pattern) = Folge von Filtern

(zur Filterung einer Gruppe von Meldungen)

Page 20: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 20

Page 21: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 21

Senken und Quellen von Ereignismeldungen

registrieren beim Ereignisdienst Abonnement (subscription) bzw.

Ankündigung (advertisement)

(jeweils in Gestalt eines Filters)

die die interessierenden bzw. gemeldeten Ereignisse charakterisieren

Ziel: gezielte, effiziente Vermittlung zwischen Quellen und Senken

Beachte: Eine Quelle ist für eine Senke nur dann relevant, wenn

die durch Ankündigung bzw. Abonnement erfassten

Mengen nicht disjunkt sind.

10.5.2 Überdeckungsrelationen

Page 22: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 22

Def.: Ein Abonnement erfasst/überdeckt (covers) eine Meldung,

wenn für jede Aussage des Filters

ein passendes Attribut der Meldung existiert

z.B. string what = alarm string what = alarminteger level > 3 integer level = 5integer level < 7

! Nicht string what = alarm string what = alarminteger level > 3 time date = 02:40:03

Page 23: 1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

vs10.4 23

Def.: Eine Meldung entspricht (is covered by) einer Ankündigung,

wenn jedes Attribut der Meldungzu einer Aussage des Filters passt

z.B. string what = alarm string what = login

string what = login string user = carzanigastring user any

Ankündigung Meldung