Guice-Persist - “工作已经在这个线程上开始了。看起来你已经两次调用UnitOfWork.begin()而没有对它之间的end()进行平衡调用。”

时间:2012-06-08 00:31:57

标签: hibernate guice guice-servlet guice-persist

我们的应用程序是一个Java-GWT应用程序,它广泛使用Guice-Persist和Guice-Servlet。我们使用Guice-Persist的session-per-HTTPRequest功能从未出现过问题,这与Warp-persist最初使用的功能类似。

我们根据文档通过PersistFilter类过滤我们的webapp。我们的persistence.xml文件根据Guice文档here具有transaction-type =“RESOURCE_LOCAL”。

现在由于一些奇怪的原因,我们的PROD环境显示错误

“这个线程的工作已经开始。看起来你已经两次调用UnitOfWork.begin()而没有对它之间的end()进行平衡调用。”

enter image description here

看起来Guice-Persist不支持嵌套的工作单元。 LINK

我们最近也从hibernate 3.6.3.Final转到4.1.4.Final。不确定他是否会与guice有某种不相容......

在这一点上,我们完全不知道为什么会发生这种情况。

2 个答案:

答案 0 :(得分:3)

当Hibernate隐式打开事务时,我遇到了这种症状,因为我忘了在最外面的逻辑事务括号中添加@Transaction注释。

要确定问题,请在数据库层以及begin()和end()中设置断点,以发现在没有现有事务的情况下发生持久性(读取或写入无关紧要)的情况。

答案 1 :(得分:1)