我正在使用JPA toplink-essential,构建REST Web应用程序。如何在servlet级别捕获OptimisticLockException?
我有一个servlet,它找到一个实体,并删除它。
下面的代码,我想我能赶上乐观锁定异常的servlet的水平,但它不是! 而是抛出RollbackException,这就是文档所说的:
但是当我看到Netbean IDE GlassFish日志时,在某处引发了optimisticLockException。这只是没有被我的代码陷入。 (不会被显示在我的系统打印的消息,所以我敢肯定,它在那里不走了。)
我试图导入每包(一个在课程的时间),并与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
好点。我在上面的代码中捕获了javax.persistence.OptimisticLockException。我改变了我的catch子句来捕获oracle.toplink.essentials.exceptions.OptimisticLockException,但它一直没有捕获。我在帖子中添加了错误消息。它显示了两种类型的包..非常令人困惑 – 2011-01-31 23:52:43