[ https://issues.apache.org/jira/browse/OPENJPA-2904?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pawel Veselov updated OPENJPA-2904: ----------------------------------- Priority: Minor (was: Major) > OpenJPAEntityManager.getConnection() may lead to sudden connection closure > -------------------------------------------------------------------------- > > Key: OPENJPA-2904 > URL: https://issues.apache.org/jira/browse/OPENJPA-2904 > Project: OpenJPA > Issue Type: Bug > Affects Versions: 3.2.0, 3.2.1, 3.2.2 > Reporter: Pawel Veselov > Priority: Minor > > (looking at commit 05069dfee, but this code hasn't changed in ages). > There is a number of methods that chain to {{JDBCStore.getClientConnection()}} > * {{StoreManager.getClientConnection()}} > * {{StoreContext.getConnection()}} > * {{OpenJPAEntityManager.getConnection()}} > * {{EntityManagerImpl.unwrap()}} > Callers of these methods typically use the retrieved connection object for an > operation, and then let go of it, without any cleanup (as they are supposed > to). > However, {{JDBCStore.getClientConnection()}} implementation creates an > instance of {{JDBCStoreManager.ClientConnection}} class every time it's > called. These instances, considering how they are used, are therefore > short-lived > However, the implementation {{JDBCStoreManager.ClientConnection}} closes the > underlying connection object on finalization. > This has a relatively high chance of having the underlying connection closed > before it's actually properly released. > I don't necessarily know what the right fix for this is, but locally I will > just make ClientConnection a field of RefCountConnection, it's a lightweight > class so I can create it right away, then I'll have > {{JDBCStore.getClientConnection()}} just return that. There may be some > gotchas there, but I just need a quick solution because this suddenly became > a persistent problem. > I've overridden the pooled connection implementation to try to trace the > connection random connection closure that we are experiencing under some > random scenarios, and I attached an exception to the connection object when > it's closed, and I see when an attempt to use a closed connection happens - > it's because the GC closed it through {{JDBCStoreManager.ClientConnection}}. -- This message was sent by Atlassian Jira (v8.20.10#820010)