2009-09-10 3 views
0

다음 코드를 사용하여, 설정에 (비관적) 잠금을 시도 할 때 :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) 

가 어떻게 글래스 피시 2.1 비관적 잠금을 구현할 수 있습니까?

답변

2

TopLink Essentials를 (GF 2.1 기본값)이 작업을 수행하는 특정 방법 :

public MyObject lock (MyObject controlnumbers) { 
    String qStr = "select object(o) from MyObject as o where o.pk = :pk"; 
    Query q = em.createQuery(qStr); 
    q.setParameter("pk", "a"); 
    q.setHint("toplink.pessimistic-lock", "Lock"); 
    controlnumbers = (MyObject)q.getSingleResult(); 
    return controlnumbers; 
} 

나는 절전 모드를 호출하면 em.lock이 실제로 작동한다고 믿는다.

0

수업에 대한지도를 표시 할 수 있습니까? 그것은 당신이 version 속성이 누락처럼 ...

http://en.wikibooks.org/wiki/Java_Persistence/Locking#Timestamp_Locking

감사에서 봐 월 보이는

있습니다
+0

낙천적 인 잠금을 원하면 작동합니다. 의문의 여지가 있듯이, 나는 비관적 인 잠금을 원한다. :) – jsight

+0

EJB3 스펙에 따르면 lock()은 @version 속성이있는 엔티티에서만 지원됩니다. – Jan

+0

@Jan - 좋지만 질문에 대답하지 않습니다. :) 대부분의 컨테이너에는 비관적 인 잠금을 지원하는 기능이 있습니다 (일부 컨테이너의 경우 특정 방식으로). 글래스 피쉬는 쿼리 힌트를 통해 ... – jsight

관련 문제