Direkte Verwendung von JMS und Messaging programmieren

Ihre Unternehmensanwendungen können JMS-Programmierschnittstellen (Java™ Message Service) direkt verwenden, um Messaging-Services und -Methoden bereitzustellen, die Geschäftslogik implementieren.

Informationen zu diesem Vorgang

WebSphere Application Server unterstützt asynchrones Messaging als eine Methode der Kommunikation, die auf den JMS-Programmierschnittstellen basiert. Mit JMS können Unternehmensanwendungen Nachrichten über JMS-Ziele (Warteschlangen oder Topics) asynchron mit anderen JMS-Clients austauschen. Eine Unternehmensanwendung kann explizit Nachrichten an einem Ziel abfragen.

Wenn Sie sich gegen die Verwendung von JNDI für das Abrufen von Konfigurationsdaten, z. B. für Verbindungsfactorys oder Ziele, für Ihren Messaging-Provider entscheiden, können Sie stattdessen eine von Ihrem Messaging-Provider bereitgestellte Anwendungsprogrammierschnittstelle verwenden, um diese Konfigurationsdaten über das Programm anzugeben.

Wenn Sie Nachrichten zwischen JMS-Anwendungen und traditionellen IBM MQ-Anwendungen übertragen möchten, müssen Sie berücksichtigen, wie die JMS-Nachrichtenstruktur einer IBM MQ-Nachricht zugeordnet wird. Dazu gehören Szenarien, in denen Sie IBM MQ verwenden möchten, um Nachrichten zu bearbeiten, die zwischen zwei JMS-Anwendungen übertragen werden, z. B. über IBM MQ als Nachrichtenbroker.

Standardmäßig verwenden JMS-Nachrichten, die in IBM MQ-Warteschlangen gehalten werden, einen MQRFH2-Header, um einige der JMS-Nachrichtenheaderinformationen zu speichern. Viele traditionelle IBM MQ-Anwendungen können Nachrichten mit diesen Headern nicht verarbeiten und setzen eigene Merkmalheader voraus, z. B. MQWIH für IBM MQ-Workflow-Anwendungen. Weitere Informationen zur Zuordnung der JMS-Nachrichtenstruktur zu einer IBM MQ-Nachricht finden Sie im Abschnitt Mapping JMS messages im Information Center von IBM MQ.

Vorgehensweise

Beispiel

Im folgenden Beispiel wird gezeigt, wie Sie eine Ressource für den Standard-Messaging-Provider über das Programm konfigurieren.

In diesem Beispiel wird eine JMS-Verbindung zu einem Service Integration Bus über die Anwendungsprogrammierschnittstelle im Paket com.ibm.websphere.sib erstellt. Dies ist eine Alternative zur Verwendung von JNDI für die Suche administrativ konfigurierter Verbindungsfactorys. Nachdem die Verbindung hergestellt wurde, liest das Beispielprogramm Eingabezeilen aus der Konsole und sendet diese als JMS-Textnachrichten an das angegebene Ziel.

Dieses Beispielprogramm kann als Thin-Client-Anwendung oder als eigenständige Clientanwendung ausgeführt werden.

/*
 * Beispielprogramm
 * © COPYRIGHT International Business Machines Corp. 2009
 * Alle Rechte vorbehalten * Lizenziertes Material - Eigentum der IBM
 *
 * Dieses Beispielprogramm wird ohne Wartung (auf "as-is"-Basis)
 * bereitgestellt und kann vom Kunden
 *
 * (a) zu Schulungs- und Studienzwecken,
 * (b) zum Entwickeln von Anwendungen für ein IBM WebSphere-Produkt zur
 *     internen Nutzung beim Kunden gebührenfrei genutzt, ausgeführt,
 *     kopiert und geändert werden.
 */
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader; 

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import com.ibm.websphere.sib.api.jms.JmsConnectionFactory;
import com.ibm.websphere.sib.api.jms.JmsFactoryFactory;
import com.ibm.websphere.sib.api.jms.JmsQueue;
import com.ibm.websphere.sib.api.jms.JmsTopic;

