将EJB注入Servlet

时间:2014-03-19 09:25:46

标签: java servlets jboss dependency-injection ejb

有谁知道为什么将EJB注入Servlet是如此困难?我正在使用JBoss 6.2。无论我尝试什么,我的处理程序变量都是null。

@Local
public interface RequestHandlerInterface {
    public String handleRequest(String authKey);    
}

@Singleton
public class RequestHandler implements RequestHandlerInterface {
...
}

public class Test extends HttpServlet {
    @EJB
    private RequestHandlerInterface handler;  //Always null
}

在应用程序上下文中:

<bean id="requestHandler" class="company.application.RequestHandler" />

在web.xml(v3.0)中:

<servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>company.test.Test</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/Test</url-pattern>
</servlet-mapping>

  <ejb-local-ref>
    <ejb-ref-name>RequestHandler</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>company.application.RequestHandlerInterface</local>
  </ejb-local-ref>

我已经尝试了很多组合,每个@EJB(...)选项......任何想法?
注意:它全部包含在一个WAR中 注意:我尝试过私有的RequestHandler处理程序;而不是界面 注意:我尝试过(name =“ejb / RequestHandler”)和mappedName,beanName,lookup
注意:我尝试过使用@Remote和@Local,使用ejb-local-ref和ejb-ref

注意:
部署单元部署“company.war”中名为RequestHandler的会话bean的JNDI绑定如下:

java:global/company/RequestHandler!company.application.RequestHandlerInterface
java:app/company/RequestHandler!company.application.RequestHandlerInterface
java:module/RequestHandler!company.application.RequestHandlerInterface
java:global/company/RequestHandler
java:app/company/RequestHandler
java:module/RequestHandler

2 个答案:

答案 0 :(得分:1)

使用local而不是home

<ejb-ref>
   <ejb-ref-name>ejb/RequestHandler</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <local>company.application.RequestHandlerInterface</local>
</ejb-ref>

答案 1 :(得分:0)

我在这里找到答案:How to connect HttpServlet with Spring Application Context in web.xml?

也许Jay的答案适用于仅限EJB的配置。但是我的应用程序是Spring配置的,所以我猜测它必须是一个问题,即Spring控制并禁止注入,除非它知道它。