Java Mailing List Archive

http://www.gg3721.com/

Home » users.openjpa »

how to lock a entity with pessmistic lock?

zhourui

2013-05-14


Author LoginPost Reply
the entity default use optimisticLock in my application;

but in some case i want's other transactions cannot concurrently read or
write the entity.

so i try to use pessimistic lock. is that right?

60 row : entityManager.lock(origin,LockModeType.PESSIMISTIC_WRITE);

public InputModule get(String id) {
 try {
   InputModule origin = entityManager.find(InputModule.class, id);
   if (null != origin) {
     entityManager.lock(origin,LockModeType.PESSIMISTIC_WRITE);
     return origin;
   }
 } catch (Exception e) {
   logger.error("can't get InputModule instance" + id, e);
   ejbContext.setRollbackOnly();
 }
 return null;
}

but got error. how to lock a entity with pessmistic lock?
<openjpa-2.2.1.1-SNAPSHOT-r422266:1438134 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException:
无法获取对象“com.plasticmummy.ufsc20.entity.module.InputModule-2770DEBEC95D4DAE8B1D4FBDEF358FB0”上的锁定,耗时
-1 毫秒。
FailedObject:
com.plasticmummy.ufsc20.entity.module.InputModule-2770DEBEC95D4DAE8B1D4FBDEF358FB0
 at
org.apache.openjpa.jdbc.kernel.PessimisticLockManager.checkLock (PessimisticLockManager.java:232)
 at
org.apache.openjpa.jdbc.kernel.PessimisticLockManager.lockRow (PessimisticLockManager.java:144)
 at
org.apache.openjpa.jdbc.kernel.PessimisticLockManager.lockInternal (PessimisticLockManager.java:109)
 at
org.apache.openjpa.jdbc.kernel.MixedLockManager.lockInternal(MixedLockManager.java:76)
 at
org.apache.openjpa.kernel.VersionLockManager.commonLock (VersionLockManager.java:95)
 at
org.apache.openjpa.kernel.VersionLockManager.lock (VersionLockManager.java:71)
 at org.apache.openjpa.kernel.BrokerImpl.lock (BrokerImpl.java:3885)
 at
org.apache.openjpa.kernel.DelegatingBroker.lock (DelegatingBroker.java:1305)
 at
org.apache.openjpa.persistence.EntityManagerImpl.lock (EntityManagerImpl.java:1206)
 at
org.apache.openjpa.persistence.EntityManagerImpl.lock (EntityManagerImpl.java:1191)
 at
com.ibm.ws.jpa.management.JPAExEmInvocation.lock(JPAExEmInvocation.java:293)
 at
com.ibm.ws.jpa.management.JPAEntityManager.lock(JPAEntityManager.java:260)
 at
com.plasticmummy.ufsc20.service.module.InputModuleService.get(InputModuleService.java:60)
 at
com.plasticmummy.ufsc20.service.module.EJSLocalNSLInputModuleService_5cd28e4b.get(EJSLocalNSLInputModuleService_5cd28e4b.java)
 at
com.plasticmummy.ufsc20.scratchpad.timer.TestTimer1.automaticTimeout(TestTimer1.java:22)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at
sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:60)
 at
sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:37)
 at java.lang.reflect.Method.invoke (Method.java:611)
 at
com.ibm.ejs.container.TimedObjectWrapper.invokeCallback(TimedObjectWrapper.java:129)
 at com.ibm.ejs.container.TimerNpListener.doWork(TimerNpListener.java:293)
 at
com.ibm.ejs.container.TimerNpListener.doWorkWithRetries(TimerNpListener.java:171)
 at com.ibm.ejs.container.TimerNpListener.fired(TimerNpListener.java:141)
 at com.ibm.ws.asynchbeans.AlarmImpl.callListenerMethod(AlarmImpl.java:427)
 at com.ibm.ws.asynchbeans.timer.GenericTimer.run(GenericTimer.java:228)
 at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:1178)
 at com.ibm.ws.asynchbeans.AlarmImpl.runListenerAsCJWork(AlarmImpl.java:249)
 at com.ibm.ws.asynchbeans.am._Alarm.fireAlarm(_Alarm.java:333)
 at com.ibm.ws.asynchbeans.am._Alarm.run(_Alarm.java:230)
 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1815)



--
Sent from the OpenJPA Users mailing list archive at Nabble.com.
©2008 gg3721.com - Jax Systems, LLC, U.S.A.