我写了一个转换器.我正在使用CDI和注入并行.在这种情况下,不会注入类.如何使注射成为可能?
@FacesConverter(forClass = MyClass.class)
public class MyConverter implements Converter{
@EJB
private ClassForEJB classForEJB;
@Inject
private ClassForInject classForInject;
// Converter Methods
}
Run Code Online (Sandbox Code Playgroud) 我有一个无状态的EJB加入我的数据库.我需要在JSF 2转换器中使用此bean来从String值参数中检索实体对象.我正在使用JEE6和Glassfish V3.
@EJB 注释不起作用并获得NPE,因为它位于faces上下文中,并且它无法访问EJB上下文.
我的问题是:是否仍然可以使用@Resource其他注释或JNDI查找来注入此bean ,还是需要解决方法?
解
像这样执行JNDI查找:
try {
ic = new InitialContext();
myejb= (MyEJB) ic
.lookup("java:global/xxxx/MyEJB");
} catch (NamingException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我只想确认我完全理解CDI工作的先决条件.如果我有A班:
public class A {
@Inject private B b;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用以下方法实例化此类时:
A a = new A();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Ab将为null.
但是如果我在另一个类中定义一个成员:
@Inject A a;
Run Code Online (Sandbox Code Playgroud)
以后使用a,ab会被正确填充吗?
CDI仅在需要注射的类也由CDI容器创建时才起作用吗?或者,如果使用普通的实例化创建一个POJO时,如果注射结果为null,我会错过什么(是的,我得到了beans.xml)?