JPA toplink-essential を使用して、REST Web アプリを構築しています。
1 つのエンティティを見つけて削除するサーブレットがあります。
以下のコードでは、サーブレット レベルで楽観的ロック例外をキャッチできると思っていましたが、そうではありません! 代わりに RollbackException がスローされ、それがドキュメントの内容です:
しかし、Netbean IDE GlassFish ログを見ると、どこかで optimisticLockException がスローされます。私のコードに引っかからないだけです。(私のシステムの印刷メッセージは表示されないので、そこに入っていないと確信しています。)
各パッケージを (もちろん一度に 1 つずつ) インポートしようとし、catch 句でテストしましたが、どちらの場合も、ログ エラーに「楽観的例外」と表示されていても、catch ブロックには入りません。
import javax.persistence.OptimisticLockException;
import oracle.toplink.essentials.exceptions.OptimisticLockException;
では、OptimisticLockException がスローされる場所はどこですか?????
@Path("delete")
@DELETE
@Consumes("application/json")
public Object planDelete(String content) {
try {
EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();
EntityTransaction txn = em.getTransaction();
txn.begin();
jObj = new JSONObject(content);
MyBeany bean = em.find(123);
bean.setVersion(Integer.parseInt(12345));
em.remove(bean);
//here commit!!!!!
em.getTransaction().commit();
}
catch(OptimisticLockException e) { //this is not caught here :(
System.out.pritnln("here");
//EntityTransactionManager.rollback(txn);
return HttpStatusHandler.sendConflict();
}
catch(RollbackException e) {
return HttpStatusHandler.sendConflict();
}
catch(Exception e) {
return HttpStatusHandler.sendServerError(e);
}
finally {
if(em != null) {
em.close();
}
}
エラー メッセージ:
[TopLink Warning]: 2011.01.28 05:11:24.007--UnitOfWork(22566987)
--Exception [TOPLINK-5006]
(Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))):
oracle.toplink.essentials.exceptions.OptimisticLockException
[TopLink Warning]: 2011.02.01 08:50:15.095--UnitOfWork(681660)--
javax.persistence.OptimisticLockException: Exception [TOPLINK-5006] (Oracle TopLink
Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))):
oracle.toplink.essentials.exceptions.OptimisticLockException