當試圖建立一個鎖(悲觀),用下面的代碼:如何在Glassfish 2.1中實現對JPA的悲觀鎖定?
em.lock(controlnumbers, LockModeType.WRITE);
em.refresh(controlnumbers);
我得到以下異常:
[#|2009-09-10T15:42:48.324-0400|INFO|sun-appserver2.1|javax.enterprise.system.container.ejb|_ThreadID=31;_ThreadName=httpSSLWorkerThread-8080-19;|
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: javax.persistence.PersistenceException: ejb30-wrong-lock_called_without_version_locking-index (There is no English translation for this message.)
javax.persistence.PersistenceException: ejb30-wrong-lock_called_without_version_locking-index (There is no English translation for this message.)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.lock(EntityManagerImpl.java:619)
at com.sun.enterprise.util.EntityManagerWrapper.lock(EntityManagerWrapper.java:582)
at com.eximtechnologies.transactionserver.persistence.session.ControlNumbersFacade.lock(ControlNumbersFacade.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
我如何能實現悲觀鎖與Glassfish的2.1?
如果我想要樂觀鎖定,那就行了。正如問題所述,我想要悲觀鎖定。 :) – jsight 2009-09-11 15:54:01
根據EJB3規範,lock()僅支持具有@version屬性的實體。 – Jan 2009-09-11 19:31:48
@Jan - 很好,但沒有回答這個問題。 :)大多數容器都有能力支持悲觀鎖定(以某種特定容器的方式)。 Glassfish也是如此,通過查詢提示...... :) – jsight 2009-09-13 17:50:00