2

我有一个由 maven 管理的应用程序,它有两个模块:一个用于持久性,另一个用于 webapp 本身(gwt)。

我在持久性模块中的测试就像一个魅力,但是,在 webapp 中,当我多次执行相同的方法时,我得到了一个java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManager..

我使用 guice-persist 将实体管理器注入到我的 DAO 中,并且我所有的 DAO 方法都有@Transactional注释。

在我的 webapp 中,我放了一个: public class ScuvServletModule extends ServletModule {

    @Override
    protected void configureServlets() {
       super.configureServlets();
       install(MyPersistenceAPI.getModule()); // return my module and install it
       filter("/*").through(PersistFilter.class);
       /// another bindings...
    }
}

如果我删除PersistFilter,它会工作,但会随机抛出 Transaction Closed 异常或类似的东西。

有什么帮助吗?

4

1 回答 1

3

我发现了问题。它是PersistFilter. 显然,它是一个单例,我的 DAO 也是单例,但 EntityManager 不是。

所以,现在我注入 a Provider<EntityManager>instead EntityManager,它就像一个魅力。

于 2012-05-07T20:30:30.163 回答