在Jboss AS 7上部署Jersey webapp

在Jboss AS 7上部署Jersey webapp,jboss,migration,jersey,jboss7.x,Jboss,Migration,Jersey,Jboss7.x,目前在JBoss4/5上运行一些WebApp,我正在测试迁移到jboss7。当我尝试在JBoss AS 7上部署一个基于jersey的webapp(带有独立预览配置文件的完整配置文件)时,我得到: 我对它做了一些研究,发现RestEasy是嵌入到应用服务器中的默认JAX-RS实现。像和)这样的帖子提到RestEasy部署器将接管 在AS 6中,删除deployer似乎更容易,而我还没有看到AS 7的任何解决方案。在独立配置中,您可以通过修改configuration/standalone.xml

目前在JBoss4/5上运行一些WebApp,我正在测试迁移到jboss7。当我尝试在JBoss AS 7上部署一个基于jersey的webapp(带有独立预览配置文件的完整配置文件)时,我得到:

我对它做了一些研究,发现RestEasy是嵌入到应用服务器中的默认JAX-RS实现。像和)这样的帖子提到RestEasy部署器将接管


在AS 6中,删除deployer似乎更容易,而我还没有看到AS 7的任何解决方案。

在独立配置中,您可以通过修改configuration/standalone.xml并删除extensions和profile部分中对JAXR的引用来克服这一问题。注意,尽管我在standalone.xml中注释了这些部分,JBoss在下一次启动时会自动删除这些引用…

我在JBoss AS7上运行了Jersey WS

我对JBOSS所做的只是删除standalone.xml中与jax rs相关的所有内容

我的jersey示例代码来自:

我为jersey所做的唯一一件事就是从web.xml中删除init参数,并将jersey lib复制到WebContent/web-INF/lib

  <!--<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>sample.hello.resources</param-value>
  </init-param>-->

除了在
standalone.xml
中删除整个jaxrs子系统之外,在
jboss部署结构中不包括RESTEasy模块。xml
也可以工作

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <exclusions>
      <module name="org.jboss.resteasy.resteasy-atom-provider" />
      <module name="org.jboss.resteasy.resteasy-cdi" />
      <module name="org.jboss.resteasy.resteasy-jaxrs" />
      <module name="org.jboss.resteasy.resteasy-jaxb-provider" />
      <module name="org.jboss.resteasy.resteasy-jackson-provider" />
      <module name="org.jboss.resteasy.resteasy-jsapi" />
      <module name="org.jboss.resteasy.resteasy-multipart-provider" />
      <module name="org.jboss.resteasy.async-http-servlet-30" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>

也请查看


这篇文章中已经提到:,您可以要求resteasy模块不要扫描您的webapp中的其他JAX-RS实现;只需将以下内容添加到web.xml中:

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>

轻松扫描
假的
resteasy.scan.providers
假的
resteasy.scan.resources
假的

对我来说效果很好

我相信正确的方法是使用与应用服务器无关的JAX-RS应用程序部署。不需要弄乱任何JBoss配置。您只需要在JAX-RSWeb应用程序中进行扩展。你可以找到一个例子。然后,您需要将其放在web.xml中

<servlet>
  <servlet-name>Jersey Web Application</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>jersey.MyApplication</param-value>
  </init-param>
  <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
  </context-param>

  <load-on-startup>1</load-on-startup>
</servlet>

Jersey Web应用程序
com.sun.jersey.spi.container.servlet.ServletContainer
javax.ws.rs.Application
jersey.MyApplication
轻松扫描
假的
resteasy.scan.providers
假的
resteasy.scan.resources
假的
1.
包扫描机制在JBoss7.x上无法正常工作。我已经在JBoss 7.0.2.Final和JBoss 7.1.1.Final中成功地测试了这种方法。

我们可以更新“服务器不可知”的方法以包括JBoss 7.1.1和Servlet 3.0吗


在3.0版web xml中无效。

以下是我在JBoss 7.1.1和Jersey 1.17.1中的工作原理。无需修改
standalone.xml
domain.xml
。除了在web.xml中过滤restEasy之外,Jersey还可以使用Jackson。您可以阅读有关此配置的信息

为了节省猜测配置的时间,我发布了来自测试项目的
web.xml
pom.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>TestJerseyonJBoss</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.test.rest</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
   <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>
