Exemple : Configuration d'une ressource à l'aide d'un programme pour le fournisseur de messagerie par défaut
Dans cet exemple, une connexion JMS à un bus d'intégration de services est créée à l'aide de l'API figurant dans le package com.ibm.websphere.sib. Ceci permet d'éviter d'utiliser JNDI pour rechercher les fabriques de connexions configurées de manière administrative. Une fois la connexion établie, l'exemple lit les lignes d'entrée à partir de la console et les envoie sous forme de messages texte JMS à la destination indiquée.
Cet exemple peut être exécuté en tant qu'application client léger ou en tant qu'application client autonome.
/*
* Programme exemple
* © COPYRIGHT International Business Machines Corp. 2009
* All Rights Reserved * Licensed Materials - Property of IBM
*
* Ce programme exemple n'est soumis à aucune redevance ; il est fourni EN L'ETAT et peut être librement utilisé, exécuté,
* copié et modifié par le client
*
* (a) dans le cadre de son instruction personnelle et de sujets d'étude,
* (b) pour développer des applications conçues pour s'exécuter avec un produit IBM
* WebSphere pour utilisation interne du client.
*/
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;
/**
* Exemple de code pour créer à l'aide d'un programme une connexion à un bus et
* envoyer un message texte.
*
* Exemple de lignes de commande :
* SIBusSender topic://my/topic?topicSpace=Default.Topic.Space MyBus localhost:7276
* SIBusSender queue://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 {
// Analyser les arguments
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];
// Obtenir la fabrique
JmsFactoryFactory jmsFact = JmsFactoryFactory.getInstance();
// Créer une destination JMS
Destination dest;
if (destUrl.startsWith("topic://")) {
JmsTopic topic = jmsFact.createTopic(destUrl);
// Les méthodes d'accès set peuvent être appelées ici pour configurer le sujet
dest = topic ;
}
else {
JmsQueue queue = jmsFact.createQueue(destUrl);
// Les méthodes d'accès set peuvent être appelées ici pour configurer la file d'attente
dest = queue;
}
// Créer une fabrique de connexions JMC unifiée
JmsConnectionFactory connFact = jmsFact.createConnectionFactory();
// Configurer la fabrique de connexions
connFact.setBusName(busName);
connFact.setProviderEndpoints(providerEndpoints);
connFact.setTargetTransportChain(targetTransportChain);
// Créer la connexion
Connection conn = connFact.createConnection();
Session session = null;
MessageProducer producer = null;
try {
// Créer une session
session = conn.createSession(false, // Not transactional
Session.AUTO_ACKNOWLEDGE);
// Créer un fournisseur de messages
producer = session.createProducer(dest);
// Diffuser en boucle des lignes de texte à partir de la console à des fins d'envoi
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) {
// Créer un message texte incluant la ligne
TextMessage message = session.createTextMessage();
message.setText(line);
// Envoyer le message
producer.send(message,
Message.DEFAULT_DELIVERY_MODE,
Message.DEFAULT_PRIORITY,
Message.DEFAULT_TIME_TO_LIVE);
// Lire la ligne qui suit
line = lineInput.readLine();
}
}
// Puis bloquer pour s'assurer de la fermeture des objets JMS
finally {
// Fermer le fournisseur de messages
try {
if (producer != null) producer.close();
}
catch (JMSException e) {
System.err.println("Failed to close message producer: " + e);
}
// Fermer la session
try {
if (session != null) session.close();
}
catch (JMSException e) {
System.err.println("Failed to close session: " + e);
}
// Fermer la connexion
try {
conn.close();
}
catch (JMSException e) {
System.err.println("Failed to close connection: " + e);
}
}
}
}