2017-12-13 39 views
0

작동하지 않습니다제이보스 11 : CDI 내가 매우 간단한 응용 프로그램을 작성했지만, 예상대로 CDI가 작동하지 않습니다

정의

@EJB private CustomerProviderSessionBeanLocal customerProvider; 

는 빈의 인스턴스에 연결되지 않습니다.

@SessionScoped @ManagedBean 
public class BackingBean { 
    @EJB private CustomerProviderSessionBeanLocal customerProvider; 

보스 수율 : 내 무 상태 세션 빈 (JSF에 대한)

@Local 
public interface CustomerProviderSessionBeanLocal { ... } 

@Stateless 
@EJB(name="ejb/CustomerProvider", beanInterface = CustomerProviderSessionBeanLocal.class, beanName = "CustomerProviderSessionBean") 
public class CustomerProviderSessionBean implements 
CustomerProviderSessionBeanLocal ... 

컨트롤러 콩의

정의 아직

java:global/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean!beans.CustomerProviderSessionBeanLocal

java:app/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean!beans.CustomerProviderSessionBeanLocal 
java:module/CustomerProviderSessionBean!beans.CustomerProviderSessionBeanLocal 
java:global/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean 
java:app/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean 
java:module/CustomerProviderSessionBean 

, customerProvider 속성이 초기화되지 않았습니다. 생성자가 호출되었습니다 (로그 파일에서 볼 수 있음). 몇 가지 변종 (이름/로컬 인터페이스 등)/함께 시도했다.

initialContext = new InitialContext(); 
Object o = initialContext.lookup("java:app/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean"); 

내가 제이보스 구성을 변경하지 않은 작동하지 않습니다 @의 EJB-주석에 동일한 JNDI 이름을 사용 : 사용하여 JNDI-조회 작업을 수행합니다!

아무도 도와 줄 수 있습니까?

+0

"new BackingBean()"으로 BinkingBean 인스턴스를 만든 경우 CDI가 작동하지 않습니다. 너? –

+0

backing bean 인스턴스는 JSF 액세스를 통해 자동으로 작성됩니다.

+4

EJB와 CDI를 아주 격렬하게 혼합합니다. 첫째, CDI 빈 (@SessionScoped BackingBean)은 @ ManagedBean 일 필요는 없다. 둘째로, CDI가 ('@ SessionScoped' 빈에서) 작업을 수행하게하려면'@ EJB' 대신'@Inject'를 시도하십시오. – Siliarus

답변

-1

JSF 컨트롤러가 CDI 대신 JSF 관리 빈 기능을 사용하고있는 것처럼 보입니다. 이 경우 @EJB이 올바르게 작동하지 않습니다.

@javax.inject.Named 
@javax.enterprise.context.SessionScoped 
public class BackingBean { 

    @EJB 
    private CustomerProviderSessionBeanLocal customerProvider; 

} 
+0

* "이 경우 @EJB는 올바르게 작동하지 않습니다"*이 문은 true가 아닙니다. '@ EJB'는 오랫동안 JSF 네이티브'@ ManagedBean'에서 항상 잘 작동했습니다. 유일하게 작동하지 않는 것은'@ Inject'이지만, OP는 그것을 전혀 사용하지 않습니다. OP의 문제는 지금까지 제공된 정보에서 보이지 않는 곳입니다. 내 생각 엔 OP가 실제로'@ PostConstruct' 대신 bean 생성자 내부의 EJB 인스턴스에 액세스하려고 시도하는 것입니다. 심지어 CDI로 마이그레이션한다고해서 문제가 해결되지는 않습니다. – BalusC

+0

설명해 주셔서 감사합니다. 나는 그 사실을 몰랐다. – chkal