!!!JBossESB Messaging Providers
-
The JBossESB can use any JMS compliant Messaging provider. Currently we have successfully
tested JBossMessaging, JBossMQ, ActiveMQ, Websphere MQ Series (version 5.3 and 6.0) and OracleAQ There is no reason that any other JMS provider would not work. We simply did not have time
to validate more then these for now.
How can I configure them?
-
JMSListeners and JMSGateways can be configured to listen to a Queue or Topic. For
this you can use the following parameters in their configuration (jbossesb-listener.xml
and jbossesb-gateway.xml):
jndi-URL,
jndi-context-factory,
jndi-pkgprefix,
connection-factory,
destination-type and
destinationname.
Furthermore you will need to add the client jms jars of the JMSprovider
you want to use to the classpath.
For some (all?) of the JMS vendors, you can integrate them into JBoss such that the JNDI tree natively used by JBoss is also where the JMS connection factories and queues are stored. In that scenario, you simply follow the instructions for JBossMQ / JBossMessaging below. Instructions on how to integrate a 3rd party JMS vendor in this way is not provided here but you should be able to find instructions with that vendor.
In the following sections we will assume that your JMS provider runs on 'localhost',
that the connection-factory is 'ConnectionFactory', that we are listenening to a
destination-type 'queue' and that it's name is 'queue/A'.
Note: Each JMSListener and JMSGateway can be configured to use it's
own JMS provider, so you can use more then one provider in your
deployment.
JBossMQ or JBossMessaging
-
The settings for JBossMQ and JBossMessaging are identical and you should set the
parameters to:
jndi-context-factory="org.jnp.interfaces.NamingContextFactory" connection-factory="ConnectionFactory" destination-type="queue" destination-name="queue/A"
For JBossMQ you should have jbossmq-client.jar,
In your classpath. Not that this jar is included in jbossall-client.jar, which can be
found in lib/ext. For JBossMessaging it should be jboss-messaging-client.jar
While -for now- the JBossMQ is the default JMS provider in JBossAS, you can also
use JBossMessaging. To setup JBossMessaging see the [screenshot document|
http://wiki.jboss.org/wiki/attach?page=JBossESBDocumentation%2FJBESB-JBM.pdf].
Note that the standalone esb-server is preconfigured with JBossMessaging.
ActiveMQ
-
For ActiveMQ you should set the parameters to:
jndi-URL="tcp://localhost:61616" jndi-contextfactory="org.apache.activemq.jndi.ActiveMQInitialContextFactory" connection-factory="ConnectionFactory" destination-type="queue" destination-name="queue/A"
In your classpath you should have activemq-core-4.x and backport-util-concurrent-2.1.jar
Both jars can be found in lib/ext/jms/activemq. We tested with version 4.1.0-
incubator.
Websphere MQ Series
-
For Websphere MQ Series you should set the parameters to:
jndi-URL="localhost:1414/SYSTEM.DEF.SVRCONN" jndi-contextfactory="com.ibm.mq.jms.context.WMQInitialContextFactory" connection-factory="ConnectionFactory" destination-type="queue" destination-name="QUEUEA"
Note: Websphere likes all CAPS queue names and no slashes (QUEUEA),
and the name of the Queue Manager in MQ should match what the value
of 'connection-factory' is (or bind this name to JNDI). In our case we
created a Queue Manager named �ConnectionFactory�.
On your classpath you should have com.ibm.mq.pcf.jar, mqcontext.jar
and the client jars: com.ibm.mq.jar, com.ibm.mqjms.jar.
Please note that the client jars differ between MQ 5.3 and MQ 6.0. However the 6.0
jars should be backward compatible. The jars are not open source, and are therefor not
provided by us. You will have to obtain them from your WAS and MQ installs.
Also note that you may get the following exception when running MQ 6.0, which can
be fixed by adding the user that runs the jbossesb to the mqm group:
Note that for MQ 6.0:
Message:
Unable to get a MQ series Queue Manager or Queue Connection. Reason: failed to create connection --javax.jms. JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager
Explanation: There is a problem with user permissions or access.
Tip: Make sure the user accessing MQ Queue Manager is part of the mqm group.
OracleAQ
-
For Oracle AQ you should set the parameters to:
connection-factory=�QueueConnectionFactory�
and use the following properties:
<property name="java.naming.factory.initial" value="org.jboss.soa.esb.oracle.aq.AQInitialContextFactory"></property> <property name="java.naming.oracle.aq.user" value="<user>"/> <property name="java.naming.oracle.aq.password" value="<pw>"/> <property name="java.naming.oracle.aq.server" value="<server>"/> <property name="java.naming.oracle.aq.instance" value="<instance>"/> <property name="java.naming.oracle.aq.schema" value="<schema>"/> <property name="java.naming.oracle.aq.port" value="1521"></property> <property name="java.naming.oracle.aq.driver" value="thin"></property>
You may notice the reference to the InitialContext factory. You only need this is if
you want to avoid OracelAQ to register its queues with an LDAP. The
AqinitialContextFactory references code in a plugin jar that you can find in the
plugins/org.jboss.soa.esb.oracle.aq direct ory. The jar is called
org.jboss.soa.esb.oracle.aq-4.2.jar and you will have to deploy it to the
jbossesb.sar/lib directory.
Note that when creating a Queue in Oracle AQ make sure to select a payload type of
SYS AQ$_JMS_MESSAGE.
For a sample you can check the samples/quickstarts/helloworld_action/oracle-aq
directory for an example jboss-esb. xml configuration file.
Comments