ari-ban / glassfish-genericjmsra

0 stars 0 forks source link

genericjmsra gets ClassCastException because it tries to cast always javax.jms.ConnectionFactory #55

Closed arinban closed 6 years ago

arinban commented 11 years ago

Creating connections to Tibcos javax.jms.XAConnectionFactory implementation fails because genericjmsra casts all ConnectionFactory objects to javax.jms.ConnectionFactory. But javax.jms.XAConnectionFactory does not extend javax.jms.ConnectionFactory, see https://java.net/jira/browse/JMS_SPEC-71.

The Tibco class com.tibco.tibjms.naming.TibjmsFederatedXAConnectionFactory also implements only javax.jms.XAConnectionFactory and so a ClassCastExcpetion happens.

Exception Stacktrace: com.sun.appserv.connectors.internal.api.PoolingException: com.tibco.tibjms.naming.TibjmsFederatedXAConnectionFactory cannot be cast to javax.jms.ConnectionFactory at com.sun.enterprise.resource.pool.datastructure.RWLockDataStructure.addResource(RWLockDataStructure.java:103) at com.sun.enterprise.resource.pool.ConnectionPool.addResource(ConnectionPool.java:282) at com.sun.enterprise.resource.pool.ConnectionPool.createResourceAndAddToPool(ConnectionPool.java:1512) at com.sun.enterprise.resource.pool.ConnectionPool.createResources(ConnectionPool.java:944) at com.sun.enterprise.resource.pool.ConnectionPool.initPool(ConnectionPool.java:230) at com.sun.enterprise.resource.pool.ConnectionPool.internalGetResource(ConnectionPool.java:511) at com.sun.enterprise.resource.pool.ConnectionPool.getResource(ConnectionPool.java:381) at com.sun.enterprise.resource.pool.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:245) at com.sun.enterprise.resource.pool.PoolManagerImpl.getResource(PoolManagerImpl.java:170) at com.sun.enterprise.connectors.ConnectionManagerImpl.getResource(ConnectionManagerImpl.java:332) at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:301) ... 95 more Caused by: com.sun.appserv.connectors.internal.api.PoolingException: com.tibco.tibjms.naming.TibjmsFederatedXAConnectionFactory cannot be cast to javax.jms.ConnectionFactory at com.sun.enterprise.resource.pool.ConnectionPool.createSingleResource(ConnectionPool.java:924) at com.sun.enterprise.resource.pool.ConnectionPool.createResource(ConnectionPool.java:1189) at com.sun.enterprise.resource.pool.datastructure.RWLockDataStructure.addResource(RWLockDataStructure.java:98) ... 105 more Caused by: java.lang.ClassCastException: com.tibco.tibjms.naming.TibjmsFederatedXAConnectionFactory cannot be cast to javax.jms.ConnectionFactory at com.sun.genericra.outbound.AbstractManagedConnectionFactory.initializeConnectionFactory(AbstractManagedConnectionFactory.java:182) at com.sun.genericra.outbound.AbstractManagedConnectionFactory.createManagedConnection(AbstractManagedConnectionFactory.java:118) at com.sun.enterprise.resource.allocator.ConnectorAllocator.createResource(ConnectorAllocator.java:160) at com.sun.enterprise.resource.pool.ConnectionPool.createSingleResource(ConnectionPool.java:907) ... 107 more

Connection Pool definition from glassfish-resources.xml

Environment

Glassfish 3.1.2, Tibco EMS 6.1

Affected Versions

[2.1b]

arinban commented 6 years ago
arinban commented 11 years ago

@glassfishrobot Commented Reported by ahe

arinban commented 11 years ago

@glassfishrobot Commented ahe said: Patch to avoid this cast: Index: AbstractManagedConnectionFactory.java

— AbstractManagedConnectionFactory.java (Revision 234) +++ AbstractManagedConnectionFactory.java (Arbeitskopie) @@ -81,6 +81,7 @@ private boolean useProxyMessages = false; //disabled by default private PrintWriter logWriter; private ConnectionFactory connectionFactory = null;

public AbstractManagedConnectionFactory() { @@ -136,7 +137,7 @@ javax.jms.Connection physicalCon = null;

if (this.getSupportsXA())

{ - physicalCon = createXAConnection(pc, this.connectionFactory); + physicalCon = createXAConnection(pc, this.xAConnectionFactory); }

else

{ physicalCon = createConnection(pc, this.connectionFactory); }

@@ -145,7 +146,7 @@ }

protected abstract javax.jms.XAConnection createXAConnection(

protected abstract javax.jms.Connection createConnection( PasswordCredential pc, ConnectionFactory cf) throws JMSException; @@ -161,7 +162,7 @@ protected abstract String getActualConnectionFactoryClassName();

private void initializeConnectionFactory() throws ResourceException {

Index: ManagedJMSConnectionFactory.java

— ManagedJMSConnectionFactory.java (Revision 234) +++ ManagedJMSConnectionFactory.java (Arbeitskopie) @@ -39,7 +39,7 @@ }

protected javax.jms.XAConnection createXAConnection(PasswordCredential pc,

protected XAConnection createXAConnection(PasswordCredential pc,

protected XAConnection createXAConnection(PasswordCredential pc,

arinban commented 11 years ago

@glassfishrobot Commented liang.x.zhao said: JMS_SPEC-71 will clarify if XAConnectionFactory should extend ConnectionFactory.

arinban commented 11 years ago

@glassfishrobot Commented Issue-Links: depends on JMS_SPEC-71

arinban commented 7 years ago

@glassfishrobot Commented This issue was imported from java.net JIRA GENERICJMSRA-55

arinban commented 6 years ago

Closing this as this issue is migrated to https://github.com/ari-ban/test1/issues/55