Skip to content

Spring's JDBC connection access disables shared cache in EclipseLink [SPR-7753] #12409

Closed
@spring-projects-issues

Description

@spring-projects-issues

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:

Referenced from: commits e4753c9

2 votes, 5 watchers

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions