У меня возникли проблемы с выяснением, почему компонент сеанса EJB не работает. Фактическое сообщение об ошибке - EJBException: NameNotFoundException, но это не очень освещающее сообщение.EJB session bean не инициализируется должным образом (NameNotFoundException)
Я проследил его до какой-то конкретной причины проблемы, но не понял почему. Итак, я хотел создать сессионный компонент для отслеживания входных значений из формы.
урезанной кода является:
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();
}
Затем я создал сам тест боб ...
@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;
Если я не комментирую одну строку в методе инициализации компонента в определении компонента, я получаю сбой. Поэтому я знаю, что это имеет какое-то отношение к этому. //name.currentValue = "TestValue";
Если я оставлю его прокомментированным, как только я закодирую t1.getName («Новое значение») в сервлете, я получу ту же ошибку.
Если я оставлю его прокомментированным, тогда боб работает как ожидалось - я могу инициализировать и использовать setAction и getAction просто отлично.
Я довольно уверен, что класс rrpInput правильно, потому что я могу код в сервлет:
rrpInputField f1 = new rrpInputField();
f1.currentValue = "TestValue";
Я полагаю, что это должно быть что-то делать с моим классом поле ввода, но у меня не было никакой удачи вычисляя вне какой.
звучит как базовое исключение NullPointerException. Назначьте экземпляр для имени, прежде чем вы получите доступ к полям. "name = new rrpInputField();" –