/**
 * Beispielcode zur Erstellung einer Verbindung zu einem Bus und zum Senden einer Textnachricht
 * über das Programm.
 * 
 * Beispielbefehlszeilen:
 *   SIBusSender-Topic://my/topic?topicSpace=Default.Topic.Space MyBus localhost:7276
 *   SIBusSender-Warteschlange://myQueue MyBus localhost:7286:BootstrapSecureMessaging InboundSecureMessaging
 */
public class SIBusSender {
  
  /**
   * @param args DEST_URL,BUS_NAME,PROVIDER_ENDPOINTS,[TRANSPORT_CHAIN]
   */
  public static void main(String[] args) throws JMSException, IOException {
    
    // Argumente syntaktisch analysieren
    if (args.length < 3) {
      throw new IllegalArgumentException(
          "Usage: SIBusSender <DEST_URL> <BUS_NAME> <PROVIDER_ENDPOINTS> [TARGET_TRANSPORT_CHAIN]");
    }    
    String destUrl = args[0];
    String busName = args[1];
    String providerEndpoints = args[2];    
    String targetTransportChain = "InboundBasicMessaging";
    if (args.length >= 4) targetTransportChain = args[3];
    
    // Factory-Factory abrufen
    JmsFactoryFactory jmsFact = JmsFactoryFactory.getInstance();

    // JMS-Ziel erstellen
    Destination dest;
    if (destUrl.startsWith("topic://")) {
      JmsTopic topic = jmsFact.createTopic(destUrl);
      // Setter-Methoden könnten hier aufgerufen werden, um das Topic zu konfigurieren
      dest = topic ;
    }
    else {
      JmsQueue queue = jmsFact.createQueue(destUrl);
      // Setter-Methoden könnten hier aufgerufen werden, um die Warteschlange zu konfigurieren
      dest = queue;
    }
        
    // Eine einheitliche JMS-Verbindungsfactory erstellen
    JmsConnectionFactory connFact = jmsFact.createConnectionFactory();
    
    // Verbindungsfactory konfigurieren
    connFact.setBusName(busName);
    connFact.setProviderEndpoints(providerEndpoints);
    connFact.setTargetTransportChain(targetTransportChain);
    
    // Verbindung erstellen
    Connection conn = connFact.createConnection();
    
    Session session = null;
    MessageProducer producer = null;
    try {
      
      // Sitzung erstellen
      session = conn.createSession(false, // Not transactional 
                                   Session.AUTO_ACKNOWLEDGE);      
      // Nachrichtenerzeuger erstellen
      producer = session.createProducer(dest);
      
      // Zu sendende Textzeilen aus der Konsole im Schleifenmodus lesen
      System.out.println("Ready to send to " + dest + " on bus " + busName);
      BufferedReader lineInput = new BufferedReader(new InputStreamReader(System.in));      
      String line = lineInput.readLine();
      while (line != null && line.length() > 0) {
        
        // Textnachricht erstellen, die die Zeile enthält
        TextMessage message = session.createTextMessage();
        message.setText(line);
        
        // Nachricht senden
        producer.send(message,
                      Message.DEFAULT_DELIVERY_MODE,
                      Message.DEFAULT_PRIORITY,
                      Message.DEFAULT_TIME_TO_LIVE);        
        
        // Nächste Zeile lesen
        line = lineInput.readLine();
      }
      
    }
    // Letztendlich blockieren, um sicherzustellen, dass die JMS-Objekte geschlossen werden
    finally {
      
      // Nachrichtenerzeuger schließen
      try {
        if (producer != null) producer.close();
      }
      catch (JMSException e) {
        System.err.println("Failed to close message producer: " + e);
      }
      
      // Sitzung schließen
      try {
        if (session != null) session.close();
      }
      catch (JMSException e) {
        System.err.println("Failed to close session: " + e);
      }
      
      // Verbindung schließen
      try {
        conn.close();       }
      catch (JMSException e) {
        System.err.println("Failed to close connection: " + e);
      }
      
    }
  }

}

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tmj_pgmng
Dateiname:tmj_pgmng.html