24.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
Cette procédure suppose qu'un serveur de fournisseur JMS est déjà configuré et prêt à l'emploi. Les binaires nécessaires à l'implémentation du fournisseur JMS seront nécessaires. Vous devez également connaître les valeurs des propriétés de fournisseur JMS suivantes :
- PROVIDER_HOST:PROVIDER_PORT: le nom d'hôte et le numéro de port du serveur de fournisseur JMS.
- PROVIDER_CONNECTION_FACTORY: le nom de l'usine de connexion déployée sur le serveur de fournisseur JMS. Doit être XA.
- PROVIDER_QUEUE, PROVIDER_TOPIC: les noms des files d'attente et des sujets qui se trouvent sur le serveur de fournisseurs JMS qui doivent être utilisés.
Procédure 24.10. Configuration d'un adaptateur de ressources générique JMS
- Créer une implémentation
ObjectFactory
pour la liaison de files d'attentes et de sujets JNDI :- En utilisant le code ci-dessous comme modèle, remplacer les informations serveur par les valeurs de serveur du fournisseur JMS.
import java.util.Hashtable; import java.util.Properties; public class RemoteJMSObjectFactory implements ObjectFactory { private Context context = null; public RemoteJMSObjectFactory() { } public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception { try { String jndi = (String) obj; final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.tibco.tibjms.naming.TibjmsInitialContextFactory"); env.put(Context.URL_PKG_PREFIXES, "com.tibco.tibjms.naming"); env.put(Context.PROVIDER_URL, "tcp://TIBCO_HOST:TIBCO_PORT"); context = new InitialContext(env); Object o = context.lookup(jndi); return o; } catch (NamingException e) { e.printStackTrace(); throw e; } } }
- Compiler le code ci-dessus, et sauvegarder le fichier de classe résultant dans un fichier JAR nommé
remoteJMSObjectFactory.jar
- Créer un module
genericjms
pour votre instance JBoss EAP 6 :- Créer la structure de répertoire suivante :
EAP_HOME/modules/system/layers/base/org/jboss/genericjms/provider/main
- Copier le fichier
remoteJMSObjectFactory.jar
dansEAP_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
. Pour Tibco EMS, les binaires requis sonttibjms.jar
ettibcrypt.jar
du répertoire/lib
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> <resource-root path="tibjms.jar"/> <resource-root path="tibcrypt.jar"/> <resource-root path="remoteJMSObjectFactory.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.jms.api"/> </dependencies> </module>
- Ajouter le module JMS générique comme une dépendance pour tous les déploiements en tant que modules globaux.
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:ee:1.1">
,ajouter:<global-modules> <module name="org.jboss.genericjms.provider" slot="main"/> <module name="org.jboss.common-core" slot="main"/> </global-modules>
- Remplacer l'adaptateur de ressources HornetQ par défaut par l'adaptateur de ressources générique.Dans
EAP_HOME/standalone/configuration/standalone-full.xml
, remplacer<subsystem xmlns="urn:jboss:domain:ejb3:1.4"> <mdb>
, par:<mdb> <resource-adapter-ref resource-adapter-name="org.jboss.genericjms"/> <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> </mdb>
- Ajouter les liaisons pour vos files d'attente et sujets JMS en tant qu'objets selon les besoins.Dans
EAP_HOME/standalone/configuration/standalone-full.xml
, sous<subsystem xmlns="urn:jboss:domain:naming:1.3">
, ajouter les liaisons, remplaçant PROVIDER_QUEUE et PROVIDER_TOPIC selon les besoins :<bindings> <object-factory name="PROVIDER_QUEUE" module="org.jboss.genericjms.provider" class="org.jboss.qa.RemoteJMSObjectFactory"/> <object-factory name="PROVIDER_TOPIC" module="org.jboss.genericjms.provider" class="org.jboss.qa.RemoteJMSObjectFactory"/> </bindings>
- Dans
EAP_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">
.Remplacer PROVIDER_CONNECTION_FACTORY, PROVIDER_HOST, et PROVIDER_PORT par les valeurs du fournisseur JMS.<resource-adapters> <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/PROVIDER_CONNECTION_FACTORY" pool-name="PROVIDER_CONNECTION_FACTORY"> <config-property name="JndiParameters"> java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.provider.url=tcp://PROVIDER_HOST:PROVIDER_PORT </config-property> <config-property name="ConnectionFactory"> PROVIDER_CONNECTION_FACTORY </config-property> <security> <application/> </security> </connection-definition> </connection-definitions> </resource-adapter> </resource-adapters>
L'adaptateur de ressources JMS est maintenant configuré et prêt à l'utilisation.
user
et de mot de passe password
(remplacer les valeurs de propriété en fonction des besoins).
@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "jndiParameters", propertyValue = "java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory;java.naming.provider.url=tcp://PROVIDER_HOST:PROVIDER_PORT") @ActivationConfigProperty(propertyName = "destination", propertyValue = "PROVIDER_QUEUE"), @ActivationConfigProperty(propertyName = "connectionFactory", propertyValue = "PROVIDER_CONNECTION_FACTORY"), @ActivationConfigProperty(propertyName = "user", propertyValue = "USER"), @ActivationConfigProperty(propertyName = "password", propertyValue = "PASSWORD"), }) @ResourceAdapter("org.jboss.genericjms") public class SampleMdb implements MessageListener { @Override public void onMessage(Message message) { } }