Java 将EJB注入Servlet
有人知道为什么将EJB注入Servlet如此困难吗?我正在使用JBoss6.2。无论我尝试什么,我的处理程序变量都是nullJava 将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 { ... }
@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>