我正在试图弄清楚如何在CDI中使用构造函数注入,其中一个参数是JNDI查找。
通过正常的现场注入,我可以执行以下操作:
@Stateless
public class Publisher
{
@Inject
@JMSConnectionFactory("java:/jms/remoteCF")
private JMSContext context;
@Resource(lookup="java:global/remote")
private InitialContext externalContext;
private Topic genericTopic;
@PostConstruct
public void init(){
try {
Object obj = externalContext.lookup(TOPIC);
genericTopic = (javax.jms.Topic) obj;
} catch (NamingException namingException) {
}
}
}
但是,我想将此bean切换为构造函数注入。不幸的是,我无法弄清楚如何创建一个注入externalContext
资源的构造函数,因为它是一个JNDI查找。
示例:
@Inject
public Publisher( @JMSConnectionFactory("java:/jms/remoteCF") JMSContext context, @Resource( "java:global/remote") InitialContext externalContext ){
this.context = context;
this.externalContext = externalContext;
}
但@Resource
不是允许的注释作为参数。
如何指定externalContext
参数是通过JNDI查找检索的bean?我在哪里指定JNDI名称?
答案 0 :(得分:2)
您有两种选择。
@Produces
@Named(TOPIC)
public Topic findTopic(JMSContext context) {
return context.createTopic(TOPIC);
}
然后将其注入构造函数
InitialContext
创建一个制作人字段/限定符。
@Produces
@Named("someName")
@Resource("java:global/remote")
private InitialContext externalContext;