22.10. Configurer un adaptateur de ressources JMS standard à utiliser avec un fournisseur JMS de tierce partie
JBoss EAP 6 peut être configuré pour fonctionner avec des fournisseurs tiers de JMS, cependant tous les fournisseurs JMS ne produisent pas un adaptateur de ressources JMS JCA pour l'intégration avec les plateformes d'applications Java. Cette procédure couvre les étapes requises pour configurer l'adaptateur de ressources JMS générique inclus dans JBoss EAP 6 pour se connecter à un fournisseur JMS. Dans cette procédure, Tibco EMS 6.3 est utilisé comme un exemple de fournisseur JMS, mais d'autres fournisseurs JMS peuvent avoir besoin d'une configuration différente.
Important
Conditions préalables
- Le serveur de l'adaptateur JMS est déjà configuré et prêt à l'utilisation. Il nous faudra tous les binaires utile à l'implémentation JMS du fournisseur.
- Vous devrez également connaître les valeurs des propriétés suivantes du fournisseur JMS pour pouvoir chercher ses ressources JMS (usines de connexion, files d'attente, et topics)
- java.naming.factory.initial
- java.naming.provider.url
- java.naming.factory.url.pkgs
Dans l'exemple XML utilisé dans cette procédure, ces paramètres sont notésPROVIDER_FACTORY_INITIAL
,PROVIDER_URL
, andPROVIDER_CONNECTION_FACTORY
respectivement. Remplir ces espaces réservés avec les valeurs du fournisseur JMS pour votre environnement.
Procédure 22.10. Configurer un adaptateur de ressources JMS standard à utiliser avec un fournisseur JMS de tierce partie
Créer le module JBoss pour le fournisseur JMS
Créer un module JBoss qui puisse contenir toutes les bibliothèques requises pour se connecter et communiquer avec le fournisseur JMS. Ce module sera nomméorg.jboss.genericjms.provider
.- Créer la structure de répertoire suivante :
EAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/main
- Copier les binaires requis pour l'implémentation JMS du fournisseur dans
EAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/main
.Note
Pour Tibco EMS, les binaires requis sonttibjms.jar
ettibcrypt.jar
du répertoirelib
de l'installation Tibco. - Créer un fichier
module.xml
dansEAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/main
comme ci-dessous, en énumérant les fichiers JAR des étapes précédentes comme ressources :<module xmlns="urn:jboss:module:1.1" name="org.jboss.genericjms.provider"> <resources> <!-- all jars required by the JMS provider, in this case Tibco --> <resource-root path="tibjms.jar"/> <resource-root path="tibcrypt.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.jms.api"/> </dependencies> </module>
Configurer un contexte externe JNDI pour le fournisseur JMS
Les ressources JMS (usines de connexion et destinations) sont vérifiées par le fournisseur JMS. Nous ajouterons un contexte externe dans l'instance JBoss EAP 6 pour que toute recherche locale de cette ressource puisse être conduite automatiquement dans le fournisseur JMS distant.Note
Dans cette procédure,EAP_HOME/standalone/configuration/standalone-full.xml
est utilisé comme fichier de configuration JBoss EAP 6.DansEAP_HOME/standalone/configuration/standalone-full.xml
, sous<subsystem xmlns="urn:jboss:domain:naming:1.4">
, ajouter :<bindings> <external-context name="java:global/remoteJMS/" module="org.jboss.genericjms.provider" class="javax.naming.InitialContext"> <environment> <property name="java.naming.factory.initial" value="${PROVIDER_FACTORY_INITIAL}"/> <property name="java.naming.provider.url" value="${PROVIDER_URL}"/> <property name="java.naming.factory.url.pkgs" value="${PROVIDER_URL_PKGS}"/> </environment> </external-context> </bindings>
Les valeurs de ces trois propriétés doivent être remplacées par la bonne valeur pour pouvoir se connecter au fournisseur JMS distant. Veillez bien à garder${}
intact quand vous remplissez l'espace réservé.Activer la recherche par chaîne
Il y a des fournisseurs JMS (comme EMS Tibco) qui ne prennent pas la méthodelookup(Name)
de JNDI. Dans ces cas, ajouter à la propriétéorg.jboss.as.naming.lookup.by.string
la valeurtrue
pour régler ce problème.Exemple 22.2. Activer la recherche par chaîne dans EMS Tibco
Voici une définition complète d'uncontexte externe
dans EMS Tibco.<bindings> <external-context name="java:global/remoteJMS/" module="org.jboss.genericjms.provider" class="javax.naming.InitialContext"> <environment> <property name="java.naming.factory.initial" value="com.tibco.tibjms.naming.TibjmsInitialContextFactory"/> <property name="java.naming.provider.url" value="TIBCO_EMS_SERVER_HOST_NAME:PORT"/> <property name="java.naming.factory.url.pkgs" value="com.tibco.tibjms.naming"/> <property name="org.jboss.as.naming.lookup.by.string" value="true"/> </environment> </external-context> </bindings>
Dans ce contexte externe, toute recherche JNDI vers une ressource commençant parjava:global/remoteJMS/
sera effectuée sur le fournisseur JMS distant (après avoir supprimé le suffixe)java:global/remoteJMS/Queue1
, le contexte externe se connectera au fournisseur JMS distant, et engagera la recherche pour la ressourceQueue1
.Configuration d'un adaptateur de ressources générique JMS
DansEAP_HOME/standalone/configuration/standalone-full.xml
, ajouter la configuration d'adaptateur de ressources générique dans<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
.Exemple 22.3. Configuration de l'adaptateur de ressources EMS Tibco
Voici une définition complète d'un adaptateur de ressource dans EMS Tibco.<resource-adapter id="org.jboss.genericjms"> <module slot="main" id="org.jboss.genericjms"/> <transaction-support>NoTransaction</transaction-support> <connection-definitions> <connection-definition class-name="org.jboss.resource.adapter.jms.JmsManagedConnectionFactory" jndi-name="java:/jms/XAQCF" pool-name="XAQCF"> <config-property name="ConnectionFactory"> XAQCF </config-property> <config-property name="JndiParameters"> java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.provider.url=TIBCO_EMS_SERVER_HOST_NAME:PORT </config-property> <security> <application/> </security> </connection-definition> </connection-definitions> </resource-adapter>
Configurer le pool de beans basés-messages par l'adaptateur de ressource standard.
DansEAP_HOME/standalone/configuration/standalone-full.xml
, de<subsystem xmlns="urn:jboss:domain:ejb3:1.4">
, mettez la configuration<mdb>
à jour avec :<mdb> <resource-adapter-ref resource-adapter-name="org.jboss.genericjms"/> <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> </mdb>
L'adaptateur de ressources JMS standard est maintenant configuré et prêt à l'utilisation. Quand on crée un bean basé-message, utiliser un code qui ressemble à ceci pour pouvoir utiliser l'adaptateur de ressources.
@MessageDriven(name = "HelloWorldQueueMDB", activationConfig = { // The generic JMS resource adapter requires the JNDI bindings // for the actual remote connection factory and destination @ActivationConfigProperty(propertyName = "connectionFactory", propertyValue = "java:global/remoteJMS/XAQCF"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:global/remoteJMS/Queue1"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") }) public class HelloWorldQueueMDB implements MessageListener { public void onMessage(Message message) { // called every time a message is received from the `Queue1` queue on the JMS provider. } }
@Resource(lookup = "java:/jms/XAQCF") private ConnectionFactory cf;
@Resource(lookup = "java:global/remoteJMS") private Context context; ... Queue queue = (Queue) context.lookup("Queue1")