【问题标题】:Injection of an EJB into a web java class under JBoss 7.1.1在 JBoss 7.1.1 下将 EJB 注入到 web java 类中
【发布时间】:2012-11-10 05:50:27
【问题描述】:

我正在尝试使用 JBoss 7.1.1 和 RESTeasy 构建网站。我已经设法使用包含在其中的 WAR 和 EJB-JAR 构建和部署 EAR:

<pre></pre>

voyager-app.ear 
  META-INF/MANIFEST.MF
  META-INF/application.xml
  META-INF/jboss-app.xml
  lib/voyager-lib.jar
  voyager-adm.war
  voyager-ejb.jar
  voyager-web.war

到目前为止,事情都非常简单。 voyager-adm.war 和 voyager-lib.jar 是空的(只是清单文件),但我知道我很快就会为它们编写代码。 EJB jar 文件中只有一个有状态 EJB - HarbourMasterBean(只有一个本地接口)和一些数据库实体 Bean:

<pre></pre>

voyager-ejb.jar 
  META-INF/MANIFEST.MF
  META-INF/persistence.xml
  com/nutrastat/voyager/db/HarbourMasterBean.class
  com/nutrastat/voyager/db/HarbourMasterLocal.class
  com/nutrastat/voyager/db/PortEntity.class
  com/nutrastat/voyager/db/ShipEntity.class

据我所知,EJB 部署正确,因为创建了数据库单元,并且日志显示一些 HarbourMaster 引用的发布:

<pre></pre>

java:global/voyager-app/voyager-ejb/harbour-master!com.nutrastat.voyager.db.HarbourMasterLocal
java:app/voyager-ejb/harbour-master!com.nutrastat.voyager.db.HarbourMasterLocal
java:module/harbour-master!com.nutrastat.voyager.db.HarbourMasterLocal
java:global/voyager-app/voyager-ejb/harbour-master
java:app/voyager-ejb/harbour-master
java:module/harbour-master

问题在于将 HarbourMaster EJB 注入到我的 web bean 中。无论我尝试什么,对它的引用始终为 NULL。

<pre></pre>

voyager-web.war 
  META-INF/MANIFEST.MF
  WEB-INF/web.xml
  WEB-INF/classes/com/nutrastat/voyager/web/
  WEB-INF/classes/com/nutrastat/voyager/web/Ships.class
  WEB-INF/classes/com/nutrastat/voyager/web/VoyagerApplication.class

Ships.java:

<pre></pre>

@Path("fleet")
public class Ships {

  protected transient final Logger log;

  @EJB
  private HarbourMasterLocal harbourMaster;

  public Ships() {
log = LoggerFactory.getLogger(getClass());
  }

  @GET
  @Path("ships")
  @Produces({"text/plain"})
  public String listShips() {
    if (log.isDebugEnabled())
        log.debug("Harbour master value: " + harbourMaster);
    return "Harbour Master: " + harbourMaster;
  }
}

&lt;web-app
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0" &gt;

  <display-name>Voyager Web Application</display-name>

  <listener>
    <listener-class>
      org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
  </listener>

  <servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>
      org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
    <init-param>
      <param-name>
    javax.ws.rs.Application
      </param-name>
      <param-value>
    com.nutrastat.voyager.web.VoyagerApplication
      </param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

 &lt;/web-app&gt;

我一直在网上搜索答案并阅读了许多地方,无论是在 StackOverflow 上还是在其他地方都表明可以完成,并且问题在于配置。但是他们只发布了 sn-ps,我不确定我是否正确地做事。

非常感谢您提供的任何帮助。

多宝

【问题讨论】:

    标签: jboss ejb resteasy


    【解决方案1】:

    如果你这样做会发生什么:

    @Path("fleet")
    @Singleton
    public class Ships {
    

    【讨论】:

    • 首先我发现我的 Web 代码与我的 EJB 代码已经过时了。我通过添加纠正了这一点,然后发现没有区别。我尝试了setHarbourMaster(...) setter 方法,但没有被调用。
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2014-08-17
    相关资源
    最近更新 更多