0

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

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:

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 引用的发布:

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。

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

船舶.java:

@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;
  }
}

<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" >

  <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 上还是在其他地方都表明可以完成,并且问题在于配置。但他们只发布片段,我永远不确定我是否正确地做事。

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

多宝

4

1 回答 1

0

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

@Path("fleet")
@Singleton
public class Ships {
于 2012-11-22T10:07:47.160 回答