EJB事务回滚异常

5

我正在使用ejb-2,但遇到了以下异常。请问这是什么意思?可能的解决方案是什么:

错误(致命):EJB异常;嵌套异常为:
javax.ejb.TransactionRolledbackLocalException: 事务提交错误;嵌套异常为:
weblogic.transaction.internal.AppSetRollbackOnlyException

3个回答

2
尝试找出真正的异常。为此,将您的ejb转换为使用bean managed transaction。然后,您可以手动提交并捕获提交引发的异常。
WebLogic喜欢在使用容器管理的事务时隐藏在提交阶段抛出的异常。通常原因是数据库约束,在EJB层不知道,例如Oracle中的基于函数的唯一索引。

2
我曾经也遇到了同样的问题,现在我想和大家分享我的经验。确实,在上述异常中没有提及实际的异常信息。为了揭示这个异常,我使用了 wlspy.jar 工具。使用这个工具,我得到了配置日志文件中的内部 SQL 活动。由此,我得到了隐藏的 SQL 约束异常。
配置步骤: 1)将 wlspy.jar 添加到您的 WebLogic 服务器类路径中。 2)在数据库源中添加与 wlspy 相关的配置。
例如: jdbc:bea:DB2://db2host:50000;spyAttributes=(log=(file)/opt/bea/logs/mySpy.log;timestamp=yes) 之后重新启动您的 WebLogic 服务器并进行活动。您将在 mySoy.log 文件中获得与数据库相关的日志。在我的情况下,我得到了实际的约束异常。
请查看此链接: http://docs.oracle.com/cd/E21764_01/web.1111/e13753/spy.htm#JDBCD469

1
你应该将更改刷新到数据库中,然后ejb可能会显示真正的异常。如果不起作用,请在可能引起异常的点上加入刷新。通过这种方式,您可以保证找到真正的位置和异常的真正原因。

是的,flush 是如何强制将原始异常带到表面的方法。我确认这适用于使用 WebLogic 12.1.1 管理的容器管理实体 Bean。 - feder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接