2012-07-31 2 views
0

현재 Java 다중 모듈 프로젝트에서 DI를 통한 결합을 줄이려고합니다. 최소한 두 가지 모듈이 있습니다. 모듈 A는 Guice를 통해 모든 주사를하는 Clientside입니다. Modula A는 모듈 B의 클래스를 호출합니다.이 클래스는 주로 EJB이며 @EJB 주석을 통해 주입합니다. 모듈 A가 모듈 B에서 클래스를 호출하게하려면 JNDI 조회를 사용합니다. 나는 이제 JNDI를 없애고 guice를 통해 모듈 B의 클래스를 주입하려고 시도했다. 내가 할 때 @EJB는 더 이상 작동하지 않습니다. Guice를 통해이를 수행 할 수있는 솔루션이 있습니까?Guice로 @EJB 주입 시작

답변

1

콘솔에서 EJB에 액세스하는 테스트 시나리오에서만 가능합니다. 실제 애플 리케이션 클라이언트 코드는 절대로 빈에 직접 접근해서는 안된다. 또한 사용자 정의 인젝션을 작성하여 EJB 자원을 주입 할 수 있지만 EJB 컨테이너 (엔티티, 자원, 서비스 호출, 인터셉터, 트랜잭션) 외부에서 다르게 작동합니다. 일반적으로 말해 : 생산 코드에 guice 및 ejb 주입을 혼합하지 마십시오.

+0

정답은 Thx입니다. 그게 제가 Guice에 대해 알아야 할 전부입니다. JNDI가 유일한 방법입니까? 아이디어는 JNDI 물건이 정말 단단히 결합되어 있기 때문에 DI로 테스트하기가 더 쉬워졌습니다. –

+0

JNDI는 매우 느슨한 커플 링입니다. 클라이언트는 서비스 인터페이스만을 알고 있으며,이 인터페이스의 구체적인 구현은 jndi를 통해 찾아서 연결됩니다. –

+0

그 점에서 당신은 맞습니다. 그러나 JNDI가 직접 내 서비스를 호출하고 이것이 AppServer없이 별도의 테스트를 수행 할 때 문제가됩니다. 나는 이제 수업을 리팩터링하고 mockito를 사용하여 쉽게 조롱 할 수있는 여분의 수업에서 jndi 항목을 분리했습니다. –