Dear fellow ServiceMix users, dear developers,

I've finally managed - with the help of the SM documentation (!), to solve
the problem with creating a JMS SU using Websphere MQ instead of ActiveMQ
(nothing wrong with ActiveMQ!).
I haven't tested the SU thoroughly, but it is started and shows up in the
jbi:list command, which is a huge progress on its own.

I'd like to describe what I did to spare others the trial I went through.
Again thanks to Jean-Baptiste, Claus and Björn for their inputs. 

===
If you have Websphere MQ installed on the machine you are using ServiceMix
on, it is very likely that the Websphere installer has modified your
environment variables to point to the WMQ installation:
Example:

CLASSPATH=C:\APPS\IBM\WebSphere
MQ\Java\lib\com.ibm.mqjms.jar;C:\APPS\IBM\WebSphere
MQ\Java\lib\com.ibm.mq.jar;.
MQFT_JAVA_LIB_PATH=C:\APPS\IBM\WebSphere MQ\java\jre\lib
MQFT_JRE_BIN_PATH=C:\APPS\IBM\WebSphere MQ\java\jre\bin
MQ_FILE_PATH=C:\APPS\IBM\WebSphere MQ
MQ_JAVA_DATA_PATH=C:\APPS\IBM\WebSphere MQ
MQ_JAVA_INSTALL_PATH=C:\APPS\IBM\WebSphere MQ\Java
MQ_JAVA_LIB_PATH=C:\APPS\IBM\WebSphere MQ\Java\lib
MQ_JRE_PATH=C:\APPS\IBM\WebSphere MQ\java\jre

You need to unset these variables not only if you include the MQ classes as
OSGi bundles, but also because the classpath might contain references to
jms.jar and jta.jar, which can then give you an error when the connection
factory bean is assigned to the jms component connectionFactory property.

You can then provide the OSGi version of the IBM jars (\Java\lib\OSGi) using
the method as described by Björn (deploy as a feature from the local feature
repository). This requires you to


a) check in the OSGi jars into your local maven repository
b) set up a features.xml file listing all the required features.
c) adding the url to the local repository in servicemix using
features:addUrl
d) installing the feature



When creating the JMS SU, the xbean.xml will not pick up the classes from
the deployed osgi bundles for Websphere MQ! This will give you a
ClassNotFound Exception i.e. on the MQQueueConnectionFactory.
According to ServiceMix doc on Classloaders, you need to include a  tag in
your xbean.xml file, listing the libraries you need to use by referencing
the osgi bundles by their symbolic names. The command osgi:headers will help
you to find out the osgi symbolic name of a loaded bundle in ServiceMix.

My xbean.xml now contains


        servicemix-jms
        osgi:org.apache.geronimo.specs.geronimo-jms_1.1_spec
        osgi:org.apache.geronimo.specs.geronimo-jta_1.1_spec
        osgi:com.ibm.msg.client.osgi.wmq
        osgi:com.ibm.msg.client.osgi.wmq.prereq
        osgi:com.ibm.msg.client.osgi.jms
        osgi:com.ibm.msg.client.osgi.wmq.nls
        osgi:com.ibm.msg.client.osgi.nls
        osgi:com.ibm.mq.osgi.directip


You then build your SU + SA and deploy it into SM 4. I'm outrageously happy
that SM now shows

[ 226] [Active     ] [            ] [       ] [   55] DirectIP Plug-in
(7.0.1.4)
[ 227] [Active     ] [            ] [       ] [   55] NLS Plug-in (7.0.1.4)
                                       Fragments: 228
[ 228] [Resolved   ] [            ] [       ] [   55] WMQ NLS Plug-in
(7.0.1.4)
                                       Hosts: 227
[ 229] [Active     ] [            ] [       ] [   55] Common Services J2SE
Plug-in (7.0.1.4)
[ 230] [Active     ] [            ] [       ] [   55] JMS client Plug-in
(7.0.1.4)
[ 231] [Active     ] [            ] [       ] [   55] WMQ prereq Plug-in
(7.0.1.4)
[ 232] [Active     ] [            ] [       ] [   55] WMQ provider Plug-in
(7.0.1.4)
[ 233] [Active     ] [            ] [       ] [   60] tutorial-sa (0.0.0)


and - even better - 

karaf@root> jbi:list
Components
----------
   State                  Name                  Description
[Started ] [servicemix-ftp                ]
[Started ] [servicemix-file               ]
[Started ] [servicemix-cxf-bc             ]
[Started ] [servicemix-cxf-se             ]
[Started ] [servicemix-jms                ]
[Started ] [servicemix-mail               ]
[Started ] [servicemix-smpp               ]
[Started ] [servicemix-snmp               ]
[Started ] [servicemix-bean               ]
[Started ] [servicemix-vfs                ]
[Started ] [servicemix-camel              ]
[Started ] [servicemix-http               ]
[Started ] [servicemix-drools             ]
[Started ] [servicemix-eip                ]
[Started ] [servicemix-quartz             ]
[Started ] [servicemix-osworkflow         ]
[Started ] [servicemix-scripting          ]
[Started ] [servicemix-validation         ]
[Started ] [servicemix-saxon              ]
[Started ] [servicemix-exec               ]
[Started ] [servicemix-wsn2005            ]

Service Assemblies
------------------
   State                  Name                  Description
[Started ] [tutorial-sa                   ]     Tutorial :: SA

I will now start to explore the use of MQ Series in SM 4 deeper and - as we
have to work in a XA environment - will come back to my original problem on
using JMS over JCA and how to configure that in SM 4. 

Many thanks to those who helped. I hope this post is helpful to others.

kind regards
Michael


--
View this message in context: 
http://servicemix.396122.n5.nabble.com/ServiceMix-4-use-WebSphere-MQ-as-JBI-SU-Solved-tp3409123p3409123.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to