2011-11-08 9 views
1

GWT-PアプリケーションでHibernateのEntityManagerを使用しようとしています。GWT-P + JPA Hibernate EntityManager

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

(あなたはこの1のための提案を持っていない限り)だから私は他のアプローチをしようとしている:私はそれがClassCastExceptionを引き起こし提案PersistFilter

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

を使用することはできませんように

残念ながら、それが見えます。

私は仕事に最初のサービスを得るためにかなり接近していなければならないが、注入されたEntityManagerはいつも私は、セットアップ中にミスをした疑いがあるnull

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

です。

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

そして最後に私の最も重要な質問:どのように私はJPAを開始する。このようJpaPersistModuleを追加対(DispatchServletModule中)install(new JpaPersistModule("name"));を使用しての違いがあります。ドキュメントは、次のようにクラスをお勧め:

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(); 
} 

その後、あなたはserive停止することもcontextDestroyedを実装するために行くのデフォルトの実装:これらのメソッドの両方で

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

をそれがある前に、インジェクタ変数がローカルにキャッシュされていますgetInjector()メソッドから返されます。

+0

インジェクタは、コンテキストが初期化されるまでに実際に作成されますか? – pschuegr

関連する問題