EJB 주입을 지원하지 않는 다른 프레임 워크에 EE5를 연결하는 주입 스타일 메커니즘을 생성하려고합니다. 현재 내가 JNDI에서 EJB를 찾기 위해 사용자 정의 주석 및 명명 규칙을 사용하고 있습니다 :EJB 컨테이너에서 특정 인터페이스 구현을 검색하십시오.
@ContainerResource
private LocalListener listener;
@Initialize
public void init(){
new Injection<InjectionAction>().inject(this);
}
주입 클래스 :
public class Injection<T> {
public void inject(T clazz) {
for(Field field : clazz.getClass().getDeclaredFields()){
if(field.isAnnotationPresent(ContainerResource.class)){
Object resource = findResource(field);
try {
field.setAccessible(true);
field.set(clazz, resource);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private Object findResource(Field field) {
Object resource = null;
try {
InitialContext ic = new InitialContext();
resource = ic.lookup(field.getType().getSimpleName()+ "Impl/local");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resource;
}
}
내가 더 강력한을 찾을 싶습니다 메서드를 사용하여 명명 규칙을 사용하지 않고 해당 컨테이너의 로컬 인터페이스를 기반으로 컨테이너를 검색합니다.
나는 가장 가능성이 높습니다. 내 작업에서 다른 경로. 그 결정에 앞서, 내가 생각하고 있던 아이디어 중 하나는 사용자 정의 코드가 액세스 할 수있는 가능한 모든 빈을 주입하는 일종의 집계기 EJB를 작성하는 것이었다. 그런 다음 EJB를 JNDI로 참조하고 그 내용 (의사 컨텍스트)을 검색하십시오. 나는이 질문을 보는 누군가에게 실행할 수있는 대안을 제공하려는 시도에이 의견을 포함 시켰지만, 답으로서의 자격이 있는지 확신 할 수 없다. – jake