我試圖注入與@EJB批註的EJB:當我注入一個EJB到正常工作的另一個EJBEJB的依賴注入的servelt - WAS7
- 。
- 當我注入相同的EJB到一個servlet我得到一個空指針異常(我的EJB爲空)。
myapp.ear包含以下內容:
- myapp.war(其中的servlet位於)
- myapp.jar(其中EJB是)
EJB接口:
package com.mycompany.myapp.ejb.hello;
@Local
public interface HelloEjb {
public final static String NAME = "HelloEjb";
public String sayHello();
}
EJB默認地將Impl:
package com.mycompany.myapp.ejb.hello;
@Stateless(name = HelloEjb.NAME)
public class HelloEjbImpl implements HelloEjb {
@Override
public String sayHello() {
return "Hello";
}
}
我的servlet:
public class HelloServlet extends HttpServlet {
@EJB
private HelloEjb helloEjb;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("This is my stateless session-EJB: " + helloEjb.sayHello());
out.println("</html>");
out.close();
}
}
在戰爭中的web.xml無關spetacular,只有該servlet確定指標,EJB沒有標籤:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="MyApp" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- General -->
<display-name>My App</display-name>
<!-- Standard Action Servlet Configuration -->
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.mycompany.myapp.web.servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- The Usual Welcome File List -->
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
如果在servlet中使用查找,它可以工作我能夠獲得EJB:
helloEjb = ctx.lookup("ejblocal:com.mycompany.myapp.ejb.hello.HelloEjb");
我使用的Websphere 7 & EJB 3.0
任何幫助將非常感激。
我在Glassfish 3服務器上部署了相同的耳朵,它工作得很好。 – chrisnfoneur
控制檯中是否有錯誤表明注射失敗?在PK97815之前,即使注入失敗,WebSphere Application Server也會將servlet放入服務中。 –
乍一看,您的代碼顯示正確,但由於某種原因,它看起來像依賴注入在WAS上失敗。您能否導出已安裝的EAR(_應用程序>應用程序類型> WebSphere企業應用程序_,然後選擇您的應用程序並單擊_Export_按鈕)並查看WAR的「WEB-INF/web_merged.xml」的內容? WAS應該添加適當的「ejb-local-ref」配置。 – shelley