2016-07-01 2 views
0

У меня возникли проблемы с выяснением, почему компонент сеанса 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"; 

Я полагаю, что это должно быть что-то делать с моим классом поле ввода, но у меня не было никакой удачи вычисляя вне какой.

+1

звучит как базовое исключение NullPointerException. Назначьте экземпляр для имени, прежде чем вы получите доступ к полям. "name = new rrpInputField();" –

ответ

0

Я действительно не понимаю, почему, но я получил его для работы, добавив «новую» вещь для инициализации метода Table1Bean.

@PostConstruct  
public void initialize() { 
    action = "initialValue"; 
    name = new rrpInputField(); 
    name.currentVAlue = "TestValue; 
} 

Если кто-то может объяснить, почему я должен был это сделать, это было бы освещающим.

+0

http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it –

Смежные вопросы