Description
James Sutherland opened SPR-7753 and commented
In the EclipseLinkJpaDialect Spring does the following,
@Override
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition)
throws PersistenceException, SQLException, TransactionException {
super.beginTransaction(entityManager, definition);
if (!definition.isReadOnly() && !this.lazyDatabaseTransaction) {
// This is the magic bit. As with the existing Spring TopLink integration,
// begin an early transaction to force EclipseLink to get a JDBC Connection
// so that Spring can manage transactions with JDBC as well as EclipseLink.
UnitOfWork uow = (UnitOfWork) getSession(entityManager);
uow.beginEarlyTransaction();
}
// Could return the UOW, if there were any advantage in having it later.
return null;
}
This is done to force EclipseLink to read through a transactional connection, so that it can see changes made directly through JDBC. But it has the side-affect of effectively disabling the shared cache in EclipseLink.
EclipseLink will no longer cache any objects read because a transactional connection is being used.
Which connection is used is configurable in EclipseLink by the user, so Spring should not be forcing any setting on the user, and not be using an internal API to do it.
The correct way to enable this is either to set the persistence unit property,
"eclipselink.jdbc.exclusive-connection.mode"="Always" (will allow a shared cache)
or
"eclipselink.transaction.join-existing"="true" (does not allow a shared cache)
If Spring desires different functionality than the EclipseLink defaults (not sure it should), then it should just default these properties if they have "not" already be configured by the user. This would allow the user to choose if they want caching to work or not.
Otherwise just remove this code and let the user configure if they wish to allow caching or not.
Affects: 4.1.1
Issue Links:
- EclipseLink does not support read-only database connections [SPR-7891] #12547 EclipseLink does not support read-only database connections
- EclipseLinkJpaDialect does not support declarative transaction isolation [SPR-12319] #16924 EclipseLinkJpaDialect does not support declarative transaction isolation
Referenced from: commits e4753c9
2 votes, 5 watchers