Использование Guice 3.0 в соответствии с этим руководством: https://code.google.com/p/google-guice/wiki/JPA
Класс GuiceModule:
public class GuiceModule extends ServletModule {
@Override
protected void configureServlets() {
// start the service
bind(JPAInitializer.class).asEagerSingleton();
// PersistFilter
filter("/*").through(PersistFilter.class);
// jpa + guice
install(new JpaPersistModule("drone-cloud"));
// bindings
bind(UserService.class).to(UserServiceImpl.class);
bind(TwoFactorAuthenticator.class).to(GoogleAuthenticator.class);
bind(ImageQueue.class).asEagerSingleton();
bind(DroneCloudServerHandler.class).asEagerSingleton();
}
}
JPAInitializer.класс
import javax.inject.Inject;
import com.google.inject.persist.PersistService;
public class JPAInitializer {
@Inject
JPAInitializer(PersistService service) {
service.start();
}
}
Класс контроллера:
@Consumes(MediaType.APPLICATION_JSON)
@Path("/mission")
public class MissionController {
@Inject
Provider<EntityManager> _em;
@Path("/new")
@POST
@Transactional
public String newMission(SimpleMission mission) {
_em.get().persist(mission);
_em.get().flush();
_em.get().close();
return "{ \"mission_id\": \"" + mission.getId() + "\" }";
}
}
И трассировка стека:
Что я делаю неправильно?
Спасибо
Проблема заключалась в том, что класс
public class GuiceModule extends ServletModule {
@Override
protected void configureServlets() {
// start the service
bind(JPAInitializer.class).asEagerSingleton();
// PersistFilter
filter("/*").through(PersistFilter.class);
// jpa + guice
install(new JpaPersistModule("drone-cloud"));
// bindings
bind(UserService.class).to(UserServiceImpl.class);
bind(TwoFactorAuthenticator.class).to(GoogleAuthenticator.class);
bind(ImageQueue.class).asEagerSingleton();
bind(DroneCloudServerHandler.class).asEagerSingleton();
}
}
управляется Джерси, а не Guice, поэтому он не был перехвачен классом import javax.inject.Inject;
import com.google.inject.persist.PersistService;
public class JPAInitializer {
@Inject
JPAInitializer(PersistService service) {
service.start();
}
}
.