2011-11-08 155 views
1

我試圖在GWT-P應用程序中使用Hibernate的EntityManagerGWT-P + JPA Hibernate EntityManager

不幸的是,它看起來像我不能使用提出PersistFilter

public class MyModule extends ServletModule { 
    protected void configureServlets() { 
    install(new JpaPersistModule("myJpaUnit")); // like we saw earlier. 
    filter("/*").through(PersistFilter.class); 
    } 
} 

它會導致ClassCastException

org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider cannot be cast to org.hibernate.service.jdbc.connections.spi.ConnectionProvider 

所以我想其他的方法(除非你有這一個建議)。

我必須非常接近獲得第一的服務工作,但注入的EntityManager總是null

public class ImageMetaDataService { 
    @Inject EntityManager em; 
    @Transactional 
    public void createNewImageMetaData(ImageMetaDataImpl imd) { 
     em.persist(imd); 
    } 
} 

我懷疑我做的設置是錯誤的。是否有使用install(new JpaPersistModule("name"));(在DispatchServletModule)與加入JpaPersistModule這樣的區別:

public class MyGuiceServletContextListener extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new ServerModule(), new DispatchServletModule(), new JpaPersistModule("name")); 
    } 
} 

最後我的最重要的問題:如何將我開始JPA。文檔建議這樣的類:

public class MyInitializer { 
     @Inject MyInitializer(PersistService service) { 
       service.start(); 
       // At this point JPA is started and ready. 
     } 
} 

但我不明白如何做到這一點(在GWT-P)。

+0

您是否找到解決方案? –

回答

0

關於你的「最重要的問題」,MyGuiceServletContextListener是一個ServletContextListener。過騎

public void contextInitialized(ServletContextEvent servletContextEvent) { 
     persistService = injector.getInstance(PersistService.class); 
     persistService.start(); 
} 

那麼你會想,也能實現contextDestroyed停止serive默認實現:

@Override 
public void contextDestroyed(ServletContextEvent contextEvent) { 
    if (persistService != null) { 
     persistService.stop(); 
    } 
} 

在這兩種方法中,注射變量本地緩存之前,它是從getInjector()方法返回。

+0

注入器實際上是在上下文初始化時創建的嗎? – pschuegr

相關問題