Re: [J2EE] JPA PESSIMISTIC_WRITE

楼主: KekeMonster (KekeMonster)   2015-08-13 05:00:29
※ 引述《luoqr (.....)》之铭言:
: 以下是EJB的两个function,我用 client 产生两个thread分别呼叫
: EJB 的 test1() 和 test2():
: 照理来说,test1()中把 u lock 起来后,睡了十秒的期间执行了 test2()
: 而 test2() 理论上想要把同一笔资料再锁起来时应该要发生
: LockTimeoutException 才对啊?
: 可是我试的结果却是 test2() 会停在那等十秒过了,然后 test1() commit
: 接着再从 after lock2 做下去然后 commit?
: 请问有高手用过 PESSIMISTIC_WRITE 吗?
: 另外设定了 javax.persistence.lock.timeout 好像也没屁用 @@
: 不知道是不是我用错了什么?
: client 端:
: Thread t1: ejb.test1()
: Thread t2: ejb.test2()
: 呼叫程序:
: t1.start();
: Thread.sleep(1000) ;
: t2.start();
: @Override
: @TransactionAttribute(TransactionAttributeType.REQUIRED)
: public void test1() {
: User u = em.find(User.class, 1);
: System.out.println("lock1");
: em.lock(u, LockModeType.PESSIMISTIC_WRITE);
: System.out.println("after lock1");
: sleep(10000) ;
: u.setOrders("X");
: System.out.println("update X");
: }
: @Override
: @TransactionAttribute(TransactionAttributeType.REQUIRED)
: public void test2() {
: User u = em.find(User.class, 1);
: Map<String,Object> p = new HashMap<String,Object>();
: p.put("javax.persistence.lock.timeout", 1000);
: System.out.println("lock2");
: em.lock(u, LockModeType.PESSIMISTIC_WRITE,p);
: System.out.println("after lock2");
: u.setOrders("Y");
: System.out.println("update Y");
: }
没用过,
不过参考 http://www.objectdb.com/java/jpa/persistence/lock 描述,
" A lock mode can also be set for a query in order to lock all the query resul
t objects."
可以试试将 javax.persistence.lock.timeout 设定套用在 test1 方法里看是否有效。
作者: luoqr (.....)   2015-08-13 08:32:00
这我有试过 还试过persistence.xml 设在哪边好像都没效果@@

Links booklink

Contact Us: admin [ a t ] ucptt.com