You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by "Roberto Cortez (JIRA)" <ji...@apache.org> on 2016/06/02 19:57:59 UTC
[jira] [Created] (TOMEE-1827) Possible
java.util.ConcurrentModificationException with
ValidatingGenericConnectionManager
Roberto Cortez created TOMEE-1827:
-------------------------------------
Summary: Possible java.util.ConcurrentModificationException with ValidatingGenericConnectionManager
Key: TOMEE-1827
URL: https://issues.apache.org/jira/browse/TOMEE-1827
Project: TomEE
Issue Type: Bug
Components: TomEE Core Server
Affects Versions: 7.0.0
Reporter: Roberto Cortez
Fix For: 7.0.1
When validating Resource Adapters connections with ValidatingGenericConnectionManager, there is a case that just hands over the pool object directly to the validate method, which may cause multiple Timer threads to change the connections Set.
For instance, the validate method might be iterating the connections set, while at the same time the FillTask Timer thread is filling the min pool. Both in the same object.
Here is the code:
{code:java}
else if (stack instanceof SinglePoolMatchAllConnectionInterceptor) {
connections = (Map<ManagedConnection, ManagedConnectionInfo>) pool;
}
...
final Set<ManagedConnection> invalids = ValidatingManagedConnectionFactory.class.cast(getManagedConnectionFactory())
.getInvalidConnections(connections.keySet());
{code}
This can happen depending on the logic implemented by the Resource Adapter in the getInvalidConnections method.
A workaround is to extend the Resource Adapter, override the getInvalidConnections and just place the original Set elements into a new Set and call the super method.
Reproduced here:
https://github.com/radcortez/tomee-resource-adapter
mvn test -Dtest=com.radcortez.tomee.ra.SampleResourceAdapterValidationTest
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)