2013-10-04 2 views
1

내 POJO 클래스에 Singleton EJB를 삽입하려고합니다. 새로운 EJB 3.1 스펙을 사용하면 EJB를 POJO에 삽입 할 수 있습니까? EJB 3.0에서 @EJB 주석을 사용하여 EJB를 삽입 할 수 있지만 간단한 POJO에서는 작동하지 않습니다. @javax.inject.Inject도 나를 위해 작동하지 않습니다.싱글 톤 EJB (컨테이너 자원)를 POJO (비 컨테이너 자원)에 삽입하는 방법은 무엇입니까?

한 가지 더 중요한 것은 컨테이너와 비 컨테이너 리소스의 차이점은 무엇입니까? 어떻게 구현합니까? JBoss AS 7.1.1을 사용하고 있습니다.

+0

마지막 질문은 불완전합니다. 무엇의 차이점은 무엇입니까? –

+0

@Inject를 사용하려면 beans.xml 파일이 있어야합니다. 이것을 참조하십시오 : http://www.seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt – Sergio

+0

Thanks bkail and Chechus, 죄송합니다. 마지막 질문을 놓치 셨습니다 ... 제 질문은 컨테이너 자원과 비 컨테이너 자원의 차이점은 무엇입니까? 가능한 경우 plz가 어떤 예를 제안하는지 ... –

답변

2

@EJB은 작동하지 않으므로 JNDI 조회 또는 CDI의 두 가지 옵션 만 사용할 수 있습니다. 예 :

@Inject 
private MyEJB ejb; 

과 같은 것이 좋습니다. CDI 컨테이너를 활성화하려면 폴더에 beans.xml이 있는지 확인하십시오.

차이점은 - 예외가있는 경우 거의 동일합니다 (@Inject을 사용하는 것이 좋지만). 원격 콩 주입에는 여전히 @EJB을 사용해야합니다. 컨테이너가이 개체의 컨트롤에 더 이상 있기 때문에 더 주입이 클래스의 작성 후 peformed되지 않음을 의미한다 - 당신이 service = new ServiceClass();를 사용할 수없는 이유

이유는 service 오브젝트가 컨테이너에 의해 관리되지 않을 것입니다. 아주 순진하게도 당신이

@Inject 
ServiceClass service; 

용기, 새로운 인스턴스를 생성 한 후 주사를 수행하고 그것을 반환 할 경우 말했다.

+0

Thanks Petr, 나는 당신의 접근법에 따라 이미 시도했다. 어떤 서블릿이 EJB를 주입하려고한다면 잘 작동한다. 하지만 서블릿 "doget"메소드 및 POJO 클래스 내부에 POJO 클래스의 객체를 만들 때마다 EJB를 반환하려고 시도 할 때 null이 반환됩니다. –

+0

나뿐만 아니라 코드를 부착하고있다 : 서블릿의 doGet 방법 : ---> 보호 무효의 doGet (HttpServletRequest의 요청, HttpServletResponse를 응답) ServletException을, IOException가 { \t ServiceClass 서비스 = 새로운 ServiceClass()을 던졌습니다; \t service.contactEJB(); } ServiceClass는 다음과 같습니다. @Inject 개인 ITestSingletonEJB testSingletonEJB; public void contactEJB() { \t testSingletonEJB.doProcessing(); } –

+0

Plz 내게 알려줘 내가 실수 한 경우, Eagrly ur 회신을 기다리고 :) –

6

EE는 구성 요소 클래스 (EJB, 서블릿 등)를 기반으로 설계되었습니다. EE 컨테이너는 POJO에 적용되지 않는 객체 생성을 제어 할 때만 주입을 수행 할 수 있으므로 POJO 객체에 EE 주입을 사용할 수 없습니다.

CDI가 작동하려면 보관 파일에 META-INF/beans.xml을 추가해야합니다. 그렇더라도 new을 사용하여 POJO 인스턴스를 만들 수는 없습니다. 컨테이너는 항상 인스턴스를 생성해야하므로 @Inject POJO를 호출 할 수 있습니다. 그러면 EJB가 @Inject이되거나 javax.enterprise.inject.spi.BeanManager을 사용할 수 있습니다.

+0

고마워 bkail과 Chechus, 마지막 질문을 놓친 죄송합니다 ... 내 질문은, 1) 컨테이너 리소스와 비 컨테이너 리소스의 차이점은 무엇입니까? ? 가능한 경우 plz는 어떤 예를 제안합니다 ... - 2) CDI의 프로듀서 방법 사용은 무엇입니까? –