web-dev-qa-db-fra.com

Déployer une webapp Jersey sur Jboss AS 7

J'exécute actuellement des webapps sur Jboss AS 4/5 et je teste la migration vers jboss7. Lorsque j'essaie de déployer une application Web basée sur un maillot sur JBoss AS 7 (profil complet avec fichier de configuration à prévisualisation autonome), j'obtiens:

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

J'ai fait un peu de recherche dessus et j'ai découvert que RestEasy est l'implémentation JAX-RS par défaut intégrée dans Application Server. Des messages comme http://community.jboss.org/message/579996 et https://issues.jboss.org/browse/JBAS-88 ) mentionnent que le RestEasy déployeur prend le relais.

Dans AS 6, il semble plus facile de retirer le déployeur alors que je n'ai vu aucune solution pour AS 7.

33
DOS

il a déjà été mentionné dans cet article: https://community.jboss.org/message/744530#7445 , vous pouvez simplement demander au module resteasy de ne pas rechercher d'autres implémentations JAX RS dans votre webapp ; ajoutez simplement ceci à votre 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>

a bien fonctionné pour moi

69
Anthony Dahanne

Outre la suppression de l'intégralité du sous-système jaxrs dans standalone.xml comme mentionné dans les autres articles à l'exclusion des modules RESTEasy dans jboss-deployment-structure.xml peut également fonctionner.

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

Consultez également

6

Je pense que la bonne approche consiste à utiliser le déploiement d'applications JAX-RS indépendant du serveur d'applications. Pas besoin de jouer avec n'importe quelle configuration JBoss. Tout ce dont vous avez besoin est, étendez javax.ws.rs.core.Application dans votre application Web JAX-RS. Vous pouvez trouver un exemple ici . Ensuite, vous devez mettre cela dans votre 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>

Le mécanisme d'analyse des packages ne fonctionne pas correctement sur JBoss 7.x. J'ai testé cette approche avec succès dans JBoss 7.0.2.Final et JBoss 7.1.1.Final.

6
Arul Dhesiaseelan
 <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
    <exclude-subsystems>
    <subsystem name="jaxrs" />
    </exclude-subsystems>
   </deployment>
 </jboss-deployment-structure>

Fera l'affaire, fonctionne très bien avec 7.3AS.ctomc vient de manquer une petite barre oblique à la fin pour terminer la section. :-)

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

J'ai réussi à exécuter Jersey WS sur mon JBOSS AS7.

Ce que je fais pour JBOSS est simplement de supprimer tout ce qui concerne jax-rs dans standalone.xml

Mon exemple de code de maillot provient de: http://www.ibm.com/developerworks/web/library/wa-aj-Tomcat/

La seule chose que je fais pour le maillot est de supprimer l'init-param du web.xml et de copier le lib du jersey vers 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

Option Ahother:

  1. Modifiez standalone/configuration/standalone.xml et commentez toutes les entrées jaxrs. Cela configurera Jersey au lieu de RESTEasy.
  2. Supprimez jboss-web.xml de WEB-INF/web.xml. Ce fichier ne fonctionne plus avec JBoss 7
  3. Modifiez web.xml, ajoutez un init-param com.Sun.jersey.config.property.packages configuré au package de votre ressource, comme:

    <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

Voici ce qui a fonctionné pour moi pour JBoss 7.1.1 et Jersey 1.17.1. Pas besoin de modifier standalone.xml ou domain.xml. Outre le filtrage de restEasy dans web.xml, demandez à Jersey d'utiliser Jackson. Vous pouvez lire sur cette configuration ici .

Pour gagner du temps dans les suppositions de configuration, je poste web.xml et pom.xml du projet de test.

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

Vous pouvez dépasser cela dans la configuration autonome en modifiant configuration/standalone.xml et en supprimant les références à jaxrs dans la section extensions et profils. Remarque, même si j'ai commenté ces parties dans mon standalone.xml, JBoss supprimera automatiquement ces références au prochain démarrage ...

0
Duan

Vous devez exclure le sous-système jaxrs d'être activé pour votre déploiement, ajoutez-le dans 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>

ou vous pouvez accéder à standalone.xml et y supprimer le sous-système. Pour ce faire, vous devez supprimer

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

une partie de la configuration, une partie d'extension sur le dessus peut rester sans dommage dans les deux cas. ou vous pouvez vous connecter au serveur avec CLI et exécuter

/subsystem=webservices:remove()

Juste une note, fonctionnalité exclure-sous-systèmes et structure de déploiement: 1.2 a été ajouté en 7.1.2 et en tant que tel ne fonctionnera pas sur 7.1.1.

0
Tomaz Cerar

Pouvons-nous mettre à jour l'approche "indépendante du serveur" pour inclure JBoss 7.1.1 et Servlet 3.0?

<context-param> n'est pas valide dans une version web-xml 3.0.

0
TomEE