Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S....

38
Messaging mit Java (JMS) Pr¨ asentation der Seminararbeit im FWP Aktuelle Technologien verteilter Java-Anwendungen Hochschule f¨ ur angewandte Wissenschaften M¨ unchen Fakult¨ at f¨ ur Informatik und Mathematik Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 1 / 35

Transcript of Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S....

Page 1: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Messaging mit Java (JMS)Prasentation der Seminararbeit im FWP

Aktuelle Technologien verteilter Java-Anwendungen

Hochschule fur angewandte Wissenschaften MunchenFakultat fur Informatik und Mathematik

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 1 / 35

Page 2: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

”Interesting applications rarely live in isolation.“

Hohpe G., Woolf B.Enterprise Integration Patterns, S. xxix

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35

Page 3: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Gliederung

1 Grundlagen der Java Message Service APIMessaging Provider und ClientsNachrichtenziele und KommunikationsartenNachrichten

2 Einsatz von JMS in Java EE AnwendungenAdministrative ObjekteJMS ContextNachrichtenSenden von NachrichtenSynchrones Empfangen von NachrichtenAsynchrones Empfangen von Nachrichten

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 3 / 35

Page 4: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Messaging Provider und Clients

indirekte Kommunikation uber Zusatzsoftware (Messaging Provider) → hohe Entkopplungder Anwendungen

Zugriff von Java mittels Java Message Service (JMS) API

spezifizierte Schnittstellen

implementiert durch Messaging Provider → technologie-unabhangiggenutzt von Java Anwendung → provider-unabhangig

Client: Send and Forget Prinzip → asynchrone Ubertragung

Messaging Provider: Store and Forward Prinzip → garantierte Ubertragung

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 4 / 35

Page 5: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichtenziele und Kommunikationsarten

Nachrichtenziele und Kommunikationsarten

Adressierung der Nachrichten an Nachrichtenziele (anstatt an konkreten Empfanger)

Produzenten/Konsumenten zum Senden/Abrufen von Nachrichten an/aus einem Ziel

pro Ziel beliebig viele Produzenten und Konsumenten moglich

zwei Zielarten → unterschiedliche Kommunikationsarten

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 5 / 35

Page 6: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichtenziele und Kommunikationsarten

Point-to-Point Kommunikation mit Queues

Einreihung neuer Nachrichten in Warteschlange (Queue)

Aufstauen der Nachrichten bis Abruf→ Abrufrate (Auslastung des Empfangers) wahlbar→ garantierte Abarbeitung

Entnahme jeder Nachricht durch einen Konsumenten moglich→ Lastverteilung→ Kommunikation von einem Produzenten zu genau einem Konsumenten(Point-to-Point)

Empfang in Abwesenheit gesendeter Nachrichten moglich→ robust gegenuber Ausfall von Anwendungen→ zeitliche Entkopplung sendender und empfangender Anwendungen

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 6 / 35

Page 7: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichtenziele und Kommunikationsarten

Publish-Subscribe Kommunikation mit Topics

Sammlung von Nachrichten eines bestimmten Themas (Topic)

Veroffentlichung von Nachrichten (Publishing)

Erstellung von Abonnements (Subscription) durch interessierte Empfanger

Abonnement vergleichbar mit Queue

Zustellung neuer Nachrichten als Kopie an Abonnements

keine Speicherung im Topic

keine Zustellung an nach dem Senden erstellte Abonnements

Abruf von Nachrichten uber Konsumenten aus Subscription→ Kommunikation von einem Produzenten zu beliebig vielen (auch keinem)Konsumenten (Publish-Subscribe)

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 7 / 35

Page 8: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichten

Nachrichten

atomare Ubertragungseinheit

Ubergabe an/Empfang vom Messaging ProviderUbertragung an Ziel

Verpackung von Nutzdaten

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 8 / 35

Page 9: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichten

Aufbau

Header

Properties

Body

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 9 / 35

Page 10: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichten

Aufbau

Header

Metadaten fur Identifikation, Routing und Zustellung

