GWT-P + JPA Hibernate EntityManager - PullRequest
       15

GWT-P + JPA Hibernate EntityManager

1 голос
/ 08 ноября 2011

Я пытаюсь использовать Hibernate EntityManager в приложении GWT-P.

К сожалению, похоже, что я не могу использовать предложенный 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).

1 Ответ

0 голосов
/ 14 мая 2012

Что касается вашего "самого важного вопроса", то, что 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 ().

...