我疯狂地将ejb注入工作转移到托管bean中。 我正在使用JSF2.0和Glassfish4。
我的项目结构是这样的:
demo-ejb
|_ Word.java
|_ WordBean.java
demo-web
|_ WelcomeBean.java
|_ home.xhtml
这是类的代码:
Word.java
@Remote
public interface Word {
public void someMethod();
// and so on...
}
WordBean.java
@Stateless
public class WordBean implements Word {
@Override
public void someMethod(){
//some method implementation
}
//bla bla bla
}
WelcomeBean.java
@ManagedBean(name = "welcome", eager = true)
@RequestScoped
public class WelcomeBean {
@EJB
Word w;
public void getSomething(){
w.someMethod(); // NullPointerException! YEAH!
}
}
正如代码中所写,当我加载home.xhtml
时,会抛出NullPointerException
...
我无法理解:
@EJB
注释未被阅读我还尝试在后构造方法中使用JNDI查找,但该方法似乎没有运行!可能会跳过@PostConstruct
和@EJB
?除了pom.xml
之外,我是否还必须向javax.javaee-api
添加一些maven依赖项?
提前谢谢!
我们在这里,解决了:
Word.java
@Local
public interface Word {
public void someMethod();
// and so on...
}
WordBean.java
@Stateless
public class WordBean implements Word {
@Override
public void someMethod(){
//some method implementation
}
//bla bla bla
}
WelcomeBean.java
@ManagedBean(name = "welcome", eager = true)
@RequestScoped
public class WelcomeBean {
@Inject Word w;
public void getSomething(){
w.someMethod();
}
}
现在的问题是:
@Remote
我直接引用该对象而不是代理它!超过jee7 guide的更多内容明确表示这是可行的; @EJB
无效,@Inject
有效。为什么?谢谢