Auswertung durch Messaging Provider und Anwendungen

Schlussel-Wert-Paare (nur festgelegte Schlussel zulassig)

großteils automatisches Setzen beim Senden und Zustellen→ nicht uberschreibbar

z.B. JMSMessageId, JMSDestination

Properties

Body

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 9 / 35

Page 11: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichten

Aufbau

Header

Properties

anwendungs- und Provider-spezifische Metadaten

Schlussel-Wert-Paare (beliebige Schlussel)

Auswertung insb. zur Filterung von Nachrichten

Provider-spezifische Properties→ Konfiguration von Zusatzoptionen

z.B. CustomerId, ExpressShipping

Body

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 9 / 35

Page 12: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Grundlagen der Java Message Service API Nachrichten

Aufbau

Header

Properties

Body

Nutzdaten

optional, leerer Body moglich

z.B. JSON oder XML

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 9 / 35

Page 13: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen

Bestandteile der JMS API

[aus The JEE Tutorial, S. 7 Abb. 45-5]

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 10 / 35

Page 14: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Administrative Objekte

Administrative Objekte

ConnectionFactoryAufbau von Verbindungen zum JMS Provider

Queue, Topic, DestinationReprasentation von Nachrichtenzielen

administrative Konfiguration als Ressourcen im Applikationsserver

Einbindung von deployten Anwendungen zur Laufzeit

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 11 / 35

Page 15: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Administrative Objekte

Konfiguration im Applikationsserveram Beispiel von Payara 4.1

asadmin create-jms-resource --restype javax.jms.Queue--property Name=physical_queue_ajms/QueueA

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 12 / 35

Page 16: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Administrative Objekte

Einbindung via Ressource Injection

Einbindung von JMS Ressourcen innerhalb des Web- und EJB-ContainersJMS = Integrationstechnik → nur in EJB-Container!

@Resource(lookup = "jms/QueueA")private Queue queueA;

@Resource(lookup = "jms/TopicA")private Topic topicA;

@Resource(lookup = "jms/TopicA")private Destination topicA;

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 13 / 35

Page 17: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen JMS Context

JMS Context

Kapselung von Verbindung und Transaktionskontext,selbst kein administratives Objekt

Ausgangspunkt fur das Erstellen von Objekten der JMS API

Bereitstellung eines CDI-Producers fur JMSContext durch JMS→ CDI @Inject moglich

Festlegen der ConnectionFactory uber Qualifier-Annotation@JMSConnectionFactory

@Injectprivate JMSContext jmsContext;

@Inject@JMSConnectionFactory("jms/MyConnectionFactory")private JMSContext myJmsContext;

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 14 / 35

Page 18: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Nachrichten

Nachrichtentypen, Erstellung und Zugriff auf Body

Interface Message

verschiedene Datenformats des Bodies (Nachrichtentypen)→ abgeleitete Interfaces, z.B.:

TextMessageStreamMessage

Erstellung uber Factory-Methoden des JMSContexts

createMessage()createTextMessage(String)createStreamMessage()

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 15 / 35

Page 19: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Nachrichten

TextMessage

Message toTextMessage(Order order) {String json = toJson(order);return jmsContext.createTextMessage(json);

}

Order toOrder(TextMessage message) {String json = message.getText();return fromJson(json);

}

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 16 / 35

Page 20: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Nachrichten

Message

statischer Typ fur alle empfangenen Nachrichten→ Typecast auf dynamischen Typ

Order toOrder(Message message) {if (message instanceof TextMessage) {

return toOrder((TextMessage) message);} else if (message instanceof ObjectMessage) {

return toOrder((ObjectMessage) message);}...

}

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 17 / 35

Page 21: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Nachrichten

Message

Kurzschreibweisen zum Entpacken des Bodies mit getBody(Class<T>)-Methode

Order toOrder(Message message) {if (message instanceof TextMessage) {

String json = message.getBody(String.class);return fromJson(json);

} else if (message instanceof ObjectMessage) {return message.getBody(Order.class);

}...

}

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 18 / 35