</web-app>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TestJerseyOnJBoss</groupId>
  <artifactId>TestJerseyOnJBoss</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.17.1</version>
    </dependency>

        <dependency>
           <groupId>com.sun.jersey</groupId>
           <artifactId>jersey-json</artifactId>
           <version>1.17.1</version>
        </dependency>
    <dependency>
               <groupId>asm</groupId>
               <artifactId>asm</artifactId>
               <version>3.3.1</version>
               <type>jar</type>
               <scope>compile</scope>
    </dependency>
  </dependencies>

TestJerseyonJBoss
泽西岛休息服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.test.rest
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
泽西岛休息服务
/休息/*
轻松扫描
假的
resteasy.scan.providers
假的
resteasy.scan.resources
假的
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>TestJerseyonJBoss</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.test.rest</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
   <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.providers</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.scan.resources</param-name>
        <param-value>false</param-value>
    </context-param>
</web-app>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>TestJerseyOnJBoss</groupId>
  <artifactId>TestJerseyOnJBoss</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-bundle</artifactId>
        <version>1.17.1</version>
    </dependency>

        <dependency>
           <groupId>com.sun.jersey</groupId>
           <artifactId>jersey-json</artifactId>
           <version>1.17.1</version>
        </dependency>
    <dependency>
               <groupId>asm</groupId>
               <artifactId>asm</artifactId>
               <version>3.3.1</version>
               <type>jar</type>
               <scope>compile</scope>
    </dependency>
  </dependencies>

4.0.0
TestJerseyOnJBoss
TestJerseyOnJBoss
0.0.1-快照
战争
src
maven编译器插件
3.1
1.7
1.7
maven战争插件
2.3
网络内容
假的
泽西岛
球衣束
1.17.1
泽西岛
泽西json
1.17.1
asm
asm
3.3.1
罐子
编译

您应该将jaxrs子系统排除在您的部署激活之外 将其添加到META-INF/jboss-deployment-structure.xml中

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
     <exclude-subsystems>
        <subsystem name="jaxrs" />
    </exclude-subsystems>
  <deployment>
 </jboss-deployment-structure>
请注意,排除子系统功能和部署结构:1.2是在7.1.2中添加的,因此在7.1.1中不起作用。


 <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
    <exclude-subsystems>
    <subsystem name="jaxrs" />
    </exclude-subsystems>
   </deployment>
 </jboss-deployment-structure>
将完成这一技巧,与7.3AS配合使用效果很好。ctomc在结束部分时遗漏了一个小斜杠。:-

在web.xml文件中添加文件
轻松扫描
假的
resteasy.scan.providers
假的
resteasy.scan.resources
假的
并注释掉init参数
这在jboss-as-7.1.1.Final中得到了解决,在standalone.xml中我没有做任何更改。
其他选项:

  • 编辑standalone/configuration/standalone.xml并注释掉所有jaxrs条目。这将配置Jersey而不是RESTEasy
  • 从web-INF/web.xml中删除jboss-web.xml。此文件不适用于JBoss7
  • 编辑web.xml,将配置的init param com.sun.jersey.config.property.packages添加到资源的包中,如:

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>org.foo</param-value>
    </init-param>
    
    
    com.sun.jersey.config.property.packages
    org.foo
    

  • 如果您的意思是您的编辑没有持续,则需要在进行XML编辑之前关闭服务器。对运行时所做的任何更改都将在重新启动时被覆盖。脱机或通过管理控制台或CLI进行的更改将保持不变。通过这种方式,您可以根据需要创建和加载自定义服务器配置文件。如何关闭用于EAR/lib的resteasy扫描仪?对我也很有用!有点伤心
    In web.xml file add the files
    
            <context-param>
                <param-name>resteasy.scan</param-name>
                <param-value>false</param-value>
            </context-param>
            <context-param>
                <param-name>resteasy.scan.providers</param-name>
                <param-value>false</param-value>
            </context-param>
            <context-param>
                <param-name>resteasy.scan.resources</param-name>
                <param-value>false</param-value>
            </context-param>
    
     and comment out the init-param
            <!-- <init-param>
                      <param-name>com.sun.jersey.config.property.packages</param-name>
                      <param-value></param-value>
            </init-param> -->
    
    This worked out for me in jboss-as-7.1.1.Final and i did not do any changes in standalone.xml.
    
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>org.foo</param-value>
    </init-param>