Galera, estou usando o Guice como meu container DI, e estou com a seguinte situção:
Inicio meu injector da seguinte maneira:
injector = Guice.createInjector(new JpaPersistModule("puname"), new Module());
e tenho a classe Module:
class Module extends AbstractModule {
@Override
protected void configure() {
bind(ViagemRepository.class);
bind(GenericDao.class);
bind(AcompanhamentoService.class);
}
}
Com as seguintes classes:
@ImplementedBy(ViagemRepositoryImpl.class)
public interface ViagemRepository extends Repository<Viagem, Integer> {
List<Viagem> findAllOpen();
}
public class ViagemRepositoryImpl implements ViagemRepository {
private final GenericDao<Viagem, Integer> dao;
@Inject
public ViagemRepositoryImpl(GenericDao<Viagem, Integer> dao) {
this.dao = dao;
}
//...
}
public class GenericDao<T, PK> {
private final EntityManager manager;
@Inject
public GenericDao(EntityManager em) {
this.manager = em;
}
//...
}
E quando dou um getInstance dessa minha classe AcompanhamentoService, o seguinte erro ocorre: (DebugTest é a classe que criei somente para testar o DI)
Exception in thread "main" com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.NullPointerException
while locating com.google.inject.persist.jpa.JpaPersistService
while locating javax.persistence.EntityManager
for parameter 0 at br.com.valicode.nox.infra.persistence.GenericDao.<init>(GenericDao.java:28)
while locating br.com.valicode.nox.infra.persistence.GenericDao<br.com.valicode.nox.domain.entity.Viagem, java.lang.Integer>
for parameter 0 at br.com.valicode.nox.domain.repository.ViagemRepositoryImpl.<init>(ViagemRepositoryImpl.java:20)
while locating br.com.valicode.nox.domain.repository.ViagemRepositoryImpl
while locating br.com.valicode.nox.domain.repository.ViagemRepository
for parameter 0 at br.com.valicode.nox.domain.service.AcompanhamentoService.<init>(AcompanhamentoService.java:22)
while locating br.com.valicode.nox.domain.service.AcompanhamentoService
1 error
at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:977)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1003)
at br.com.valicode.nox.infra.DIContainer.getBean(DIContainer.java:28)
at DebugTest.main(DebugTest.java:20)
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:56)
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.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.InjectorImpl$3.get(InjectorImpl.java:736)
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.InjectorImpl$4$1.call(InjectorImpl.java:968)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1014)
at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:964)
Alguém já passou por isso?