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; }
}
私のテストサーブレットでは
@EJB
private Test1 t1;
Bean 定義の Bean 初期化メソッドの 1 行のコメントを外すと、エラーが発生します。だから、それと関係があることを知っています。//name.currentValue = "TestValue";
コメントアウトしたままにしておくと、サーブレットで t1.getName("New Value") をコーディングするとすぐに、同じエラーが発生します。
コメントアウトしたままにしておくと、Bean は期待どおりに動作します。初期化して、setAction と getAction を問題なく使用できます。
サーブレットでコーディングできるので、rrpInput クラスが正しいと確信しています。
rrpInputField f1 = new rrpInputField();
f1.currentValue = "TestValue";
私の入力フィールドクラスと関係があるに違いないと思いますが、何が原因かわかりませんでした。