web-dev-qa-db-ja.com

Jboss AS 7にJersey webappをデプロイする

現在、Jboss AS 4/5でいくつかのwebアプリを実行しており、jboss7への移行をテストしています。 jerseyベースのwebappをJBoss AS 7(standalone-preview設定ファイルを含む完全なプロファイル)にデプロイしようとすると、次のようになります:

org.jboss.as.server.deployment.DeploymentUnitProcessingException: Only one JAX-RS Application Class allowed.

少し調べてみたところ、RestEasyがApplication Serverに組み込まれているデフォルトのJAX-RS実装であることがわかりました。 http://community.jboss.org/message/579996 および https://issues.jboss.org/browse/JBAS-88 )のような投稿はRestEasyに言及しているデプロイヤが引き継ぎます。

AS 6では、デプロイヤを削除する方が簡単であるように見えますが、AS 7のソリューションは見ていません。

33
DOS

この投稿ですでに言及されています: https://community.jboss.org/message/744530#7445 、webappの他のJAX RS実装をスキャンしないようresteasyモジュールに依頼することができます;これを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>

私のためにうまくいった

69
Anthony Dahanne

standalone.xml内のRESTEasyモジュールを除く他の投稿で説明されているように、jboss-deployment-structure.xml内のjaxrsサブシステム全体を削除することもできます。

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

またチェックアウト

6

正しいアプローチは、アプリケーションサーバーに依存しないJAX-RSアプリケーションの展開を使用することだと思います。 JBoss設定を台無しにする必要はありません。必要なのは、JAX-RS Webアプリケーションで javax.ws.rs.core.Application を拡張することだけです。例があります here 。次に、これを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>

パッケージスキャンメカニズムは、JBoss 7.xでは正しく機能しません。 JBoss 7.0.2.FinalおよびJBoss 7.1.1.Finalでこのアプローチを正常にテストしました。

6
 <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でうまく動作します。セクションを終了するために最後に小さなスラッシュを忘れました。:-)

3
user3533685
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.
1
Raju Cluster

JBOSS AS7でJersey WSを実行できました。

JBOSSで行うことは、standalone.xmlでjax-rsに関連するものをすべて削除することです

私のジャージのサンプルコードは、 http://www.ibm.com/developerworks/web/library/wa-aj-Tomcat/ から取得しました。

Jerseyで行う唯一のことは、web.xmlからinit-paramを削除し、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>-->
1
Jason

他のオプション:

  1. Standalone/configuration/standalone.xmlを編集し、すべてのjaxrsエントリーをコメント化します。これにより、RESTEasyの代わりにJerseyが構成されます。
  2. WEB-INF/web.xmlからjboss-web.xmlを削除します。このファイルはJBoss 7では動作しなくなりました
  3. 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>
    

https://github.com/Atmosphere/atmosphere/wiki/Deploying-Atmosphere-Jersey-in-JBoss-7.1.x

1
Ignacio Rubio

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>

pom.xml

<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>
0
Alex P

Configuration/standalone.xmlを変更し、extensionsおよびprofileセクションでjaxrsへの参照を削除することにより、スタンドアロン構成でこれを乗り越えることができます。 standalone.xmlでこれらの部分をコメントアウトしましたが、JBossは次回の起動時にこれらの参照を自動的に完全に削除することに注意してください...

0
Duan

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>

または、standalone.xmlに移動してサブシステムを削除できます。そのためには、削除する必要があります

<subsystem xmlns="urn:jboss:domain:jaxrs:1.0">
...
...
<subsystem>

構成の一部、上部の拡張部分は、どちらの方法でも傷つかないようにすることができます。または、CLIでサーバーに接続して実行できます

/subsystem=webservices:remove()

ただし、7.1.2ではexclude-subsystems機能とdeployment-strucure:1.2が追加されたため、7.1.1では機能しません。

0
Tomaz Cerar

「server-agnostic」アプローチを更新して、JBoss 7.1.1とServlet 3.0を含めることはできますか?

<context-param>は、バージョン3.0 web-xmlでは無効です。

0
TomEE