Guice 주입에 대한 내 게시물에서 매우 좋은 답변을 얻은 후에 Guice에 EntityManagers를 주입하는 데 도움을 줄 수 있는지 알고 싶습니다.guice로 EntityManager를 삽입
이미 Guice JPA에 관한 문서 https://github.com/google/guice/wiki/JPA을 읽었습니다. 내 코드 (나는 내 작품에 대한 제공이 필요) 다음과 같다 :
공급자 : DatabaseControllerImplementation의
public class DatabaseControllerProvider implements Provider<DatabaseControllerInterface> {
private final Provider<EntityManager> entityManagerProvider;
@Inject
public DatabaseControllerProvider(final Provider<EntityManager> manager) {
this.entityManagerProvider = manager;
}
@Override
public DatabaseControllerInterface get() {
return new DatabaseControllerImpl(entityManagerProvider.get());
}
}
생성자 :
public LogInFront() {
final Injector injector = Guice.createInjector(new ModuleBinder(), new JpaPersistModule("ATVPersistence"));
final PersistService persistService = persistenceInjector.getInstance(PersistService.class);
persistService.start();
logInService = injector.getInstance(LogInServiceInterface.class);
}
:이 전화
public class DatabaseControllerImpl implements DatabaseControllerInterface {
private final EntityManager em;
@Inject
public DatabaseControllerImpl(final EntityManager manager) {
this.em = manager;
}
}
최고 수준
내 데이터베이스로 JPAPersistService를 인스턴스화합니다.
나는 오류, 그 no Implementation for EntityManager was bound
을받을 수 있지만 내가
...
public LogInFront() {
final Injector injector = Guice.createInjector(new JpaPersistModule("ATVPersistence"));
final PersistService persistService = persistenceInjector.getInstance(PersistService.class);
persistService.start();
logInService = injector.getInstance(LogInServiceInterface.class);
}
를 호출하면 인스턴스는 데이터베이스가 잘 작동하고, 모든 좋은 쉽고, 제대로 작동합니다.
내 GuessModule에 문제가있는 것 같습니다. 위에서 볼 수 있듯이 new ModuleBinder()
을 호출하지 않으면 모든 것이 올바르게 작동합니다.
public class ModuleBinder extends AbstractModule {
@Override
protected void configure() {
bind(DatabaseControllerInterface.class).asEagerSingleton();
bind(AnalyzerInterface.class).asEagerSingleton();
bind(SystemAdministrationInterface.class).asEagerSingleton();
bind(LogInServiceInterface.class).asEagerSingleton();
}
}
----------------------------- 편집 ------------- ------------------------
위 섹션을 씁니다.
Tl; dr edition : ModuleBinder가 EntityManager 주입을 왜곡합니까?
--------------------------- 오류 발견 ----------------- --------------
나는 멍청한 느낌, 나는 오류를 발견. ModuleBinder
을 살펴보면 모든 것을 EagerSingleton
으로 바인딩하지만 분명히 EntityManager
은 존재하지 않습니다 (Injector를 만든 후에 PersistService가 시작됨). 나는 이것에 새로운 포스트를 여기에서 창조했다 : JPAPersistenceModule Guice Injector
다른 사람들을 돕는 5 월! 나는 종류의 바보 같은 느낌이
안부,
JosefRucksack
코드에 일부 문제가있는 것은 아닙니다. Guice는 클래스 패스에 JPA를 구현하지 않았다고 말합니다. JPA 자체는 API 일 뿐이며 아무 것도하지 않습니다. API의 실제 구현 로직을 제공하려면 Hibernate, EclipseLink 또는 OpenJPA가 필요하다. – Gimby
나는 그것을 알고있다. EntityManagerFactory를 수동으로 생성하여 TomEE 외부에서 코드를 실행하면 잘 작동합니다. 서버를 실행하고 EntityManager에 액세스하려고 할 때 문제가 발생합니다. 또한, 엔티티 관리자를 삽입하려고하지 않을 때, '최종 PersistService persistService = persistenceInjector.getInstance (PersistService.class);'는 Persistence 유닛과 모든 것을 찾습니다. pom.xml에서 결함이 있는지 확인하고 싶습니까? – JosefRucksack