]
Jesper Pedersen updated JBJCA-1310:
-----------------------------------
Workaround Description: Use
mcp="org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool"
Workaround: Workaround Exists
Priority: Critical (was: Major)
Thanks for the file. Could you rerun with the Tracer on (<tracer
enabled="true">) ? You will see TRACE statements with IJTRACER in them. Also
attach the file instead of pasting into comments.
We need to figure out where the getConnectionListener() becomes null
NPE when validating database connection (and the validation failed)
if connection pool statistics is enabled
------------------------------------------------------------------------------------------------------------
Key: JBJCA-1310
URL:
https://issues.jboss.org/browse/JBJCA-1310
Project: IronJacamar
Issue Type: Bug
Components: Core
Affects Versions: WildFly/IronJacamar 1.3.2.Final, 1.2.6.Final
Reporter: Hugh Nguyen
Assignee: Jesper Pedersen
Priority: Critical
- An xa-datasource connection pool is configured with: statistic-enabled=true,
validate-on-match=true
- When validation failed, after the failure, the following is logged:
{code}
2016-02-10 12:23:12,580 WARN
[org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Sched1_Worker-13) IJ000621:
Destroying connection that could not be validated: null
{code}
- This appears to come from SemaphoreConcurrentLinkedDequeManagedConnectionPool.java,
line 436:
{code}
log.destroyingConnectionNotValidated(clw.getConnectionListener());
{code}
- So apparently clw.getConnectionListener() is null at this point, causing line 441/442
to throw NPE, if statistics is enabled:
{code}
pool.getInternalStatistics().deltaTotalPoolTime(lastUsed -
clw.getConnectionListener().getLastReturnedTime());
{code}
- NPE is caught by the catch clause, and line 456 write the following to the log:
{code}
2016-02-10 12:23:12,580 WARN
[org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Sched1_Worker-13) IJ000613:
Throwable while trying to match managed connection, destroying connection: null:
java.lang.NullPointerException
at
org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:441)
at
org.jboss.jca.core.connectionmanager.pool.AbstractPool.getTransactionNewConnection(AbstractPool.java:708)
at
org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:607)
at
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:590)
at
org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:429)
at
org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:747)
{code}
- However, this catch clause try to do the same thing that cause the NPE in line 461/462
{code}
pool.getInternalStatistics().deltaTotalPoolTime(lastUsed -
clw.getConnectionListener().getLastReturnedTime());
{code}
- And finally this NPE is throw all the way out to the user of the connection