7

我用谷歌搜索,试图理解为什么 Weblogic 10.3.4 没有将 EJB 注入到 servlet 中的注释字段中。

Ear 包含定义DAO EJB 的ejb.jar 和带有TestServlet 的web.war。

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 在 web.war 中,EJB 在 ejb.jar 中。我尝试了带有/不带有映射名称属性的注释,但没有运气。当我尝试将 web.xml 升级到 3.0 时,部署失败,未枚举 3.0。怎么了?为什么 pluginDataDAO 仍然为空?谢谢你。

4

4 回答 4

5

以下组合工作:

小服务程序

@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>
...

我认为添加对 web.xml 的引用不是必需的.. 规则是什么,何时添加?

于 2013-08-20T09:01:59.503 回答
5

我遇到了同样的问题并通过以下方式解决了它@ManagedBean

@ManagedBean
public class TestServlet extends HttpServlet {
    @EJB(mappedName = "PluginDataDAO")
    private IPluginDataDAO pluginDataDAO;
于 2013-12-20T13:04:46.487 回答
2

至于 Servlet 3 问题;WebLogic 10.3.x 是 Java EE 5 实现,这意味着它仅支持 Servlet 2.5。

该示例应该可以工作。也许尝试一个完全新的项目,其中只有那个 Servlet 和 EJB。

还可以使用最新的 WebLogic 12.1.2 尝试相同的代码。它可以在 Oracle 网站上免费下载。

于 2013-08-20T08:28:38.637 回答
1

我认为这个链接有很好的答案......将无状态EJB注入Servlet ......

这个家伙 Balus 说你正在尝试在不正确的构造函数中使用 DI ......你最早可以将它设置在 init() ......只是复制了答案,希望其他人会发现有用

于 2014-05-12T03:03:21.057 回答