Я звоню мой боб EJB из моего тестового класса Test класса я использую статическое ключевое слово перед здесь UserService, потому что я имею доступ к UserService из статического контекстаПочему интерфейс Ejb бросает NullPointerException?
Примечания (от основного метода.): Кроме того, если я donot использует статическое ключевое слово перед userService, то также я получил такую же ошибку.
public class Test {
@Inject
private static UserService userService;
public Test() {
// TODO Auto-generated constructor stub
}
public static void main(String args[]){
userService.doSomething("hello");
}
}
I установка интерфейс EJB 3/реализация выглядит как это ...
UserService (интерфейс)
package business;
public interface UserService {
public String doSomething();
}
UserServiceBean (реализация)
@Stateless
@Local
public class UserServiceBean implements UserService{
public UserServiceBean() {
}
@Override
public String doSomething() {
return "Work done!";
}
}
W Я звоню doSomething метод класса UserServiceBean, используя интерфейс из моего тестового класса. Это дает мне такую ошибку.
Exception in thread "main" java.lang.NullPointerException
at test.Test.main(Test.java:17)
Пожалуйста, объясните мне, почему эта ошибка наступает.
'userService' равно нулю, и ничего не присваивая ему значение. Из аннотации '@ Inject' я предполагаю, что вы * ожидали чего-то, чтобы сделать это, но мне непонятно, что вы на самом деле настроили такое поведение. Я бы не ожидал, например, что поле «статическое» должно быть инъецируемым. – dimo414
Я использовал статические здесь, потому что я обращаюсь к userService из статического контекста. Или цель инъекции UserService - это просто получить результат из EJB bean (UserServiceBean), вызвав его. Мой вопрос очень ясен. –
Какой контейнер вы используете? – HRgiger