4 Replies Latest reply on May 30, 2012 8:03 AM by jesper.pedersen

    Bug in creating ManagedConnectionFactory instance?

    amueller

      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