gpt4 book ai didi

java - 搜索 EJB 容器以获取特定接口(interface)的实现

转载 作者:行者123 更新时间:2023-12-01 14:25:30 25 4
gpt4 key购买 nike

我正在尝试创建一种注入(inject)样式机制,将 EE5 与另一个不支持 EJB 注入(inject)的框架联系起来。目前我正在使用自定义注释和命名约定在 JNDI 中查找 EJB:

    @ContainerResource
private LocalListener listener;

@Initialize
public void init(){
new Injection<InjectionAction>().inject(this);
}

注入(inject)类:

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;



}

}

我想找到一种更健壮的方法,不依赖命名约定,根据本地接口(interface)在容器中搜索 EJB。

最佳答案

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

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

关于java - 搜索 EJB 容器以获取特定接口(interface)的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17200664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com