High Quality JMS Messaging.

Introduction

The JMS XA/ASF Swiftlet extends the standard JMS Swiftlet with support of distributed transactions (XA) and application server facilities (ASF) such as ConnectionConsumer. These features are specified in chapter 8 of the JMS specification.

This Swiftlet can be integrated into J2EE 1.3 and J2EE 1.4 compliant application servers. The integration into J2EE 1.3 compliant application servers must be done the proprietary way (different for each application server) because J2EE 1.3 doesn't define a standard to integrate a foreign JMS provider. However, J2EE 1.4 includes the Java Connector Architecture 1.5 specification (JCA 1.5) which specified so-called resource adapters (RA). These JCA 1.5 specification defines standard mechanism to integrate external JMS providers into J2EE 1.4 compliant application server including transaction and connection management. SwiftMQ 5.0.0 and upwards provide such a JCA 1.5 RA to integrate SwiftMQ.

Integration with J2EE 1.4 compliant Application Servers

Integration takes place by using SwiftMQ's JCA 1.5 Resource Adapter. Please check the documentation of the Resource Adapter.

Integration with J2EE 1.3 compliant Application Servers

The interface between a JMS provider and an application server (chapter 8 of the JMS specification) is declared as optional. Therefore, the integration is very different from one application server to another. The following sections gives a review on how SwiftMQ integrates with the different products.

Classloader Issues

Some application server are using different class loader for MDB which leads to a ClassNotFoundException if "getObject()" of an "ObjectMessage" is called. SwiftMQ's connection factories can be configured with an attribute "thread-context-classloader-for-getobject" to use the thread context class loader before deserializing the object to return from "getObject()". If you run into this problem, create a connection factory with the attribute "thread-context-classloader-for-getobject" set to "true" (default is false). There is a predefined connection factory "plainsocket_appserver@<routername>" which can be used as well.

IBM WebSphere 5.0

Check this How To.

WebLogic 7.0 and 8.1

WebLogic automatically detects whether a JMS provider is XA capable and then uses XA for container managed transactions for MDBs configured with "trans-attribute" set to "Required". This works fine with SwiftMQ for inbound messaging (driving MDBs). WebLogic 7.0 doesn't support to send messages out of an MDB within the same XA transaction if the MDB is XA-driven by a foreign JMS provider such as SwiftMQ. WebLogic 8.1 does not have this limitation so you can use SwiftMQ to send messages as well.

WebLogic 6.1 with J2EE 1.3 Features

You can use SwiftMQ to drive MDBs only non-XA.

Resin 2.x

SwiftMQ integrates non-XA into Resin. Find a documentation here:

Resin's MDB configuration.

Orion Server 1.5.x, 2.x

Orion uses a ResourceProvider interface to plug-in foreign JMS providers in a non-XA manner. You can use the standard JMS Swiftlet to this.

Oracle OC4J

OC4J uses the same approach as Orion.

JOnAS

Check this How To.

JBoss

Check this How To.