代码之家  ›  专栏  ›  技术社区  ›  jsight TaherT

如何在Glassfish 2.1的JPA中实现悲观锁定?

  •  0
  • jsight TaherT  · 技术社区  · 16 年前

    当尝试设置锁(悲观)时,使用以下代码:

    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中实现悲观锁定?

    2 回复  |  直到 16 年前
        1
  •  2
  •   jsight TaherT    16 年前

    有一种特定于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;
    }
    

    推荐文章