Balconsky
Balconsky

Reputation: 2244

Openjpa lock does not work

In a project with OpenJPA 2.1 and oracle database I use mixed lock mode, which default has optimistic locking but can use pessimistic as well. But it does not work for me as I expected. So I wrote small test for openjpa locking.

Persistance.xml config:

<properties>

    <property name="openjpa.Optimistic" value="false" />
    <property name="openjpa.LockManager" value="mixed" /> 
<!--    <property name="openjpa.LockManager"value="mixed(VersionCheckOnReadLock=true,VersionUpdateOnWriteLock=true)" /> -->
    <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
    <property name="openjpa.slice.ConnectionDriverName" value="oracle.jdbc.OracleDriver" />
    <property name="openjpa.slice.ConnectionURL" value="jdbc:oracle:thin:******" />
    <property name="openjpa.slice.ConnectionUserName" value="user" />
    <property name="openjpa.slice.ConnectionPassword" value="userpassword" />
    <property name="openjpa.jdbc.SynchronizeMappings" value="validate" />
    <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)" />
    <property name="openjpa.Log"
        value="DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=TRACE" />
</properties>

My simple test code:

Configuration config = entityManager.find(Configuration.class, 10025984L);
entityManager.lock(config, LockModeType.PESSIMISTIC_WRITE);

In sql trace is see, that after lock method calling OpenJPA does not execute any additional query to database. Single sql query:

TRACE  [Thread-7] openjpa.jdbc.SQL - <t 874198043, conn 1773300146> executing prepstmnt 1809148885 SELECT t0.VERSION FROM Configuration t0 WHERE t0.ID = ? [params=?] 

What I do wrong and how can I get lock for one entity instance?

Upvotes: 1

Views: 523

Answers (1)

Balconsky
Balconsky

Reputation: 2244

I found soulution. The reason was in JPA settings. I just remove property:

<property name="openjpa.Optimistic" value="false" />

And everything became work fine.

Upvotes: 2

Related Questions