Java 将EJB注入Servlet

Java 将EJB注入Servlet,java,servlets,jboss,dependency-injection,ejb,Java,Servlets,Jboss,Dependency Injection,Ejb,有人知道为什么将EJB注入Servlet如此困难吗?我正在使用JBoss6.2。无论我尝试什么,我的处理程序变量都是null @Local public interface RequestHandlerInterface { public String handleRequest(String authKey); } @Singleton public class RequestHandler implements RequestHandlerInterface { ... }

有人知道为什么将EJB注入Servlet如此困难吗?我正在使用JBoss6.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" />

使用本地而不是家庭,如下所示

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

ejb/RequestHandler
一场
company.application.RequestHandlerInterface

我在这里找到了答案:


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

(注意,为了简化我的示例,我去掉了“ejb/”)尝试删除所有内容并再次检查。没有更改。“注入的”RequestHandler仍然为空。它在JBoss EAP 6.1上运行得非常好,但我尝试了无状态而不是单例EJB。我甚至没有定义任何Hmm,这可能是一个范围问题,因为servlet是会话范围的,而单例是应用范围的。最后,我在Servlet和EJB之间设置了一个队列,这非常可笑。但至少它是有效的。我要离开一个星期,但回来后会测试。感谢您的帮助。如果您使用的是Spring,那么您可能应该使用Spring注释来进行注入,而不是JEE@EJB注释。可能的重复
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
<ejb-ref>
   <ejb-ref-name>ejb/RequestHandler</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <local>company.application.RequestHandlerInterface</local>
</ejb-ref>