Page 22: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Senden von Nachrichten

Produzenten

Interface JMSProducer zum Senden von Nachrichten

Erstellung uber Factory-Methode createProducer() des JMSContexts

Builder-Pattern → Verkettung von Aufrufen

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 19 / 35

Page 23: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Senden von Nachrichten

Builder-Pattern der Produzenten

Producer konfigurieren

setProperty(String,int)

clearProperties()

Nachricht senden

send(Destination, Message)

send(Destination, String)

send(Destination, Serializable)

send(Destination, Map<String,Object>)

send(Destination, byte[])

Blockierung des aufrufenden Threads bis erfolgterUbergabe der Nachricht an Messaging Provider→ Ubergabe synchron, Ubertragung asynchron

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 20 / 35

Page 24: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Senden von Nachrichten

@Statelessclass CustomerNotifier {@Inject private JMSContext jmsContext;@Resource(...) private Destination shippingDocuments;@Resource(...) private Destination orderEvents;

public void orderShipped(long orderId, int trackingId, ShippingLabelshippingLabel) {

Message event = jmsContext.createMessage();jmsContext.createProducer().setProperty("document", "SHIPPING_LABEL").send(shippingDocuments, toJson(shippingLabel)).clearProperties().setProperty("event", "ORDER_SHIPPED").setProperty("orderId", orderId).setProperty("trackingId", trackingId).send(orderEvents, event);

}}

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 21 / 35

Page 25: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Beispielanwendung: Online Shop

Shop Anwendung

Aufgeben/Generieren von BestellungenAblage in Queue

Versand Anwendung

Empfangen aus QueueAnforderung von Versandetiketten

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 22 / 35

Page 26: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Realitatsnahe Umgebung

Docker Container mit je einer Payara Domain und Anwendung

Master ContainerBetreiben des mitgelieferter JMS Providers OpenMQ im EMBEDDED-Modus

Slave ContainerVerwenden des JMS Providers im REMOTE-Modus

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 23 / 35

Page 27: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Konsumenten

Interface JMSConsumer zum synchronen Empfang von Nachrichten

Erstellung uber Factory-Methoden des JMSContexts

Konsumenten implementieren AutoCloseable→ try-with-resources-Block

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 24 / 35

Page 28: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Empfangen von Nachrichten

Methoden zum synchronen Nachrichtenabruf

Message receive()Message receive(long timeout)Blockieren des aufrufenden Threads bis zur Verfugbarkeit einer neuen Nachrichtoptional: Timeout

Message receiveNoWait()Sofortiges Zuruckkehren des Aufrufs mit neuer Nachricht oder null

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 25 / 35

Page 29: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Kurzschreibweise zum Empfangen und Entpacken

T receiveBody(Class<T>)

T receiveBody(Class<T>, long timeout)

T receiveBodyNoWait(Class<T>)

T = Typ des Bodies (z.B. TextMessage → String.class)

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 26 / 35

Page 30: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Konsumenten fur Queues

createConsumer(Destination)

Bildung an Ziel

Lastverteilung durch parallele Konsumentenz.B. Anforderung von Versandetiketten fur neue Bestellungen

keine Ausfuhrung verschiedener Verarbeitungsschritte moglichz.B. entweder Versandvorbereitung oder Rechnungserstellung fur eine Bestellung

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 27 / 35

Page 31: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Konsumenten fur TopicNicht-dauerhafte Abonnements

createConsumer(Destination)

Ausfuhrung verschiedener Verarbeitungsschritte moglichz.B. Versandvorbereitung und Rechnungserstellung

Erstellen eines Abonnements nur uber Konsument moglich

Lebensdauer Abonnement = Lebensdauer Konsument (nicht dauerhaft)→ keine Ausfallsicherheit z.B. Verlust von Bestellungen

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 28 / 35

Page 32: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Konsumenten fur TopicDauerhafte Abonnements

createDurableConsumer(Topic, String subscriptionName)

Vergabe eines eindeutigen Abonnementnamens

