]
Stefano Maestri resolved JBJCA-1398.
------------------------------------
Resolution: Done
Connection leak when there is an exception during getConnection for
NoTransaction resource adapter
--------------------------------------------------------------------------------------------------
Key: JBJCA-1398
URL:
https://issues.redhat.com/browse/JBJCA-1398
Project: IronJacamar
Issue Type: Bug
Components: Core
Affects Versions: 1.0.31.Final, 1.0.38.Final, 1.4.10
Reporter: Stephen Fikes
Assignee: Stefano Maestri
Priority: Major
Labels: downstream_dependency
When an exception occurs with a {{NoTransaction}} resource adapter during a
{{getConnection}} attempt the pool leaks the connection. The exception (simulating a
timeout of the underlying connect attempt) detail is below.
{code}
... WARNING [support.jboss.ejb.session.SessionBean] (ServerService Thread Pool -- 51)
Failed to get a connection: IJ000456: Unchecked throwable in
ManagedConnection.getConnection()
cl=org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener@1a933f80[state=NORMAL
managed connection=support.redhat.jboss.jca.ManagedConnectionImpl@7a294431 connection
handles=0 lastUse=1575419355891 trackByTx=false
pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@1d6a5362 pool internal
context=SemaphoreArrayListManagedConnectionPool@2f47607f[pool=EisConnectionFactory]]:
javax.resource.ResourceException: IJ000456: Unchecked throwable in
ManagedConnection.getConnection()
cl=org.jboss.jca.core.connectionmanager.listener.NoTxConnectionListener@1a933f80[state=NORMAL
managed connection=support.redhat.jboss.jca.ManagedConnectionImpl@7a294431 connection
handles=0 lastUse=1575419355891 trackByTx=false
pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@1d6a5362 pool internal
context=SemaphoreArrayListManagedConnectionPool@2f47607f[pool=EisConnectionFactory]]
at
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:521)
at
support.redhat.jboss.jca.ConnectionFactoryImpl.getConnection(ConnectionFactoryImpl.java:61)
...
Caused by: javax.resource.ResourceException: Simulate timeout
at
support.redhat.jboss.jca.ManagedConnectionImpl.getConnection(ManagedConnectionImpl.java:61)
at
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:508)
...
{code}
There seems to be a difference in a {{NoTransaction}} and an {{XATransaction}} adapter
where {{returnConnection}} is triggered by the {{TxConnectionManagerImpl}}.
{code}
... [BMAN]
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.returnConnection(SemaphoreArrayListManagedConnectionPool.java:-1)
...
org.jboss.jca.core.connectionmanager.pool.AbstractPool.returnConnection(AbstractPool.java:633)
...
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.returnManagedConnection(AbstractConnectionManager.java:456)
...
org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionDisconnected(TxConnectionManagerImpl.java:515)
...
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:525)
{code}
For a {{NoTransaction}} adapter, however, the abstract implementation is used:
{code}
... [BMAN]
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.managedConnectionDisconnected(AbstractConnectionManager.java:697)
...
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:525)
{code}
The empty implementation for
[
AbstractConnectionManager.managedConnectionDisconnected|https://github.co...]
does nothing so the connection is not returned as it would be for a transactional
implementation.
I also see the same issue with IronJacamar 1.4.18.Final so this issue remains in the
latest release.