Tuesday, January 16, 2007

JMSJCA, a feature rich JMS Resource Adapter, is now a java.net project

JMSJCA is now a java.net project. It can be found here: http://jmsjca.dev.java.net.

The project is currently used in Java CAPS, JMS Grid and the JMS BC as part of the open-jbi-components project.

The connector can be used as a J2EE 1.4 Resource Adapter, but its libraries can also be used  as an abstraction layer to JMS servers from  non J2EE-code. As such, the adapter acts like a library that hides the complexities of transactions, concurrency, connection failure detection, JMS server implementation idiosyncracies, etc. That is how it is used in the JMS BC as part of the open-jbi-components project.

17 comments:

Ludovic Orban said...

How does JMSJCA compares with Generic JMS RA (https://genericjmsra.dev.java.net/) which is also made by Sun ? They look quite similar in my opinion.

Frank Kieviet said...

Hi Ludovic,


The main difference between genericjmsra and jmsjca is that the latter is more feature rich and more specialized towards individual JMS servers. Genericjmsra ships with Glassfish, and jmsjca ships with CAPS. Why did Sun develop two resource adapters? It didn't: genericjmsra has its origin within Sun, and the latter within SeeBeyond. After the aquisition of SeeBeyond, Sun couldn't justify killing one or the other, nor saw it need there for that.




Frank 


sk said...

Hi Frank,
I need some help with the weblogic connector.
The "weblogic connection factory" becomes stale if the weblogic application server is restarted & JMSJCA wrapper cant create connections from the wrapped object factory.
How do I overcome this problem?
thanks
SK

Frank Kieviet said...

Hi sk,


This will require some code changes to fix that. I'll try to roll in these changes into the next release.


Frank

sk said...

That would be very nice. Thanks.

I have started using JMSJCA in jboss 4.2.x server to connect a wl 8.1.5 jms provider.

Looking forward to the next release!

Frank Kieviet said...

Re sk:

The WL adapter no longer caches the connection factories. The code is on java.net and will be available in CAPS 5.2; there are no plans to put this in CAPS 5.1.3u1.

Frank

Frank Kieviet said...

Re anonymous:

The NPE is due to specifying a null value for the connection URL on the MCF. The latest version of JMSJCA has an explicit check for null.

Frank

sk said...

I saw JMSJCA.nocfcache in the cvs. :)

Eliad Dahan said...

Hi Frank,

First, thanks a lot for your quick answer!!!

I am trying - but with no luck to connect to my jms wl (that runs on wl 9.2 server - evaluation edition), Also I am using the following configuration:

In the jms:address section:

connectionURL jndi://

connectionFactoryName javax.jms.QueueConnectionFactory

initialContextFactory weblogic.jndi.WLInitialContextFactory

providerURL t3://localhost:7001

And in the jms:operation:

destination StockTraderJmsServer/TraderBeanQueue (jndi names of jms server & jms queue)

destinationType Queue

transaction NoTransaction

Note (I am using netBeans 6 v10 as my IDE).

Thanks in advance for your great help!!!

Eliad Dahan.

sk said...

Frank,

I moved my qn to http://forum.java.sun.com/thread.jspa?threadID=5209870.

sk said...

edit url..

I moved my qn to http://forum.java.sun.com/thread.jspa?threadID=5209870 .

Jeff said...

Frank,

I am trying to use JMSJCA in JBoss to be a consumer of a topic that is on a Weblogic JMS Provider. I am not having much luck finding documentation for deploying to JBoss to consume a Weblogic JMS provider. Is this possible through JMSJCA and is there any documentation on howto deploy this type of configuration? Any help would be appreciated.

Thanks,

Jeff

Frank Kieviet said...

Re Jeff:

Yes, we have a few successful deployments on JBoss. We haven't documented it though. We should be doing that soon, but I can't promise when this will be done.

(And the JBoss documentation is also not very clear on how to deploy a global RA)

If you don't want to wait until we've implemented it, send me an email, I'll send you a deployment descriptor file for JBoss that should give you a good idea of how it's done.

Frank

Juergen said...

Hi,

it would be nice to have some JMSJCA samples. I am trying to get JMSJCA to run with Websphere MQ and Geronimo and was stuck for several days in deployment descriptor hell.

Finally I got the Resource Adapter to run, but now on running a message driven bean that should be triggered by the resource adapter, there appear MQ Series errors.

I have a destination property in the bean descriptor, this should suffice, shouldn't it?

Thanks,

Juergen

WARNING: JMSJCA-E016: [serial-QueueReceiver(SampleEventHandler/MQMDB) @ [wmq://mqxs71:1414?QueueManager=XS71&TransportType=1&Channel=XS71.SVRCONN.TCP]]: message delivery initiation failed (attempt #6); will retry in 10 seconds. The error was: javax.jms.InvalidDestinationException: MQJMS2008: failed to open MQ queue

javax.jms.InvalidDestinationException: MQJMS2008: failed to open MQ queue

at com.ibm.mq.jms.MQQueueSession.getQueueOpenException(MQQueueSession.java:816)

at com.ibm.mq.jms.MQQueueSession.createReceiver(MQQueueSession.java:295)

at com.stc.jmsjca.core.RAJMSObjectFactory.createMessageConsumer(RAJMSObjectFactory.java:557)

at com.stc.jmsjca.core.SerialDelivery.start(SerialDelivery.java:110)

at com.stc.jmsjca.core.Activation.asyncStart(Activation.java:528)

at com.stc.jmsjca.core.Activation.access$000(Activation.java:79)

at com.stc.jmsjca.core.Activation$1.run(Activation.java:336)

at java.lang.Thread.run(Thread.java:801)

Juergen said...

OK, I got it working (still some working samples would be nice). That's great because genericjmsra would not work for me, as it needs JNDI (does it?), but the RefFSContextFactory would not work in Geronimo.

JMSJCA works fine with Geronimo.

Anyway, I append the interesting parts of geronimo-ra.xml and openejb-jar.xml

<conn:resourceadapter-instance>

<conn:resourceadapter-name>MQRA</conn:resourceadapter-name>

<conn:config-property-setting name="connectionURL">wmq://MYHOST:1414?QueueManager=MYQM&amp;TransportType=JMSC_MQJMS_TP_CLIENT_MQ_TCPIP&amp;Channel=MY.SVRCONN</conn:config-property-setting>

<name:workmanager>

<name:gbean-link>DefaultWorkManager</name:gbean-link>

</name:workmanager>

<conn:adminobject>

<conn:adminobject-interface>

javax.jms.Queue

</conn:adminobject-interface>

<conn:adminobject-class>

com.stc.jmsjca.core.AdminQueue

</conn:adminobject-class>

<conn:adminobject-instance>

<conn:message-destination-name>

ivtQ

</conn:message-destination-name>

</conn:adminobject-instance>

</conn:adminobject>

<enterprise-beans>

<message-driven>

<ejb-name>MQMDB</ejb-name>

<resource-adapter>

<resource-link>MQRA</resource-link>

</resource-adapter>

<activation-config>

<activation-config-property>

<activation-config-property-name>destination</activation-config-property-name>

<activation-config-property-value>MY.PHYSICAL.QUEUE.NAME</activation-config-property-value>

</activation-config-property>

<activation-config-property>

<activation-config-property-name>destinationType</activation-config-property-name>

<activation-config-property-value>javax.jms.Queue</activation-config-property-value>

</activation-config-property>

</activation-config>

Anonymous said...

Hi Frank

Can JMSJCA be used in Jboss 6 to integrate with TIBCO EMS?

Thanks

fkieviet said...

Tibco EMS: I don't know; I have no experience with that.