wake-up-neo.com

Bereitstellen einer Jersey-Webanwendung auf Jboss AS 7

Derzeit laufen einige Webapps auf Jboss AS 4/5 und ich teste die Migration auf jboss7. Wenn ich versuche, eine Jersey-basierte Webanwendung auf JBoss AS 7 (vollständiges Profil mit eigenständiger Vorschau-Konfigurationsdatei) bereitzustellen, erhalte ich Folgendes:

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

Ich habe ein bisschen herumgesucht und festgestellt, dass RestEasy die in Application Server eingebettete JAX-RS-Standardimplementierung ist. Beiträge wie http://community.jboss.org/message/579996 und https://issues.jboss.org/browse/JBAS-88 ) erwähnen, dass der RestEasy Deployer übernimmt.

In AS 6 scheint es einfacher zu sein, den Deployer zu entfernen, obwohl ich keine Lösungen für AS 7 gesehen habe.

33
DOS

es wurde bereits in diesem Beitrag erwähnt: https://community.jboss.org/message/744530#7445 Sie können das Resteasy-Modul nur bitten, nicht nach anderen JAX RS-Implementierungen in Ihrer Webanwendung zu suchen ; Füge dies einfach zu deiner web.xml hinzu:

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

funktionierte gut für mich

69
Anthony Dahanne

Neben dem Entfernen des gesamten jaxrs-Subsystems in standalone.xml wie in den anderen Beiträgen erwähnt, mit Ausnahme der RESTEasy-Module in jboss-deployment-structure.xml kann auch funktionieren.

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

Schau auch mal rein

6

Ich glaube, dass der richtige Ansatz darin besteht, die JAX-RS-Anwendungsbereitstellung unabhängig vom App-Server zu verwenden. Sie müssen sich nicht mit JBoss-Konfigurationen herumschlagen. Alles, was Sie benötigen, ist die Erweiterung javax.ws.rs.core.Application in Ihrer JAX-RS-Webanwendung. Sie können ein Beispiel finden hier . Dann müssen Sie dies in Ihre web.xml einfügen.

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

Der Paket-Scan-Mechanismus funktioniert unter JBoss 7.x nicht richtig. Ich habe diesen Ansatz erfolgreich in JBoss 7.0.2.Final und JBoss 7.1.1.Final getestet.

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

Will den Trick machen, funktioniert hervorragend mit 7.3AS.ctomc hat am Ende nur einen winzigen Schrägstrich verpasst, um den Abschnitt zu beenden. :-)

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

Ich habe es geschafft, Jersey WS auf meinem JBOSS AS7 auszuführen.

Was ich für JBOSS tue, ist einfach alles zu entfernen, was mit jax-rs in standalone.xml zu tun hat

Mein Jersey-Beispielcode stammt von: http://www.ibm.com/developerworks/web/library/wa-aj-Tomcat/

Das einzige, was ich für das Trikot mache, ist das Entfernen des Init-Parameters aus der Datei web.xml und das Kopieren der Trikotlib nach 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

Weitere Option:

  1. Bearbeiten Sie standalone/configuration/standalone.xml und kommentieren Sie alle jaxrs-Einträge aus. Dadurch wird Jersey anstelle von RESTEasy konfiguriert.
  2. Entfernen Sie jboss-web.xml aus WEB-INF/web.xml. Diese Datei funktioniert nicht mehr mit JBoss 7
  3. Bearbeiten Sie die Datei web.xml, und fügen Sie ein init-param com.Sun.jersey.config.property.packages hinzu, das für das Paket Ihrer Ressource konfiguriert ist.

    <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

Hier ist, was für mich für JBoss 7.1.1 und Jersey 1.17.1 gearbeitet hat. Sie müssen weder standalone.xml Noch domain.xml Ändern. Neben dem Filtern von restEasy in web.xml wird Jersey angewiesen, Jackson zu verwenden. Sie können über diese Konfiguration lesen hier .

Um Zeit beim Erraten der Konfiguration zu sparen, veröffentliche ich web.xml Und pom.xml Aus dem Testprojekt.

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

Sie können dies in der Standalone-Konfiguration umgehen, indem Sie configuration/standalone.xml ändern und Verweise auf jaxrs im Abschnitt zu Erweiterungen und Profilen entfernen. Beachten Sie, dass JBoss diese Referenzen beim nächsten Start automatisch entfernt, obwohl ich diese Teile in meiner standalone.xml auskommentiert habe ...

0
Duan

Sie sollten das jaxrs-Subsystem von der Aktivierung für Ihre Bereitstellung ausschließen und dieses in META-INF/jboss-deployment-structure.xml hinzufügen

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

oder Sie können zu standalone.xml gehen und dort das Subsystem entfernen. Dazu müssen Sie entfernen

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

teil der Konfiguration, Erweiterung Teil von oben kann es so oder so bleiben, es wird nicht schaden. oder Sie können eine Verbindung zum Server mit CLI herstellen und ausführen

/subsystem=webservices:remove()

Nur eine Anmerkung, Funktionen von Exclude-Subsystemen und Bereitstellungsstruktur: 1.2 wurde in 7.1.2 hinzugefügt und funktioniert daher in 7.1.1 nicht.

0
Tomaz Cerar

Können wir den "Server-Agnostic" -Ansatz so aktualisieren, dass er JBoss 7.1.1 und Servlet 3.0 enthält?

<context-param> ist in einer Web-XML-Version 3.0 ungültig.

0
TomEE