[英]Deploying a Jersey webapp on Jboss AS 7
Currently running some webapps on Jboss AS 4/5 and I am testing migration to jboss7. 当前正在Jboss AS 4/5上运行一些webapp,我正在测试向jboss7的迁移。 When I try to deploy a jersey based webapp on JBoss AS 7 (full profile with standalone-preview config file), I get:
当我尝试在JBoss AS 7(带有独立预览配置文件的完整配置文件)上部署基于球衣的Web应用程序时,我得到:
org.jboss.as.server.deployment.DeploymentUnitProcessingException: Only one JAX-RS Application Class allowed.
I've done a bit of hunting around on it and found that RestEasy is the default JAX-RS implementation embedded into Application Server. 我已经做了一些探索,发现RestEasy是嵌入到Application Server中的默认JAX-RS实现。 Posts like http://community.jboss.org/message/579996 and https://issues.jboss.org/browse/JBAS-8830 ) mention that the RestEasy deployer takes over.
像http://community.jboss.org/message/579996和https://issues.jboss.org/browse/JBAS-8830这样的帖子都提到了RestEasy部署程序接管了这一工作。
In AS 6, it seems easier to remove the deployer whereas I have not seen any solutions for AS 7. 在AS 6中,删除部署程序似乎更容易,而我还没有看到AS 7的任何解决方案。
it has already been mentioned in this post : https://community.jboss.org/message/744530#744530 , you can just ask the resteasy module to not scan for other JAX RS implementations in your webapp; 这篇文章已经提到了它: https ://community.jboss.org/message/744530#744530,您可以要求resteasy模块不要扫描您的webapp中的其他JAX RS实现; just add this to your web.xml :
只需将其添加到您的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>
worked fine for me 对我来说很好
Besides removing the entire jaxrs subsystem in standalone.xml
as mentioned in the other posts excluding the RESTEasy modules in jboss-deployment-structure.xml
may also work. 除了删除其他站点中提到的
standalone.xml
的整个jaxrs子系统以外, jboss-deployment-structure.xml
的RESTEasy模块也可能起作用。
<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>
Also check out 还签出
I believe the correct approach is to use app server agnostic JAX-RS application deployment. 我相信正确的方法是使用与应用程序服务器无关的JAX-RS应用程序部署。 No need to mess with any JBoss configuration.
无需弄乱任何JBoss配置。 All you need is, extend javax.ws.rs.core.Application in your JAX-RS web application.
您所需要的只是在JAX-RS Web应用程序中扩展javax.ws.rs.core.Application 。 You can find an example here .
您可以在此处找到示例。 Then, you need to put this in your web.xml.
然后,您需要将其放入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>
Package scanning mechanism does not work correctly on JBoss 7.x. 软件包扫描机制在JBoss 7.x上无法正常工作。 I have tested this approach successfully in JBoss 7.0.2.Final and JBoss 7.1.1.Final.
我已经在JBoss 7.0.2.Final和JBoss 7.1.1.Final中成功测试了这种方法。
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="jaxrs" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
Will do the trick, works great with 7.3AS.ctomc just missed a tiny slash in the end to terminate the section.:-) 可以做到这一点,可以在7.3AS上很好地工作。ctomc只是在结尾处错过了一个小斜线以终止该部分。:-)
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.
Ahother option: 另一个选项:
Edit web.xml, add an init-param com.sun.jersey.config.property.packages configured to your resource's package, like: 编辑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 https://github.com/Atmosphere/atmosphere/wiki/Deploying-Atmosphere-Jersey-in-JBoss-7.1.x
I managed to run Jersey WS on my JBOSS AS7. 我设法在我的JBOSS AS7上运行Jersey WS。
What i do for JBOSS is just remove everything related to jax-rs in standalone.xml 我为JBOSS所做的只是删除了standalone.xml中与jax-rs相关的所有内容
My jersey sample code got from: http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/ 我的球衣示例代码来自: http : //www.ibm.com/developerworks/web/library/wa-aj-tomcat/
The only thing i do for the jersey is remove the init-param from web.xml and copy jersey lib to WebContent/WEB-INF/lib. 我对球衣的唯一操作是从web.xml中删除init-param并将球衣库复制到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>-->
Can we update the "server-agnostic" approach to include JBoss 7.1.1 and Servlet 3.0? 我们是否可以更新“与服务器无关”的方法以包含JBoss 7.1.1和Servlet 3.0?
<context-param>
is invalid in a version 3.0 web-xml. <context-param>
在3.0版Web-xml中无效。
Here is what worked for me for JBoss 7.1.1 and Jersey 1.17.1. 这是适用于JBoss 7.1.1和Jersey 1.17.1的内容。 No need to modify
standalone.xml
or domain.xml
. 无需修改
standalone.xml
或domain.xml
。 Besides filtering restEasy in web.xml instruct Jersey to use Jackson. 除了过滤web.xml中的restEasy之外,它还指示Jersey使用Jackson。 You can read about this configuration here .
您可以在此处阅读有关此配置的信息 。
To save time in configuration guesses, I am posting web.xml
and pom.xml
from test project. 为了节省配置猜测的时间,我从测试项目中发布了
web.xml
和pom.xml
。
web.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 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>
You should exclude jaxrs subsystem from being activated for your deployment add this into META-INF/jboss-deployment-structure.xml 您应该在部署中不激活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>
or you can go to standalone.xml and remove subsystem there. 或者,您可以转到standalone.xml并在那里删除子系统。 To do so, you need to remove
为此,您需要删除
<subsystem xmlns="urn:jboss:domain:jaxrs:1.0">
...
...
<subsystem>
part of configuration, extension part of on top can stay it wont hurt either way. 配置的一部分,顶部的扩展部分可以保持不变。 or you can connect to server with CLI and run
或者您可以使用CLI连接到服务器并运行
/subsystem=webservices:remove()
Just a note, exclude-subsystems functionality and deployment-strucure:1.2 was added in 7.1.2 and as such will not work on on 7.1.1. 请注意,在7.1.2中添加了“排除子系统功能”和“部署结构:1.2”,因此在7.1.1上不起作用。
You can get past this in the standalone configuration by modifying configuration/standalone.xml and removing references to jaxrs in the extensions and profile section. 您可以通过修改configuration / standalone.xml并在扩展和概要文件部分中删除对jaxrs的引用来在独立配置中克服此问题。 Note, even though I commented those portions out in my standalone.xml, JBoss will automagically remove those references altogether on next startup...
注意,即使我在standalone.xml中注释掉了这些部分,JBoss也会在下次启动时自动删除这些引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.