使用Hibernate和Guice管理JavaSE中的事务
问题描述:
我正在编写一个使用GWT,Hibernate和Google Guice(使用GIN)的相当简单的应用程序。我想要做的是使用外部管理器进行事务管理(例如在Spring中使用@Transactional
),而不是使用EntityManager#getTransaction
。我尝试使用@Transactional
,但它似乎不适用于我。使用Hibernate和Guice管理JavaSE中的事务
我的EntityManager已经使用Providers
,这样的注射:
/* import stuff */
public class DbProvider implements Provider<EntityManager> {
public EntityManager get() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persdb");
return emf.createEntityManager();
}
}
看来手动管理的事务时才能正常工作。我希望自动管理事务,也可以使用DBUnit进行自动化测试。
有谁知道如何解决?
答
有@Transactional
工作吉斯requires three things:
- 您需要
guice-persist.jar
在类路径 - 上被称为
@Transactional
方法必须由吉斯创建对象 - 的方法一定不能
private
非常感谢!如果只是工作:) 你在哪里启动PersistService? – mhaligowski 2011-03-13 11:37:03
@halish:你可以在任何你想要的地方启动一个'PersistService'(当你的应用程序启动时,说)。在Web应用程序中,可以使用PersistFilter来完成,它在创建时启动服务,并在销毁时停止服务。在你自己的应用程序中,你需要在你做任何使用它的东西之前启动它。 – ColinD 2011-03-13 17:33:04