Я пытаюсь понять, как использовать внедрение конструктора в 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) {
}
}
}
Однако я хотел бы переключить этот компонент на внедрение конструктора. К сожалению, я не могу понять, как создать конструктор, который внедряет мой ресурс 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
является bean-компонентом, полученным с помощью поиска JNDI? Где указать имя JNDI?