4

현재 IBM Websphere Application Server 7 (Java EE 5)에서 실행되는 작은 EJB 응용 프로그램을 개발 중입니다. 응용 프로그램은 주로 DB에 변환되어 저장되는 들어오는 MQ 메시지를 수신하는 하나의 MDB로 구성됩니다. 현재는 구성, 매핑, 데이터 소스 조회 등을 공유하기 위해 많은 Singleton/Factories를 사용하고 있습니다.하지만 실제로는 코드를 테스트하기가 매우 어렵습니다. 이 솔루션은 guice/spring과 같은 (간단한) DI 프레임 워크를 사용하여 다른 인스턴스를 주입 할 수 있습니다. 문제는 초기화/설정 코드를 어디에 둘 것인지? 응용 프로그램의 주요 진입 점은 어디입니까? 인스턴스를 MDB에 어떻게 삽입 할 수 있습니까? 봄을 사용EJB/MDB 응용 프로그램의 DI

답변

1

, 당신은 당신이 그것을 읽을 수 있는지 확인하십시오, EJB3 인터셉터를 통해 그것을 할주의 사항이 javadoc에에에 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html#ejb-implementation-ejb3

유용한 정보를 볼 수 있습니다 http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.html

+0

안녕하세요. 불행히도 저는 DI를 위해 Guice를 사용하고 있습니다. 하지만 당신도 요격 수 있습니다. 나는 그것을 시도 할 것이다 ... 여기에서 문제는 "단일"AppContext/Injector를 시작하는 방법과 방법과 인터셉터에서 그것을 액세스하는 방법이다. 싱글 톤으로?! – Ingo

+0

@Ingo 나는 Guice를 직접 사용하지 않았지만 Guice 주사기 '홀더'가 될 (세션) bean의 사용법을 설명하는 게시물입니다 : [http://attias.myftp.org/attias/index.php/Guice_and_EJB ], [http://musingsofaprogrammingaddict.blogspot.com/2009/03/guice-tutorial-part-3-integrating-guice.html], [http://a-developer-life.blogspot.com/2010/11 /injecting-into-ejb3-with-google-guice.html] – francisnovilla

2

가에서 백 오프를보고 가치가있을 수도 있습니다 Guice를 사용하고 Java EE 5에서 이미 사용 가능한 주입 메커니즘으로 작업하려고합니다.

적절한 "시작점"을 찾는 데있어 불행히도 EJB 사양은 시작시 Bean을 실행할 수있는 방법을 정의하지 않습니다. 그러나, EE 사양의 웹 프로파일은 하나를 가지고 - 당신은 당신의 응용 프로그램에 WAR를 추가하고, 서블릿 리스너 구성 요소를 설정할 수 있습니다 응용 프로그램이로드 될 때마다

http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContextListener.html

당신은 시작하려면이 옵션을 설정할 수 있습니다 컨테이너 (WebSphere)에 의해 시작됩니다. 클래스 로더 문제에주의하십시오.

+0

JEE 5 인젝션은 일반적인 자바 클래스가 아닌 EJB에서만 작동 한다는데 문제가 있습니다. 시작 지점에 관해서. 예, ServletContextListener를 사용하는 것이 가능할 것이라고 생각하지만 웹 앱이 없으므로 서블릿을 작성하십시오. 그러나 StartupBeans와 Interceptors를 사용하여 적어도 WebSphere에 대한 솔루션을 발견했습니다. 하지만 여전히, 나는 "Singleton"을 사용하여 Injector에 액세스해야한다고 생각합니다 ... – Ingo

+0

서블릿을 추가하면 JEE 5를 사용하는 것보다 훨씬 더 많은 작업을 수행 할 수 있습니다. StartupBeans를 사용하면 더 나을 것이지만, 일반적으로 사람들이 독점적 인 확장 기능을 사용하지 못하게하려고합니다. JBoss 등을 지원해야하는 언젠가는 재 설계가 필요합니다. 가능한 경우, WAS8을 사용하십시오. 싱글 톤 bean을 정의하는 JEE6/EJB3.1을 지원합니다. – Renan

+0

+는 요격기 사용시 게임 체인저입니다. 그래서 슬프게도 EJB 스펙을 포함하기에는 너무 오랜 시간이 걸렸다. – Renan