This is my configuration (AS 7.1.1):
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
<resource-adapters>
<resource-adapter>
<archive>
swiftmq_jca16.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name="debugMode">
true
</config-property>
<connection-definitions>
<connection-definition class-name="com.swiftmq.connector.v16.outbound.ManagedConnectionFactoryImpl" jndi-name="java:/comp/env/CF" pool-name="SwiftMQConnectionFactoryPool">
<security>
<application/>
</security>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="com.swiftmq.jms.QueueImpl" jndi-name="java:/com/env/testqueue1" pool-name="testqueue1">
<config-property name="queueName">
testqueue1@router1
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>
This is an excerpt of the ra.xml for the outbound connection factories:
<outbound-resourceadapter>
<connection-definition>
<managedconnectionfactory-class>
com.swiftmq.connector.v16.outbound.ManagedConnectionFactoryImpl
</managedconnectionfactory-class>
<config-property>
<config-property-name>connectionFactoryName</config-property-name>
<config-property-type>java.lang.String</config-property-type>
<config-property-value>QueueConnectionFactory</config-property-value>
</config-property>
<config-property>
<config-property-name>userName</config-property-name>
<config-property-type>java.lang.String</config-property-type>
</config-property>
<config-property>
<config-property-name>password</config-property-name>
<config-property-type>java.lang.String</config-property-type>
</config-property>
<connectionfactory-interface>
javax.jms.QueueConnectionFactory
</connectionfactory-interface>
<connectionfactory-impl-class>
com.swiftmq.connector.v16.outbound.ConnectionFactoryImpl
</connectionfactory-impl-class>
<connection-interface>
javax.jms.QueueConnection
</connection-interface>
<connection-impl-class>
com.swiftmq.connector.v16.outbound.QueueConnectionImpl
</connection-impl-class>
</connection-definition>
<connection-definition>
<managedconnectionfactory-class>
com.swiftmq.connector.v16.outbound.ManagedConnectionFactoryImpl
</managedconnectionfactory-class>
<config-property>
<config-property-name>connectionFactoryName</config-property-name>
<config-property-type>java.lang.String</config-property-type>
<config-property-value>TopicConnectionFactory</config-property-value>
</config-property>
<config-property>
<config-property-name>userName</config-property-name>
<config-property-type>java.lang.String</config-property-type>
</config-property>
<config-property>
<config-property-name>password</config-property-name>
<config-property-type>java.lang.String</config-property-type>
</config-property>
<connectionfactory-interface>
javax.jms.TopicConnectionFactory
</connectionfactory-interface>
<connectionfactory-impl-class>
com.swiftmq.connector.v16.outbound.ConnectionFactoryImpl
</connectionfactory-impl-class>
<connection-interface>
javax.jms.TopicConnection
</connection-interface>
<connection-impl-class>
com.swiftmq.connector.v16.outbound.TopicConnectionImpl
</connection-impl-class>
</connection-definition>
<connection-definition>
<managedconnectionfactory-class>
com.swiftmq.connector.v16.outbound.ManagedConnectionFactoryImpl
</managedconnectionfactory-class>
<config-property>
<config-property-name>connectionFactoryName</config-property-name>
<config-property-type>java.lang.String</config-property-type>
<config-property-value>ConnectionFactory</config-property-value>
</config-property>
<config-property>
<config-property-name>userName</config-property-name>
<config-property-type>java.lang.String</config-property-type>
</config-property>
<config-property>
<config-property-name>password</config-property-name>
<config-property-type>java.lang.String</config-property-type>
</config-property>
<connectionfactory-interface>
javax.jms.ConnectionFactory
</connectionfactory-interface>
<connectionfactory-impl-class>
com.swiftmq.connector.v16.outbound.ConnectionFactoryImpl
</connectionfactory-impl-class>
<connection-interface>
javax.jms.Connection
</connection-interface>
<connection-impl-class>
com.swiftmq.connector.v16.outbound.ConnectionImpl
</connection-impl-class>
</connection-definition>
<transaction-support>XATransaction</transaction-support>
<authentication-mechanism>
<authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
<credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
</authentication-mechanism>
<reauthentication-support>false</reauthentication-support>
</outbound-resourceadapter>
As you see, class com.swiftmq.connector.v16.outbound.ManagedConnectionFactoryImpl is used to create 3 different Types of JMS connection factories (Queue, Topic and unified). If I now deploy and start the RA, it seems JBoss fetches all entries with the name of the specified ManagedConnectionFactory and creates a JNDI entry which fails because the name is already registered:
17:57:38,552 INFO [org.jboss.as.server.deployment] (MSC service thread 1-13) JBAS015876: Starting deployment of "swiftmq_jca16.rar"
17:57:38,905 INFO [stdout] (MSC service thread 1-4) [SwiftMQ | ManagedConnectionFactoryImpl, connectionFactoryName=QueueConnectionFactory]/createConnectionFactory, connectionManager=org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl@156a6be ...
17:57:38,906 INFO [stdout] (MSC service thread 1-4) [SwiftMQ | ManagedConnectionFactoryImpl, connectionFactoryName=QueueConnectionFactory]/createConnectionFactory, connectionManager=org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl@156a6be returns: com.swiftmq.connector.v16.outbound.ConnectionFactoryImpl@147bc1
17:57:38,907 INFO [org.jboss.as.deployment.connector] (MSC service thread 1-4) JBAS010406: Registered connection factory java:/comp/env/CF
17:57:38,910 INFO [stdout] (MSC service thread 1-4) [SwiftMQ | ManagedConnectionFactoryImpl, connectionFactoryName=TopicConnectionFactory]/createConnectionFactory, connectionManager=org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl@7c9b46 ...
17:57:38,910 INFO [stdout] (MSC service thread 1-4) [SwiftMQ | ManagedConnectionFactoryImpl, connectionFactoryName=TopicConnectionFactory]/createConnectionFactory, connectionManager=org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl@7c9b46 returns: com.swiftmq.connector.v16.outbound.ConnectionFactoryImpl@b635d7
17:57:38,911 INFO [org.jboss.as.deployment.connector] (MSC service thread 1-4) JBAS010406: Registered connection factory java:/comp/env/CF
17:57:38,913 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.ra.deployment."swiftmq_jca16.rar_1": org.jboss.msc.service.StartException in service jboss.ra.deployment."swiftmq_jca16.rar_1": org.jboss.msc.service.StartException in anonymous service: JBAS010446: Failed to start RA deployment [swiftmq_jca16]
...
Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.connector.connection-factory.java:/comp/env/CF is already registered
This seems to be a bug for me. Or is there a way to configure it?
Thanks,
Andreas