2017-11-16 3 views
1

내 프로젝트 techstack은 다음과 같습니다 JavaEE 어플 (8), 제이보스,이 같은 제이 보스 과 구조 :JavaEE 8에 같은 이름의 인터페이스 2 개를 삽입 할 수 있습니까?

companycontext 
    - company 
    - workplace 
    - employee 
    - web (beans.xml here) 

내가 기업직장 프로젝트 모두에서 EmployeeAdapter 인터페이스를 가지고있다. CDI는 모든 프로젝트의 모든 콩을 발견 할 것입니다 때문에 그래서 지금은 오류

A component named 'EmployeeAdapterImpl' is already defined in this module 

를 얻을 수 있습니다 내 솔루션 이름과 같은 : ComEmployeeAdapter, WorkEmployeeAdapter ... 내가 같은 것을 사용할 수 @ 나는 그것이 우리의 어댑터 이름을 규칙보다 훨씬 더 생각

// Implement 
@Stateless @Named("company") 
EmployeeAdapterImpl implement EmployeeAdapter 

// Using 
@Inject @Named("company") private EmployeeAdapter 

// Implement 
@Stateless @Named("workplace") 
EmployeeAdapterImpl implement EmployeeAdapter 

// Using 
@Inject @Named("workplace") private EmployeeAdapter 

을 명명.

대단히 감사합니다.

+0

죄송합니다. 그리고 작동하지 않습니다. 각 프로젝트마다 EmployeeAdapter 인터페이스가 있습니다. –

+1

클래스 이름을 다르게 지정해야합니다. 'CompanyEmployeeAdapterImpl'을 호출하고 한정자와 함께 다음과 같이 사용합니다 :'@Qualifier ("CompanyEmployeeAdapterImpl") private EmployeeAdapter a'' – Lino

+0

그리고 다른 클래스에 대해서는 똑같이 – Lino

답변

2

이것은 EJB 문제가 아니라 EJB 문제입니다.

CDI 빈 유형은 정규화 된 클래스 이름으로 정의되므로 서로 다른 패키지에 같은 이름의 빈이 두 개 있으면 문제가 없습니다.

두 개의 EmployeeAdapterImpl 빈이 비 상태 세션 빈이므로 EJB 컨테이너는 JNDI 이름을 생성합니다. 당신은 생성 된 이름의

16:09:39.812 [MSC service thread 1-8] INFO org.jboss.as.ejb3.deployment - WFLYEJB0473: JNDI bindings for session bean named 'Foo' in deployment unit 'deployment "myapp.war"' are as follows: 

하나는 간단한 클래스 이름을 복용 형태

java:module/EmployeeAdapterImpl 

에게이 같은 메시지에서 제이보스 로그에 그들을 볼 수 있습니다, 그래서 이것은 귀하의 경우 충돌을 일으키는 .

@Stateless 주석의 name 또는 mappedName 요소를 사용해 볼 수 있습니다.

+0

이것은 원래의 진정한 솔루션처럼 들린다. 게시하다. CDI는 여기서 문제를 일으키지 않아야하지만 EJB는 문제를 일으키지 않습니다. 다른 JNDI를 생성하게 만드는 것이 한 가지 방법입니다. – Siliarus

+0

@Stateless (name = "CompanyEmployeeAdapterImpl")를 사용하여 이름을 지정해야합니다. bean name : company.EmployeeAdapterImpl 패키지와 같은 것을 기대하고있다. 설명해 주셔서 감사합니다. –

관련 문제