Lebensdauer Abonnement > Lebensdauer KonsumentLoschung mit unsubscribe(String)

Wiederaufnahme des Abonnements uber Abonnementname durch NachfolgendeKonsumenten moglich→ Ausfallsicherheit (z.B. bei Ausfall der Versand-Anwendung

keine gleichzeitige Verwendung eines Abonnements moglich→ keine Lastverteilung

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 29 / 35

Page 33: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Konsumenten fur TopicGeteilte nicht-dauerhafte Abonnements

createSharedConsumer(Topic, String subscriptionName)

gemeinsame Verwendung von Abonnements durch mehrere Konsumenten()Teilnahme uber gleichen Abonnementnamen)→ Lastverteilung moglich

keine Ausfallsicherheit

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 30 / 35

Page 34: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Synchrones Empfangen von Nachrichten

Konsumenten fur TopicGeteilte dauerhafte Abonnements

createSharedDurableConsumer(Topic, String subscriptionName)

Kombination von geteiltem und dauerhaften Abonnement

Lastverteilung

Ausfallsicherheit

WICHTIG: Erstmalige Erstellung des dauerhaftes Abonnements via Konsument notig!↔ Queue

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 31 / 35

Page 35: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Asynchrones Empfangen von Nachrichten

Message Driven Beans

EJBs + @MessageDriven + implements MessageListener

Steuerung der Instanz-Anzahl durch EJB-Container→ fur Topics immer geteilte Abonnements (Abonnementname von Container vergeben)

Asynchroner Nachrichtenempfang neuer Nachrichten uber CallbackonMessage(Message)

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 32 / 35

Page 36: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Asynchrones Empfangen von Nachrichten

Message Driven Beans

Konfiguration uber @ActivationConfigProperty-Annotations

@MessageDriven(activationConfig = {@ActivationConfigProperty(

propertyName = "destinationLookup",propertyValue = "jms/NewOrders"

),@ActivationConfigProperty(

propertyName = "destinationType",propertyValue = "javax.jms.Topic"

)})

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 33 / 35

Page 37: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Einsatz von JMS in Java EE Anwendungen Asynchrones Empfangen von Nachrichten

Message Driven Beans

Abonnementname erforderlich fur dauerhafte Abonnements

@MessageDriven(activationConfig = {...@ActivationConfigProperty(

propertyName = "subscriptionDurability",propertyValue = "Durable"

),@ActivationConfigProperty(

propertyName = "subscriptionName",propertyValue = "createBillForNewOrder"

)})

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 34 / 35

Page 38: Messaging mit Java (JMS) - tschutschu · Hohpe G., Woolf B. Enterprise Integration Patterns, S. xxix Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 2 / 35. Gliederung 1 Grundlagen

Literatur

1 N. Deakin, M. Hapner, R. Burridge u. a. JSR-343 Java Message Service (JMS) 2.0 (Specification”).Oracle America, Inc., 2013.URL: http://download.oracle.com/otn-pub/jcp/jms-2 0-fr-eval-spec/JMS20.pdf(besucht am 07.05.2017).

2 GlassFish Server Open Source Edition Administration Guide, Relea- se 4.0. Oracle, 2013. Kap. 18Administering the Java Message Service (JMS).URL: https://glassfish.java.net/docs/4.0/administration-guide.pdf (besucht am29.04.2017).

3 G. Hohpe und B. Woolf. Enterprise Integration Patterns: Designing, Building, and Deploying MessagingSolutions. Boston: Addison-Wesley, 2004.

4 E. Jendrock, R. Cervera-Navarro, I. Evans u. a. Java Platform, Enterprise Edition The Java EE Tutorial,Release 7. Oracle, 2014. Kap. 45 Java Message Service Concepts.URL: https://docs.oracle.com/javaee/7/JEETT.pdf (besucht am 07.04.2017).

Alle verwendeten eingetragenen Waren- und Dienstleistungsmarken sind Eigentum ihrer jeweiligen

Rechteinhaber.

Marcel Binder Messaging mit Java (JMS) 9.Juni 2017 35 / 35