Generic Resource Adapter 1.5 for JMS is a Java EE Connector 1.5 resource adapter that can wrap the JMS client library of external JMS providers such as IBM Websphere MQ, Tibco EMS, and Sonic MQ among others, and thus integrate any JMS provider with a Java EE 5 application server such as Sun Java System Application Server. The adapter is a.rar archive that can be deployed and configured using a Java EE 5 application server's administration tools.
Application Server's administration tools can be used to deploy and configure the generic resource adapter for JMS. This section explains how to configure Generic Resource Adapter for JMS with Sun Java System Application Server.
Overall, the Resource Adapter can be configured to indicate whether the JMS provider supports XA or not. It is also possible to indicate what mode of integration is possible with the JMS provider. Two modes of integration are supported by the resource adapter. The first one uses JNDI as the means of integration. In this case, administered objects are set up in the JMS provider's JNDI tree and will be looked up for use by the generic resource adapter. If that mode is not suitable for integration, it is also possible to use the Java reflection of JMS administered object javabean classes as the mode of integration.
You can use the Admin Console or the command-line to configure the resource adapter. This is not different from configuring any other resource adapter.
Prior to deploying the resource adapter, JMS client libraries should be made available to the application server. For some JMS providers, client libraries may also include native libraries. In such cases, these native libraries should also be made available to the application server JVM(s).
Deploy the generic resource adapter the same way you would deploy a connector module.
Create a connector connection pool.
Create a connector resource.
Create an administered object resource.
Make the following changes to the security policy in the Application Server:
Modify sjsas_home/domains/domain1/config/server.policy to add java.util.logging.LoggingPermission "control"
Modify sjsas_home/lib/appclient/client.policy to add permission javax.security.auth.PrivateCredentialPermission "javax.resource.spi.security.PasswordCredential ^ \"^\"","read":
The following table presents the properties to be used while creating the resource adapter.
Property Name |
Valid Values |
Default Value |
Description |
---|---|---|---|
ProviderIntegrationMode |
javabean/jndi |
javabean |
Decides the mode of integration between the resource adapter and the JMS client. |
ConnectionFactoryClassName |
Name of the class available in the application server classpath, for example: com.sun.messaging.ConnectionFactory |
None |
Class name of javax.jms.ConnectionFactory implementation of the JMS client. Used if ProviderIntegrationMode is javabean. |
QueueConnectionFactoryClassName |
Name of the class available in the application server classpath, for example: com.sun.messaging.QueueConnectionFactory |
None |
Class name of javax.jms.QueueConnectionFactory implementation of the JMS client. Used if ProviderIntegrationMode is javabean. |
TopicConnectionFactoryClassName |
Name of the class available in the application server classpath , for example: com.sun.messaging.TopicConnectionFactory |
None |
Class name of javax.jms.TopicConnectionFactory implementation of the JMS client. Used if ProviderIntegrationMode is specified as javabean. |
XAConnectionFactoryClassName |
Name of the class available in application server classpath , for example: com.sun.messaging.XAConnectionFactory |
None |
Class name of javax.jms.ConnectionFactory implementation of the JMS client. Used if ProviderIntegrationMode is specified as javabean. |
XAQueueConnectionFactoryClassName |
Name of the class available in application server classpath , for example: com.sun.messaging.XAQueueConnectionFactory |
None |
Class name of javax.jms.XAQueueConnectionFactory implementation of the JMS client. Used if ProviderIntegrationMode is specified as javabean. |
XATopicConnectionFactoryClassName |
Name of the class available in application server classpath , for example: com.sun.messaging.XATopicConnectionFactory |
None |
Class name of javax.jms.XATopicConnectionFactory implementation of the JMS client. Used if ProviderIntegrationMode is javabean. |
TopicClassName |
Name of the class available in application server classpath , for example: com.sun.messaging.Topic |
None |
Class Name of javax.jms.Topic implementation of the JMS client. Used if ProviderIntegrationMode is javabean. |
QueueClassName |
Name of the class available in application server classpath , for example: com.sun.messaging.Queue |
None |
Class Name of javax.jms.Queue implementation of the JMS client. Used if ProviderIntegrationMode is specified as a javabean. |
SupportsXA |
True/false |
FALSE |
Specifies whether the JMS client supports XA or not. |
ConnectionFactoryProperties |
Name value pairs separated by comma |
None |
Specifies the javabean property names and values of the ConnectionFactory of the JMS client. Required only if ProviderIntegrationMode is javabean. |
JndiProperties |
Name value pairs separated by comma |
None |
Specifies the JNDI provider properties to be used for connecting to the JMS provider's JNDI. Used only if ProviderIntegrationMode is jndi. |
CommonSetterMethodName |
Method name |
None |
Specifies the common setter method name that some JMS vendors use to set the properties on their administered objects. Used only if ProviderIntegrationMode is javabean. In the case of Sun Java System Message Queue, this property is named setProperty. |
UserName |
Name of the JMS user |
None |
User name to connect to the JMS Provider. |
Password |
Password for the JMS user |
None |
Password to connect to the JMS provider. |
RMPolicy |
ProviderManaged or OnePerPhysicalConnection |
ProviderManaged |
The isSameRM method on an XAResource is used by the Transaction Manager to determine if the Resource Manager instance represented by two XAResources are the same. When RMPolicy is set to ProviderManaged (the default value), the JMS provider is responsible for determining the RMPolicy and the XAResource wrappers in the Generic Resource Adapter merely delegate the isSameRM call to the message queue provider's XA resource implementations. This should ideally work for most message queue products. Some XAResource implementations such as IBM MQ Series rely on a resource manager per physical connection and this causes issues when there is inbound and outbound communication to the same queue manager in a single transaction (for example, when an MDB sends a response to a destination). When RMPolicy is set to OnePerPhysicalConnection, the XAResource wrapper implementation's isSameRM in Generic Resource Adapter would check if both the XAResources use the same physical connection, before delegating to the wrapped objects. |
ManagedConnectionFactory properties are specified when a connector-connection-pool is created. All the properties specified while creating the resource adapter can be overridden in a ManagedConnectionFactory. Additional properties available only in ManagedConnectionFactory are given below.
Property Name |
Valid Value |
Default Value |
Description |
---|---|---|---|
ClientId |
A valid client ID |
None |
ClientID as specified by JMS 1.1 specification. |
ConnectionFactoryJndiName |
JNDI Name |
None |
JNDI name of the connection factory bound in the JNDI tree of the JMS provider. The administrator should provide all connection factory properties (except clientID) in the JMS provider itself. This property name will be used only if ProviderIntegratinMode is jndi. |
ConnectionValidationEnabled |
true/false |
FALSE |
If set to true, the resource adapter will use an exception listener to catch any connection exception and will send a CONNECTION_ERROR_OCCURED event to application server. |
Properties in this section are specified when an administered object resource is created. All the resource adapter properties can be overridden in an administered resource object. Additional properties available only in the administered object resource are given below.
Property Name |
Valid Value |
Default Value |
Description |
---|---|---|---|
DestinationJndiName |
JNDI Name |
None |
JNDI name of the destination bound in the JNDI tree of the JMS provider. The Administrator should provide all properties in the JMS provider itself. This property name will be used only if ProviderIntegrationMode is jndi. |
DestinationProperties |
Name value pairs separated by comma |
None |
Specifies the javabean property names and values of the destination of the JMS client. Required only if ProviderIntegrationMode is javabean. |
Properties in this section are specified in the Sun-specific deployment descriptor of MDB as activation-config-properties. All the resource adapter properties can be overridden in an Activation Spec. Additional properties available only in ActivationSpec are given below.
Property Name |
Valid Value |
Default Value |
Description |
---|---|---|---|
MaxPoolSize |
An integer |
8 |
Maximum size of server session pool internally created by the resource adapter for achieving concurrent message delivery. This should be equal to the maximum pool size of MDB objects. |
MaxWaitTime |
An integer |
3 |
The resource adapter will wait for the time in seconds specified by this property to obtain a server session from its internal pool. If this limit is exceeded, message delivery will fail. |
SubscriptionDurability |
Durable or Non-Durable |
Non-Durable |
SubscriptionDurability as specified by JMS 1.1 specification. |
SubscriptionName |
deferrinf |
None |
SubscriptionName as specified by JMS 1.1 specification. |
MessageSelector |
A valid message selector |
None |
MessageSelector as specified by JMS 1.1 specification. |
ClientID |
A valid client ID |
None |
ClientID as specified by JMS 1.1 specification. |
ConnectionFactoryJndiName |
A valid JNDI Name |
None |
JNDI name of connection factory created in JMS provider. This connection factory will be used by resource adapter to create a connection to receive messages. Used only if ProviderIntegrationMode is configured as jndi. |
DestinationJndiName |
A valid JNDI Name |
None |
JNDI name of destination created in JMS provider. This destination will be used by resource adapter to create a connection to receive messages from. Used only if ProviderIntegrationMode is configured as jndi. |
DestinationType |
javax.jms.Queue or javax.jms.Topic |
Null |
Type of the destination the MDB will listen to. |
DestinationProperties |
Name-value pairs separated by comma |
None |
Specifies the javabean property names and values of the destination of the JMS client. Required only if ProviderIntegrationMode is javabean. |
RedeliveryAttempts |
integer |
3 |
Number of times a message will be delivered if a message causes a runtime exception in the MDB. |
RedeliveryInterval |
time in seconds |
1 |
Interval between repeated deliveries, if a message causes a runtime exception in the MDB. |
SendBadMessagesToDMD |
true/false |
False |
Indicates whether the resource adapter should send the messages to a dead message destination, if the number of delivery attempts is exceeded. |
DeadMessageDestinationJndiName |
a valid JNDI name. |
None |
JNDI name of the destination created in the JMS provider. This is the target destination for dead messages. This is used only if ProviderIntegrationMode is jndi. |
DeadMessageDestinationClassName |
class name of destination object. |
None |
Used if ProviderIntegrationMode is javabean. |
DeadMessageDestinationProperties |
Name Value Pairs separated by comma |
None |
Specifies the javabean property names and values of the destination of the JMS client. This is required only if ProviderIntegrationMode is javabean. |
ReconnectAttempts |
integer |
1000 |
Number of times a reconnect will be attempted in case exception listener catches an error on connection. |
ReconnectInterval |
time in seconds |
1 |
Interval between reconnects. |