@Stateless未注入@ManagedBean,并且未调用@PostConstruct

时间:2014-10-18 13:52:07

标签: maven jsf glassfish ejb

我疯狂地将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有效。为什么?

谢谢

0 个答案:

没有答案