Я пытаюсь создать механизм стиля вставки, чтобы связать EE5 с другим фреймворком, который не поддерживает EJB-инъекцию. В настоящее время я использую пользовательский аннотацию и соглашение об именах для поиска EJB в JNDI:Поиск контейнера 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 для ввода всех возможных компонентов, к которым будет нужен доступный мне код. Затем обратитесь к EJB с JNDI и найдите его содержимое (псевдоконтент). Я включил этот комментарий в попытку предоставить любому, кто смотрит на этот вопрос, приемлемую альтернативу, но я не уверен, что он квалифицируется как ответ. – jake