[
https://issues.apache.org/jira/browse/OPENJPA-381?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12530491
]
Patrick Linskey commented on OPENJPA-381:
-----------------------------------------
The comments in this thread seem to discuss transaction isolation levels, and
not optimistic locking. However, the subject states that OpenJPA is not doing
optimistic locking. Maybe we can change the subject to better reflect the
problem described?
Regarding the problem itself: I don't understand what the issue is. OpenJPA
lets the container configure the default isolation level; the JPA spec
describes behavior at read-committed. The JPA spec does not prohibit higher
isolation levels, and to the best of my understanding, the optimistic locking
requirements of the spec are obeyed when using repeatable-read. So, the only
issue here is that in a WebSphere environment, the defaults might not allow as
much read-concurrency as is possible with different configurations.
Before going too far down this path, we should ascertain whether or not the
WebSphere drivers even allow changing the isolation level after a JTA-managed
transaction has begun.
> OpenJPA is not doing Optimistic locking when running in JEE evnironment
> -----------------------------------------------------------------------
>
> Key: OPENJPA-381
> URL: https://issues.apache.org/jira/browse/OPENJPA-381
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc
> Affects Versions: 1.0.0
> Environment: JEE
> Reporter: Daniel Lee
> Fix For: 1.1.0
>
>
> The follwoing code seems to be leaving isolation level to -1 (default)
> instead of setting a correct isolation level for the connections. I think
> this is not right because this is leaving the contianer to use its own
> default isolation level. It will be, for example, Repeatable-read when using
> IBM WebShpere.
> in DataSourceFactory.java:
> public static DecoratingDataSource installDBDictionary(DBDictionary dict,
> DecoratingDataSource ds, final JDBCConfiguration conf,
> boolean factory2) {
> ...
>
> ccd.setTransactionIsolation(conf.getTransactionIsolationConstant());
> ...
> }
> with the default value set in JDBCConfigurationImpl.java:
> public JDBCConfigurationImpl(boolean derivations, boolean loadGlobals) {
> super(false, false);
> String[] aliases;
> schema = addString("jdbc.Schema");
> schemas = addStringList("jdbc.Schemas");
> transactionIsolation = addInt("jdbc.TransactionIsolation");
> aliases = new String[]{
> "default", String.valueOf(-1),
> "none", String.valueOf(Connection.TRANSACTION_NONE),
> "read-committed", String.valueOf
> (Connection.TRANSACTION_READ_COMMITTED),
> "read-uncommitted", String.valueOf
> (Connection.TRANSACTION_READ_UNCOMMITTED),
> "repeatable-read", String.valueOf
> (Connection.TRANSACTION_REPEATABLE_READ),
> "serializable",
> String.valueOf(Connection.TRANSACTION_SERIALIZABLE)
> };
> transactionIsolation.setAliases(aliases);
> transactionIsolation.setDefault(aliases[0]);
> transactionIsolation.set(-1);
> transactionIsolation.setAliasListComprehensive(true);
> ...
> }
> The fix of this is to set it to "Read-Committed" which will make it in sync
> with JDBC direct connections.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.