使用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
+0

非常感谢!如果只是工作:) 你在哪里启动PersistService? – mhaligowski 2011-03-13 11:37:03

+0

@halish:你可以在任何你想要的地方启动一个'PersistService'(当你的应用程序启动时,说)。在Web应用程序中,可以使用PersistFilter来完成,它在创建时启动服务,并在销毁时停止服务。在你自己的应用程序中,你需要在你做任何使用它的东西之前启动它。 – ColinD 2011-03-13 17:33:04