www.wikidata.de-de.nina.az
Jakarta Messaging fruher Java Message Service JMS API ist eine Programmierschnittstelle API fur die Ansteuerung einer Message Oriented Middleware MOM zum Senden und Empfangen von Nachrichten aus einem Client heraus der in der Programmiersprache Java geschrieben ist JMS hat das Ziel lose gekoppelte verlassliche und asynchrone Kommunikation zwischen den Komponenten einer verteilten Anwendung zu ermoglichen 1 JMS ist Teil der Jakarta EE die Spezifikation des Dienstes sowie die zugehorige API wurden durch den Java Community Process im Rahmen des JSR 914 genormt Die aktuelle Version von JMS ist die Version 2 0 vom 21 Mai 2013 und ist Bestandteil der Java Enterprise Edition 7 0 2 Fur die Anwendung braucht man einen Provider der die API umsetzt und somit den Dienst bereitstellt Dafur gibt es sowohl kommerzielle Produkte als auch Open Source Projekte Inhaltsverzeichnis 1 Funktionsweise 2 Implementierung 3 JMS Provider 4 Weblinks 5 EinzelnachweiseFunktionsweise BearbeitenMessaging ist eine Moglichkeit der lose gekoppelten und verteilten Kommunikation in Form von zwischen Softwarekomponenten verschickten Nachrichten Messaging versucht die sonst enge Kopplung anderer Kommunikationsmoglichkeiten wie TCP Kommunikation uber Sockets CORBA oder RMI durch die Einfuhrung einer zwischen den Clients gelegenen Komponente aufzubrechen Damit wird sichergestellt dass die Clients kein naheres Wissen uber die Gegenstelle n ihrer Kommunikation haben mussen was sowohl den Einsatzbereich erhoht als auch die Wartung und Wiederverwendung der Komponenten erleichtert JMS und der durch diese angesteuerte Dienst unterstutzen zwei unterschiedliche Ansatze zum Versenden von Nachrichten zum einen die Nachrichtenwarteschlange englisch queue fur sogenannte point to point Verbindungen und zum anderen ein Anmelde Versendesystem engl topic fur Publish Subscribe Kommunikation Bei der Warteschlange sendet der Sender an eine Queue an der ein Empfanger hangt Ist kein Empfanger verfugbar kann die Nachricht optional gespeichert werden und potentielle Empfanger konnen sie jederzeit spater abholen Fur den Fall nur eines Empfangers kann man dies am besten mit einem Paketdienst vergleichen Jede Sendung hat genau einen Empfanger Ist dieser nicht zu Hause kann er sich die Sendung zu einem beliebigen Zeitpunkt spater abholen Bei mehreren Empfangern wird bei der Zustellung der Nachrichten sichergestellt dass jede eingereihte Nachricht exakt einmal zugeteilt wird Hierdurch lasst sich Load Balancing realisieren bei dem Empfanger beliebig hinzugefugt und entfernt werden konnen Bei dem Anmelde Versendesystem werden die Nachrichten an ein Topic geschickt auf das eine beliebige Anzahl von Empfangern hort Wird die Nachricht nicht konsumiert weil kein Empfanger sich an das Topic angemeldet hat dann ist dies unerheblich Man kann dies am besten mit einem Fernsehsender vergleichen Broadcasting Entweder man schaltet den Fernseher ein und sieht die Nachricht oder man lasst den Fernseher aus und sieht die Nachricht nicht Wahlweise konnen die Nachrichten auch zwischengespeichert werden durable subscription Implementierung BearbeitenUm Nachrichten senden bzw empfangen zu konnen muss zunachst eine Queue bzw ein Topic bestimmt werden uber die die Kommunikation lauft Dies wird ublicherweise mittels eines JNDI Lookups gelost Context ctx new InitialContext QueueConnectionFactory factory QueueConnectionFactory ctx lookup QueueConnectionFactory Queue myQueue Queue ctx lookup MyQueue Anschliessend wird eine Connection erzeugt auf der eine Session gestartet wird Darauf wird dann je nachdem ob gesendet oder empfangen wird ein Sender bzw ein Receiver geoffnet uber den Messages gesendet bzw empfangen werden konnen QueueConnection connection factory createQueueConnection QueueSession session connection createQueueSession false Session AUTO ACKNOWLEDGE QueueSender sender session createSender myQueue TextMessage message session createTextMessage sender send message bzw QueueReceiver receiver session createReceiver myQueue connection start Message message receiver receive Das Senden und Empfangen via Topic erfolgt ahnlich zum Senden und Empfangen via Queue Es werden einerseits andere Klassen verwendet TopicSession TopicConnection TopicPublisher TopicSubscriber Topic andererseits holt man beim Empfang einer Nachricht via Topic diese nicht mittels receiver receive ab sondern implementiert einen MessageListener onMessage Message EventHandler der die Nachrichten via Message Events bekommt Die unterschiedlichen uber Queues und Topics versendbaren Nachrichtentypen sind folgende Message Nachricht ohne Inhalt Body StreamMessage Nachricht mit einem Stream von Java Primitiven MapMessage Nachricht mit einer Map von Java Objekten TextMessage Nachricht mit einem String z B fur XML Messages ObjectMessage Nachricht mit einem serialisierten Java Objekt BytesMessage Nachricht mit einem Stream von BytesJMS Provider BearbeitenUm JMS nutzen zu konnen wird ein JMS Provider benotigt der die Topics Queues und Sessions verwaltet Die folgende Liste fuhrt JMS Provider auf Sie nennt sowohl kommerzielle als auch freie Software erhebt aber keinen Anspruch auf Vollstandigkeit Nicht aufgefuhrt sind jedoch solche JMS Provider die ausschliesslich als Bestandteil eines Java EE Containers Java Anwendungsservers angeboten werden Eine Ubersicht von Java EE Containern ist separat verfugbar In der untenstehenden Tabelle bedeuten die in der Spalte Betriebsmodi enthaltenen Angaben folgendes eigenstandig Der JMS Provider lauft als eigenstandiger Prozess stand alone und damit separat von den JMS Client Prozessen Die Kommunikation mit den Clients erfolgt beispielsweise uber TCP IP oder Unix Domain Sockets eingebettet Der JMS Provider lauft in derselben JVM embedded colocated wie einer der JMS Clients Ein Vorteil ist die schnellere Nachrichtenubertragung Moderne JMS Provider erlauben beide Betriebsmodi Name Firma Lizenz Betriebsmodi URLActiveMQ Apache Open Source Apache 2 eigenstandig eingebettet apache orgFuseMQ Red Hat Open Source Apache 2 kommerzieller Support moglich eigenstandig eingebettet fusesource comApollo Apache Open Source Apache 2 apache orgFioranoMQ Fiorano kommerzielliBus MessageServer Softwired kommerziellHornetQ ehemals bekannt unter JBoss Messaging Red Hat Open Source Apache 2 eigenstandig eingebettet jboss orgJORAM OW2 Open Source LGPL eigenstandig eingebettet ow2 orgMantaRay Coridan Open Source Mozilla Public License eigenstandig eingebettetMom4j Mom4j development team Open Source LGPL eingebettetMRG Messaging Red Hat kommerziell redhat comMuleMQ MuleSoft Inc kommerziell mulesoft comOpenJMS Open Source eigenstandig eingebettet sourceforge netOpen Message Queue Sun Microsystems Open Source eigenstandig mq java netOracle Advanced Queuing OAQ Oracle kommerziell eingebettet oracle comQpid Apache Open Source Apache 2 apache orgSAP JMS SAP kommerziell eingebettet sap comSonicMQ Progress Software kommerziellSwiftMQ IIT Software Open Source Apache 2 eigenstandig swiftmq comTIBCO Enterprise Message Service TIBCO kommerziellwebMethods Broker Software AG kommerziell eigenstandig eingebettet softwareag comwebMethods Universal Messaging Software AG kommerziell eigenstandig eingebettet softwareag comWebsphere MQ IBM kommerziell eigenstandig eingebettet ibm comWSO2 Message Broker WSO2 Open Source Apache 2 eigenstandig wso2 comWeblinks BearbeitenJMS Ubersicht JMS Spezifikation JMS mit Oracle Advanced Queueing Detailliertes Tutorial mit Java Codebeispielen zum JMS mit Oracle Advanced Queuing Um dem Leser ein unnotiges Nachschlagen der Links zu ersparen sind die Links zu den JMS Providern unmittelbar in der obigen Tabelle enthalten Einzelnachweise Bearbeiten J2EE Java Message Service JMS Spec Abgerufen von https de wikipedia org w index php title Jakarta Messaging amp oldid 238486570