Hello,
I can't get JPA + Guice + Eclipselink to work. I've tried all solutions
available, but this might be a bug:
@Override
protected void configure() {
install(new JpaPersistModule(PERSISTENCE_UNIT_NAME));
final MyInitializer initializer = new MyInitializer();
requestInjection(initializer);
initializer.go();
System.out.println("next");
install(new DaoModule());
}
private static class MyInitializer {
@Inject
public PersistService service;
public void go() {
System.out.println("OKAY 1");
service.start();
System.out.println("OKAY 2");
}
}
Prints:
Aug 13, 2013 10:20:53 PM com.google.inject.internal.MessageProcessor visit
> INFO: An exception was caught and reported. Message:
> java.lang.NullPointerException
> java.lang.NullPointerException
> at
> de.chaosfisch.uploader.persistence.PersistenceModule$MyInitializer.go(PersistenceModule.java:53)
> at
> de.chaosfisch.uploader.persistence.PersistenceModule.configure(PersistenceModule.java:38)
> at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
> at
> com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
> at com.google.inject.AbstractModule.install(AbstractModule.java:118)
> at
> de.chaosfisch.uploader.UploaderModule.configure(UploaderModule.java:44)
> at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
> at
> com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
> at com.google.inject.spi.Elements.getElements(Elements.java:101)
> at
> com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133)
> at
> com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
> at com.google.inject.Guice.createInjector(Guice.java:95)
> at com.google.inject.Guice.createInjector(Guice.java:72)
> at
> com.cathive.fx.guice.GuiceApplication.init(GuiceApplication.java:103)
> at
> com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:296)
> at
> com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
> at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
> at java.lang.Thread.run(Thread.java:724)
>
>
@Override
protected void configure() {
install(new JpaPersistModule(PERSISTENCE_UNIT_NAME));
bind(MyInitializer.class).asEagerSingleton();
System.out.println("next");
install(new DaoModule());
bind(IAccountService.class).to(AccountServiceImpl.class).in(Singleton.class);
bind(IUploadService.class).to(UploadServiceImpl.class).in(Singleton.class);
bind(IPlaylistService.class).to(PlaylistServiceImpl.class).in(Singleton.class);
bind(ITemplateService.class).to(TemplateServiceImpl.class).in(Singleton.class);
}
private static class MyInitializer {
@Inject
public MyInitializer(final PersistService service) {
System.out.println("OKAY 1");
service.start();
System.out.println("OKAY 2");
}
}
Prints:
next
> Exception in Application init method
> Exception in thread "main" java.lang.RuntimeException: Exception in
> Application init method
> at
> com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:398)
> at
> com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
> at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
> at java.lang.Thread.run(Thread.java:724)
> Caused by: com.google.inject.CreationException: Guice creation errors:
>
> 1) Error in custom provider, java.lang.NullPointerException
> while locating com.google.inject.persist.jpa.JpaPersistService
> while locating javax.persistence.EntityManager
> for field at
> de.chaosfisch.uploader.persistence.dao.AccountDaoImpl.entityManager(AccountDaoImpl.java:25)
> while locating de.chaosfisch.uploader.persistence.dao.AccountDaoImpl
> at
> de.chaosfisch.uploader.persistence.dao.DaoModule.configure(DaoModule.java:26)
> while locating de.chaosfisch.uploader.persistence.dao.IAccountDao
> for parameter 0 at
> de.chaosfisch.uploader.persistence.AccountServiceImpl.<init>(AccountServiceImpl.java:25)
> while locating de.chaosfisch.uploader.persistence.AccountServiceImpl
> at
> de.chaosfisch.uploader.persistence.PersistenceModule.configure(PersistenceModule.java:39)
> while locating de.chaosfisch.google.account.IAccountService
> for parameter 1 at
> de.chaosfisch.google.youtube.upload.metadata.AbstractMetadataService.<init>(AbstractMetadataService.java:63)
> while locating
> de.chaosfisch.google.youtube.upload.metadata.AbstractMetadataService
> at
> de.chaosfisch.uploader.UploaderModule.mapServices(UploaderModule.java:79)
> while locating
> de.chaosfisch.google.youtube.upload.metadata.IMetadataService
> for parameter 0 at
> de.chaosfisch.uploader.persistence.UploadServiceImpl.<init>(UploadServiceImpl.java:28)
> while locating de.chaosfisch.uploader.persistence.UploadServiceImpl
> at
> de.chaosfisch.uploader.persistence.PersistenceModule.configure(PersistenceModule.java:40)
> while locating de.chaosfisch.google.youtube.upload.IUploadService
> for field at
> de.chaosfisch.uploader.GuiUploader.uploadService(GuiUploader.java:41)
> at
> com.cathive.fx.guice.GuiceApplication$1.configure(GuiceApplication.java:89)
> Caused by: java.lang.NullPointerException
> at
> com.google.inject.persist.jpa.JpaPersistService.begin(JpaPersistService.java:70)
> at
> com.google.inject.persist.jpa.JpaPersistService.get(JpaPersistService.java:50)
> at
> com.google.inject.persist.jpa.JpaPersistService.get(JpaPersistService.java:34)
> at
> com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:55)
> at
> com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53)
> at
> com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110)
> at
> com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94)
> at
> com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
> at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
> at
> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
> at com.google.inject.Scopes$1$1.get(Scopes.java:65)
> at
> com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
> at
> com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
> at
> com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
> at
> com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84)
> at
> com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
> at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
> at
> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
> at com.google.inject.Scopes$1$1.get(Scopes.java:65)
> at
> com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
> at
> com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
> at
> com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
> at
> com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84)
> at
> com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
> at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
> at
> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
> at com.google.inject.Scopes$1$1.get(Scopes.java:65)
> at
> com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
> at
> com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
> at
> com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
> at
> com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84)
> at
> com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
> at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
> at
> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
> at
> com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
> at com.google.inject.Scopes$1$1.get(Scopes.java:65)
> at
> com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
> at
> com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53)
> at
> com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110)
> at
> com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75)
> at
> com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73)
> at
> com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
> at
> com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73)
> at
> com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:147)
> at
> com.google.inject.internal.Initializer.injectAll(Initializer.java:92)
> at
> com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:173)
> at
> com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109)
> at com.google.inject.Guice.createInjector(Guice.java:95)
> at com.google.inject.Guice.createInjector(Guice.java:72)
> at
> com.cathive.fx.guice.GuiceApplication.init(GuiceApplication.java:103)
> at
> com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:296)
> at
> com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
> at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
> at java.lang.Thread.run(Thread.java:724)
>
I'm doing everything that is required. The singleton however isn't bound
eagerly.
Bug?
Regards,
Dennis Fischer
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.