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)
--
View this message in context:
http://openjpa.208410.n2.nabble.com/how-to-lock-a-entity-with-pessmistic-lock-tp7583897.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.