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