Развертывание веб-клиента на Jboss AS 7
В настоящее время выполняется несколько webapps на Jboss AS 4/5, и я тестирую переход на jboss7. Когда я пытаюсь развернуть веб-приложение jersey на JBoss AS 7 (полный профиль с автономным файлом конфигурации предварительного просмотра), я получаю:
org.jboss.as.server.deployment.DeploymentUnitProcessingException: Only one JAX-RS Application Class allowed.
Я немного поработал над этим и обнаружил, что RestEasy - это стандартная реализация JAX-RS, встроенная в Application Server. Такие сообщения, как http://community.jboss.org/message/579996 и https://issues.jboss.org/browse/JBAS-8830), упоминают, что развертывается развертыватель RestEasy.
В AS 6, кажется, проще удалить развертыватель, тогда как я не видел никаких решений для AS 7.
Ответы
Ответ 1
он уже упоминался в этом сообщении: https://community.jboss.org/message/744530#744530, вы можете просто попросить модуль resteasy не сканировать другие реализации JAX RS в вашем webapp; просто добавьте это в свой 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>
работал отлично для меня
Ответ 2
Помимо удаления всей подсистемы jaxrs в standalone.xml
, как упоминалось в других сообщениях, исключая модули RESTEasy в jboss-deployment-structure.xml
, также может работать.
<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>
Также проверьте
Ответ 3
Я считаю, что правильный подход заключается в том, чтобы использовать прикладное развертывание приложений JAX-RS на сервере приложений. Не нужно возиться с какой-либо конфигурацией JBoss. Все, что вам нужно, - это расширение javax.ws.rs.core.Application в вашем веб-приложении JAX-RS. Здесь можно найти пример . Затем вам нужно поместить это в свой 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.
Ответ 4
<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 просто пропустил крошечную косую черту в конце, чтобы завершить раздел.: -)
Ответ 5
Мне удалось запустить Jersey WS на моем JBOSS AS7.
Что я делаю для JBOSS, просто удалите все, что связано с jax-rs в standalone.xml
Код моего джерси, полученный от:
http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/
Единственное, что я делаю для трикотажа, это удалить init-param из web.xml и скопировать 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>-->
Ответ 6
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.
Ответ 7
Вариант Ahother:
- Редактировать автономный/конфигурационный/standalone.xml и комментировать все записи jaxrs. Это настроит Джерси вместо RESTEasy.
- Удалите jboss-web.xml из WEB-INF/web.xml. Этот файл больше не работает с JBoss 7
-
Отредактируйте 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
Ответ 8
Вы можете пройти мимо этого в автономной конфигурации, изменив конфигурацию /standalone.xml и удалив ссылки на jaxrs в разделе расширения и профиля. Заметьте, хотя я прокомментировал эти фрагменты в своем standalone.xml, JBoss автоматически удалит эти ссылки при следующем запуске...
Ответ 9
Можем ли мы обновить подход "сервер-агностик", чтобы включить JBoss 7.1.1 и Servlet 3.0?
<context-param>
недействителен в версии 3.0 web-xml.
Ответ 10
Вот что я работал для JBoss 7.1.1 и Jersey 1.17.1. Не нужно изменять standalone.xml
или domain.xml
. Помимо фильтрации restEasy в web.xml инструктирует Джерси использовать Джексона. Вы можете прочитать об этой конфигурации здесь.
Чтобы сэкономить время на догадках конфигурации, я отправляю 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>
Ответ 11
Вы должны исключить возможность активации подсистемы 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()
Просто примечание, функциональность exclude-subsystems и структура развертывания: 1.2 была добавлена в 7.1.2 и, как таковая не будет работать в 7.1.1.