0

我正在尝试创建一种注入样式机制,以将 EE5 绑定到另一个不支持 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。

4

1 回答 1

1

我不知道我是否理解您的问题,但是如果您想在 JNDI 注册表中查找一个对象,唯一的方法就是输入他的名字,因此,您必须知道该名称或依赖于名称约定。

EJB 注入内部是使用 JNDI 实现的,并且还依赖于名称约定。如果您使用不带参数的注解@EJB,容器将使用本地接口名称查找对象,或者您可以使用@EJB (name="myBeanJNDIbindigName") 显式指示使用的绑定名称

于 2013-06-20T01:27:19.163 回答