Despliegue de una aplicación web de Jersey en Jboss AS 7

Actualmente ejecuto algunas aplicaciones web en Jboss AS 4/5 y estoy probando la migración a jboss7. Cuando trato de implementar una aplicación basada en jersey en JBoss AS 7 (perfil completo con archivo de configuración de vista previa independiente), obtengo:

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

Hice un poco de búsqueda y descubrí que RestEasy es la implementación predeterminada de JAX-RS integrada en Application Server. Publicaciones como http://community.jboss.org/message/579996 y https://issues.jboss.org/browse/JBAS-8830 ) mencionan que el implementador de RestEasy se hace cargo.

En AS 6, parece más fácil eliminar el implementador, mientras que no he visto ninguna solución para AS 7.

ya se ha mencionado en esta publicación: https://community.jboss.org/message/744530#744530 , puede solicitar al módulo resteasy que no busque otras implementaciones de JAX RS en su aplicación web; solo agregue esto a su web.xml:

  resteasy.scan false   resteasy.scan.providers false   resteasy.scan.resources false  

funcionó bien para mí

Además de eliminar todo el subsistema jaxrs en standalone.xml como se menciona en las otras publicaciones, excluyendo los módulos RESTEasy en jboss-deployment-structure.xml también puede funcionar.

               

También echa un vistazo

  • Archivo de estructura de implementación de JBoss
  • Dependencias de módulos implícitos para implementaciones

Creo que el enfoque correcto es utilizar una aplicación de aplicación JAX-RS independiente del servidor de aplicaciones. No hay necesidad de meterse con ninguna configuración de JBoss. Todo lo que necesita es extender la aplicación javax.ws.rs.core.Application en su aplicación web JAX-RS. Puedes encontrar un ejemplo aquí . Luego, debes poner esto en tu web.xml.

  Jersey Web Application com.sun.jersey.spi.container.servlet.ServletContainer  javax.ws.rs.Application jersey.MyApplication   resteasy.scan false   resteasy.scan.providers false   resteasy.scan.resources false  1  

El mecanismo de escaneo de paquetes no funciona correctamente en JBoss 7.x. He probado este enfoque con éxito en JBoss 7.0.2.Final y JBoss 7.1.1.Final.

         

Hará el truco, funciona muy bien con 7.3AS.ctomc acaba de perder una pequeña barra al final para terminar la sección. 🙂

Logré ejecutar Jersey WS en mi JBOSS AS7.

Lo que hago para JBOSS es simplemente eliminar todo lo relacionado con jax-rs en standalone.xml

El código de muestra de mi jersey se obtuvo de: http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/

Lo único que hago por la camiseta es eliminar el init-param de web.xml y copiar jersey lib en WebContent / WEB-INF / lib.

   
 In web.xml file add the files  resteasy.scan false   resteasy.scan.providers false   resteasy.scan.resources false  and comment out the init-param  This worked out for me in jboss-as-7.1.1.Final and i did not do any changes in standalone.xml. 

Opción Ahother:

  1. Edita autónoma / configuration / standalone.xml y comenta todas las entradas jaxrs. Esto configurará Jersey en lugar de RESTEasy.
  2. Elimine jboss-web.xml de WEB-INF / web.xml. Este archivo ya no funciona con JBoss 7
  3. Edite web.xml, agregue un init-param com.sun.jersey.config.property.packages configurado para el paquete de su recurso, como:

      com.sun.jersey.config.property.packages org.foo  

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

Puede superar esto en la configuración independiente modificando configuration / standalone.xml y eliminando referencias a jaxrs en las extensiones y la sección de perfil. Tenga en cuenta que, aunque comenté esas partes en mi standalone.xml, JBoss automáticamente eliminará esas referencias en el siguiente inicio …

¿Podemos actualizar el enfoque “servidor-agnóstico” para incluir JBoss 7.1.1 y Servlet 3.0?

no es válido en una versión 3.0 web-xml.

Esto es lo que funcionó para mí para JBoss 7.1.1 y Jersey 1.17.1. No es necesario modificar standalone.xml o domain.xml . Además de filtrar restEasy en web.xml, indica a Jersey que use Jackson. Puede leer sobre esta configuración aquí .

Para ahorrar tiempo en las conjeturas de configuración, estoy publicando web.xml y pom.xml desde el proyecto de prueba.

web.xml

   TestJerseyonJBoss  Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.config.property.packages com.test.rest   com.sun.jersey.api.json.POJOMappingFeature true  1   Jersey REST Service /rest/*   resteasy.scan false   resteasy.scan.providers false   resteasy.scan.resources false   

pom.xml

  4.0.0 TestJerseyOnJBoss TestJerseyOnJBoss 0.0.1-SNAPSHOT war  src   maven-compiler-plugin 3.1  1.7 1.7    maven-war-plugin 2.3  WebContent false       com.sun.jersey jersey-bundle 1.17.1   com.sun.jersey jersey-json 1.17.1   asm asm 3.3.1 jar compile   

Debe excluir que el subsistema jaxrs se active para su implementación, agregar esto a META-INF / jboss-deployment-structure.xml

        

o puede ir a standalone.xml y eliminar el subsistema allí. Para hacerlo, debes eliminar

  ... ...  

parte de la configuración, la parte de extensión de la parte superior puede evitar que duela en ambos sentidos. o puede conectarse al servidor con CLI y ejecutar

 /subsystem=webservices:remove() 

Solo una nota, funcionalidad exclude-subsystems y deployment-strucure: 1.2 se agregó en 7.1.2 y, como tal, no funcionará en 7.1.1.