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

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

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));