Accéder à une queue JMS distante dans JBoss AS 7

Un article de JTips.
Accéder à une queue JMS distante dans JBoss AS 7
Auteur : Alexis Hassler
Formation(s) sur le sujet :
Administration JBoss AS 7
Sewatech.png


Pour accéder à une destination JMS (queue ou topic), il faut d'abord accéder au registre JNDI, lui demander la ConnectionFactory et la destination, puis se connecter au serveur et envoyer ou consommer les messages.

jndiContext = new InitialContext();
connectionFactory = (ConnectionFactory) jndiContext.lookup(factoryName);
queue = (Queue) jndiContext.lookup(queueName);
...

JNDI

La configuration JNDI est la suivante (notez que le serveur JNDI est sécurisé) :

#jndi.properties
java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory
java.naming.provider.url=remote://localhost:4447

java.naming.security.principal=alexis
java.naming.security.credentials=hassler

JMS

Le nom de la fabrique est jms/RemoteConnectionFactory. Ce nom correspond au nom exporté java:jboss/exported/jms/RemoteConnectionFactory, configuré dans le fichier standalone-full.xml.

<connection-factory name="RemoteConnectionFactory">
    <connectors>
        <connector-ref connector-name="netty"/>
    </connectors>
    <entries>
        <entry name="RemoteConnectionFactory"/>
        <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
    </entries>
</connection-factory>

Le nom de la queue suit la même logique ; il faut qu'il soit exporté.

<jms-queue name="SWq">
    <entry name="queue/SWq"/>
    <entry name="java:jboss/exported/queue/SWq"/>
</jms-queue>

Enfin, JMS est sécurisé par défaut dans JBoss AS 7.1, il faut donc que le client s'authentifie aussi lors de l'établissement de la connexion JMS. Réutiliser les mêmes informations d'authentification que pour JNDI.

connection = connectionFactory.createConnection(jndiEnvironment.get(Context.SECURITY_PRINCIPAL), jndiEnvironment.get(Context.SECURITY_CREDENTIALS));



Quelques autres articles sur JBoss