Injecting EJB into servlet

六眼飞鱼酱① 提交于 2019-12-12 08:49:49

问题


I googled without luck trying to understand why Weblogic 10.3.4 does not inject EJB into annoted field in servlet.

Ear contains ejb.jar defining DAO EJB and web.war with TestServlet.

PluginDataDAO.java

@Stateless
public class PluginDataDAO implements IPluginDataDAO {

}

IPluginDataDAO.java

@Local
public interface IPluginDataDAO  {

}

TestServlet.java

public class TestServlet extends HttpServlet {
    @EJB(mappedName = "PluginDataDAO")
    private IPluginDataDAO pluginDataDAO;
}

web.xml

<web-app version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID">
<servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>cz.literak.blog.j2ee.TestServlet</servlet-class>
</servlet>

Servlet is inside web.war, EJB in ejb.jar. I tried the annotation with/without mapped name attribute without luck. When I tried to upgrade web.xml to 3.0, deployment failed that 3.0 is not enumerated. What is wrong? Why is pluginDataDAO still null? Thank you.


回答1:


I had the same problem and solved it with @ManagedBean:

@ManagedBean
public class TestServlet extends HttpServlet {
    @EJB(mappedName = "PluginDataDAO")
    private IPluginDataDAO pluginDataDAO;



回答2:


Following combination works:

Servlet

@EJB
private IPluginDataDAO pluginDataDAO;

web.xml

...
  <ejb-local-ref>
    <ejb-ref-name>PluginDataDAO</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>cz.literak.blog.j2ee.dao.IPluginDataDAO</local>
  </ejb-local-ref>
...

I thought that adding references to web.xml is not neccessary .. What are the rules, when to add them?




回答3:


As for the Servlet 3 issue; WebLogic 10.3.x is a Java EE 5 implementation meaning it only supports Servlet 2.5.

The example should work though. Maybe try a completely new project with only that Servlet and EJB in it.

Also try the same code with the latest WebLogic 12.1.2. It can be downloaded for free at the Oracle site.




回答4:


I think there is very good answer in this link...Injecting a stateless EJB into Servlet...

this guy Balus is saying you are trying to use DI in constructor which is not correct...earliest you can set it is in init() ....just copied the answer hoping someone else would find usefull



来源:https://stackoverflow.com/questions/18317544/injecting-ejb-into-servlet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!