Я гугл без удачи, пытаясь понять, почему Liberty Profile 8.5.5.6 не впрыснуть EJB в сервлетLiberty профиль не инъекционный в сервлете EJB
я положил все в войну. Война развертывается нормально, но когда я называю сервлет я получаю следующее сообщение об ошибке:
Exception thrown by application class 'org.javaee7.servlet.simple.UserServlet.doGet:23'
java.lang.NullPointerException:
at org.javaee7.servlet.simple.UserServlet.doGet(UserServlet.java:23)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1285)
at [internal classes]
На this ссылки, которую я видел комментарий, который я должен использовать @ManagedBean
Когда я пытаюсь это, исключение нулевого указателя уходит, но теперь я получаю эту ошибку:
Error 404: javax.servlet.UnavailableException: SRVE0319E: For the [UserServlet] servlet, org.javaee7.servlet.simple.UserServlet servlet class was found, but a resource injection failure has occurred. CWNEN0030E: The server was unable to obtain an object instance for the java:comp/env/org.javaee7.servlet.simple.UserServlet/service reference. The exception message was: The EJB reference in the lps.war module of the lps application could not be resolved; nested exception is: com.ibm.ejs.container.EJBNotFoundException: EJB with interface org.javaee7.service.UserService not present in application lps.
Вот мой код:
@Stateless
public class UserServiceImpl implements UserService {
public User getUser(Long id) {
return new User(id, "Gary");
}
}
@Remote
public interface UserService {
public User getUser(Long id);
}
@ManagedBean
public class UserServlet extends HttpServlet {
@EJB(mappedName = "UserServiceImpl")
UserService service;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = service.getUser(1L);
response.getWriter().print(user == null ? "no user" : user.toString());
}
}
Что бы AppName и ModuleName быть, когда я развернуть войну файл lps.war – javapenguin
@javapenguin В случае одной войны это должно быть просто имя модуля, поэтому 'java: global/lps/UserServiceImpl! org.javaee7.service.UserService' – Gas
Как только я удалил web.xml это сработало. Похоже, если вы используете аннотации (@WebServlet), вы должны придерживаться их. – javapenguin