我有一个由maven管理的应用程序,有两个模块:一个用于持久性,另一个用于webapp本身(gwt)。
我在持久性模块中的测试就像一个魅力,但是,在webapp中,当我多次执行相同的方法时,我得到了java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManager.
。
我使用guice-persist将实体管理器注入到我的DAO中,并且我所有的DAO方法都有@Transactional
注释。
在我的webapp中,我提出了: 公共类ScuvServletModule扩展了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异常或类似的东西。
任何帮助?
答案 0 :(得分:3)
我发现了问题。这是PersistFilter
。显然,它是一个Singleton,我的DAO也是单身,但是EntityManager不是。
所以,现在我注入一个Provider<EntityManager>
而不是EntityManager
,它就像一个魅力。