Déploiement D'une webapp Jersey sur Jboss AS 7

j'exécute actuellement quelques webapps sur Jboss comme 4/5 et je teste la migration vers jboss7. Lorsque j'essaie de déployer une webapp basée à jersey sur JBoss AS 7 (profil complet avec le fichier de configuration de 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 et j'ai trouvé que RestEasy est l'implémentation JAX-RS par défaut intégrée dans le serveur D'Application. Des billets comme http://community.jboss.org/message/579996 et https://issues.jboss.org/browse/JBAS-8830) mentionnent que le RESTEasy deployer prend la relève.

dans AS 6, il semble plus facile d'enlever le déployeur alors que je n'ai pas vu de solutions pour AS 7.

33
demandé sur Chad Ferguson 2011-08-05 12:33:51

11 réponses

it has already been mentioned in this post:https://community.jboss.org/message/744530#744530, 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

68
répondu Anthony Dahanne 2012-08-29 20:20:15

en plus de supprimer tout le sous-système jaxrs dans standalone.xml comme mentionné dans les autres Billets à l'exclusion des modules RESTEasy dans jboss-deployment-structure.xml peut aussi travailler.

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

vérifiez aussi

6
répondu Philippe Marschall 2012-05-19 18:50:32

je crois que la bonne approche est d'utiliser le déploiement d'applications JAX-RS agnostic server. Pas besoin de modifier la configuration de JBoss. All you need is, extend javax.ws.rs.noyau.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 de numérisation des paquets 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
répondu Arul Dhesiaseelan 2013-01-17 23:59:17
 <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.3.le ctomc a manqué une petite coupure à la fin pour terminer la section.: -)

3
répondu user3533685 2014-04-14 21:15:31

j'ai réussi à courir Jersey WS sur mon AS7 JBOSS.

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

mon code échantillon de jersey a été obtenu à partir de: http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/

la seule chose que je fais pour le maillot est d'enlever l'init-param du web.xml et copie 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
répondu Jason 2011-12-20 02:04:03
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
répondu Raju Cluster 2014-07-25 10:55:03

Ahother option:

  1. Modifier autonome/configuration/autonome.xml et commente toutes les entrées jaxrs. Ceci configurera Jersey au lieu de RESTEasy.
  2. Supprimer jboss-web.xml from WEB-INF / web.XML. Ce fichier ne fonctionne pas avec JBoss 7
  3. Modifier le web.xml, ajouter un com init-param.soleil.Jersey.config.propriété.paquets configurés sur le paquet 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
répondu Ignacio Rubio 2014-10-06 09:21:06

vous pouvez surmonter cela dans la configuration autonome en modifiant la configuration/autonome.xml et suppression des références à jaxrs dans la section extensions et profil. Note, même si j'ai commenté ces portions dans mon autonomes.xml, JBoss supprimera automatiquement ces références lors du prochain démarrage...

0
répondu Duan 2011-08-27 22:16:22

pouvons-nous mettre à jour l'approche "serveur-agnostique" pour inclure JBoss 7.1.1 et Servlet 3.0?

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

0
répondu TomEE 2013-02-14 17:50:47

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. En plus de filtrer restEasy dans le web.xml donne instruction à Jersey d'utiliser Jackson. Vous pouvez lire à propos de cette configuration ici.

pour gagner du temps dans les calculs de configuration, je poste web.xml et pom.xml à partir d'un 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
répondu Alex P 2013-11-11 12:26:26

vous devez exclure l'activation du sous-système jaxrs pour votre déploiement ajoutez ceci 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 vous rendre autonome.xml et supprimer le sous-système. Pour ce faire, vous devez supprimer le

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

une partie de la configuration, une partie d'extension de On top peut rester, elle ne fera pas de mal dans les deux cas. ou vous pouvez vous connecter au serveur avec CLI et exécuter

/subsystem=webservices:remove()

Juste une remarque, d'exclure les sous-systèmes de la fonctionnalité et de déploiement-structure: 1.2 a été ajouté au 7.1.2 et ne fonctionnera donc pas sur le 7.1.1.

0
répondu ctomc 2014-02-20 11:02:57