OptimisticLockException

OptimisticLockException

我正在使用JPA toplink-essential,正在构建REST Web应用程序。

我有一个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

最佳答案

不是100%肯定,但是可能是您正在捕获javax.persistence.OptimisticLockException(请注意该软件包),但是由于抛出的异常是oracle.toplink.essentials.exceptions.OptimisticLockException,因此没有被捕获?即使异常类的名称相同,但它们也不是同一类。

09-11 18:36