0
나는 다음과 같은 상황이 : 나는 두 번째 관리자에게상속을 사용할 때 EJB를 기본 구현으로 정의하는 방법은 무엇입니까?
@Inject
private ProjectManagerForLargeProjects pMFLP; // no problems, as expected
을 주입하려고하지만 기본 ProjectManager를 주입 할 때 컨테이너가 모르는 경우
@Stateless
public class ProjectManager{
...
}
@Stateless
public class ProjectManagerForLargeProjects extends ProjectManager{
...
}
그래서,이 잘 작동합니다 선택할 수있는 구현.
@Inject
private ProjectManager pM; // causes exception: WELD-001409 Ambiguous dependencies for type [ProjectManager] with qualifiers [@Default] at injection point ...
@Named를 사용하여 구현을 지정할 수 있지만 저는 ProjectManager가 ProjectManager의 기본값이라고 말하고 싶습니다. 쉬운 방법이 있습니까?
해결책 : @Inject 대신 @EJB를 사용했는데 모든 것이 예상대로 작동하지만 이유는 무엇입니까?
별도의 인터페이스를 사용하십시오. 그건 그렇고, 나는 당신이 겪고있는 문제가 코드 냄새에 대한 강한 징조라고 생각한다. –
흠 우리는 일부 기능을 가진 상태없는 빈을 제공하는 jee API를 사용하고 있습니다. 우리는 몇 가지 기능을 추가하고 싶습니다 ... 내 눈에 고전적인 상속을, JEE에서하지 않겠습니까? – Marcel
composition이 옵션이 아닌 경우 여기에있는 두 개의 유스 케이스에 대해 두 개의 별도 인터페이스를 사용하는 것이 바람직합니다 (또는 한정자에 의해 명시 적으로 구분되도록). –