Re: [J2EE] JPA PESSIMISTIC_WRITE

看板java作者 (KekeMonster)時間10年前 (2015/08/13 05:00), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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 方法裡看是否有效。 -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.62.129 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1439413232.A.E3A.html ※ 編輯: KekeMonster (1.169.62.129), 08/13/2015 05:02:18

08/13 08:32, , 1F
這我有試過 還試過persistence.xml 設在哪邊好像都沒效果@@
08/13 08:32, 1F
文章代碼(AID): #1LoxFmuw (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1LoxFmuw (java)