EJB会话bean未正确初始化(NameNotFoundException)

时间:2016-07-01 23:34:09

标签: java servlets java-ee stateful-session-bean

我无法弄清楚EJB会话bean无法正常工作的原因。实际的错误消息是EJBException:NameNotFoundException,但这不是一个非常有启发性的消息。

我已将其追溯到究竟是哪一行导致问题,但尚未找出原因。所以,我想创建一个会话bean来跟踪表单中的输入值。

代码的精简版本是:

public class rrpInputField {
   public boolean isRequired;
   public int maxLength;
   public String inputValue;
   public String displayValue;
   public String formatMask;
   public rrpInputField() {
     isRequired = false;
     maxLength  = 64;
     inputValue = "";
     displayValue = "";
     formatMask   = "";
  }
}

然后我创建了一个界面dohicky ......

@Local
public interface Test1  {
   public void   setAction(String action);
   public String getAction();
   public void   setName(String name);
   public String getName();
}

然后我自己创建了测试bean ......

@Stateful
public class Test1Bean implements Test1 {
   private String         action;
   private rrpInputField  name;

   @PostConstruct
   public void initialize() {
        action = "initalValue";
        //name.currentValue = "TestValue";

    @Override
    public void setAction(String action){ this.action = action; }

    @Override
    public void getAction() { return this.action; }

    @Override
    public void setName(String name) { this.name.currentValue = name; }

    @Override
    public String getName() { return this.name.currentValue; }

}

在我的测试servlet中我有

 @EJB
 private  Test1   t1;

如果我取消注释bean定义中bean初始化方法中的一行,我就会失败。所以我知道它与此有关。         //name.currentValue =“TestValue”;

如果我把它注释掉,只要在servlet中编码t1.getName(“New Value”),我就会得到同样的错误。

如果我把它评论出去,那么bean会按预期工作 - 我可以初始化,并且使用setAction和getAction就好了。

我很确定rrpInput类是正确的,因为我可以在servlet中编码:

   rrpInputField f1 = new rrpInputField();
   f1.currentValue  = "TestValue";

我认为它必须与我的输入字段类有关,但我没有运气搞清楚是什么。

1 个答案:

答案 0 :(得分:0)

我真的不明白为什么,但我通过添加一个" new"来实现它。 thingie是Table1Bean的initialize方法。

#include <cs50.h>
#include <stdio.h>

int main(void)
{
   printf("How tall do you want your pyramid to be?\n");
   int height = GetInt();

   if (height > 23 && height < 1)
   {
       printf("Please use a positive number no greater than 23:\n");
   }
   else (height > 0 && height <= 23)
   {
       printf("Thanks!\n");
   }
}

如果有人能够解释我为什么必须这样做,那将会很有启发性。