2011-08-05 37 views
33

Hiện đang chạy một số ứng dụng web trên Jboss AS 4/5 và tôi đang thử nghiệm di chuyển sang jboss7. Khi tôi cố gắng triển khai một jersey dựa webapp trên JBoss AS 7 (hồ sơ đầy đủ với tập tin cấu hình độc lập-preview), tôi nhận được:Triển khai ứng dụng web Jersey trên Jboss AS 7

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

tôi đã thực hiện một chút săn bắn xung quanh trên đó và thấy rằng RestEasy là triển khai JAX-RS mặc định được nhúng vào Máy chủ ứng dụng. Các bài đăng như http://community.jboss.org/message/579996https://issues.jboss.org/browse/JBAS-8830) đề cập đến việc người triển khai RestEasy sẽ tiếp quản.

Trong AS 6, có vẻ như dễ dàng hơn để loại bỏ các Deployer trong khi tôi đã không nhìn thấy bất kỳ giải pháp cho AS 7.

Trả lời

68

nó đã được đề cập trong bài này: https://community.jboss.org/message/744530#744530, bạn chỉ có thể yêu cầu các module resteasy không quét khác Triển khai JAX RS trong ứng dụng web của bạn; chỉ thêm video này vào web.xml của bạn:

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

làm việc tốt cho tôi

+0

Đã hoạt động! Câu trả lời rất đơn giản và tốt! –

+0

Làm việc cho tôi! Một chút buồn web.xml chứa một số cấu hình JBoss cụ thể. Tôi thích làm cho nó hoạt động bằng cách sửa đổi tệp jboss-deployment-structure.xml, nhưng điều đó không thành công. – Esk

+0

nó giống như một lỗi của jboss .. tôi cũng không muốn sửa đổi web.xml của tôi nhưng dường như không có tùy chọn khác – thiagoh

0

Bạn có thể vượt qua này trong cấu hình độc lập bằng cách thay đổi cấu hình/standalone.xml và loại bỏ các tham chiếu đến jaxrs trong phần mở rộng và hồ sơ. Lưu ý, mặc dù tôi đã nhận xét các phần đó trong tệp standalone.xml của tôi, JBoss sẽ tự động loại bỏ các tham chiếu đó hoàn toàn vào lần khởi động tiếp theo ...

+0

Nếu bạn có nghĩa là các chỉnh sửa của bạn không tồn tại, bạn cần tắt máy chủ trước khi thực hiện chỉnh sửa XML. Mọi thay đổi được thực hiện cho thời gian chạy sẽ bị ghi đè khi khởi động lại. Các thay đổi được thực hiện ngoại tuyến hoặc thông qua Bảng điều khiển quản lý hoặc CLI sẽ vẫn tồn tại lâu dài. Bằng cách này, bạn có thể tạo và tải cấu hình máy chủ tùy chỉnh theo yêu cầu. – ddri

1

Tôi đã quản lý để chạy Jersey WS trên JBOSS AS7 của mình.

gì tôi làm cho JBOSS chỉ là loại bỏ tất cả mọi thứ liên quan đến JAX-RS trong standalone.xml

My mẫu mã jersey nhận được từ: http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/

Điều duy nhất tôi làm cho áo là loại bỏ các init-param từ web.xml và sao chép lib vào 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

Bên cạnh đó loại bỏ các jaxrs toàn bộ hệ thống phụ trong standalone.xml như đã đề cập trong bài viết khác trừ các module RESTEasy trong jboss-deployment-structure.xml cũng có thể làm việc.

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

Ngoài ra kiểm tra

5

tôi tin rằng phương pháp đúng là sử dụng máy chủ ứng dụng thuyết bất khả tri triển khai ứng dụng JAX-RS. Không cần phải gây rối với bất kỳ cấu hình JBoss nào. Tất cả những gì bạn cần là mở rộng javax.ws.rs.core.Application trong ứng dụng web JAX-RS của bạn. Bạn có thể tìm thấy một ví dụ here. Sau đó, bạn cần phải đặt điều này trong web.xml của bạn.

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

Cơ chế quét gói không hoạt động chính xác trên JBoss 7.x. Tôi đã thử nghiệm phương pháp này thành công trong JBoss 7.0.2.Final và JBoss 7.1.1.Final.

+0

Tôi đang đối mặt với cùng một ngoại lệ nhưng các thư viện của tôi nằm trong EAR/lib. Làm thế nào để tắt máy quét resteasy cho EAR/lib? – Sriram

0

Chúng tôi có thể cập nhật cách tiếp cận "không tin cậy máy chủ" để bao gồm JBoss 7.1.1 và Servlet 3.0 không?

<context-param> không hợp lệ trong phiên bản web-xml 3.0.

0

Đây là những gì đã hiệu quả đối với tôi đối với JBoss 7.1.1 và Jersey 1.17.1. Không cần sửa đổi standalone.xml hoặc domain.xml. Bên cạnh việc lọc restEasy trong web.xml, hãy hướng dẫn Jersey sử dụng Jackson. Bạn có thể đọc về cấu hình này here.

Để tiết kiệm thời gian trong dự đoán cấu hình, tôi đang đăng web.xmlpom.xml từ dự án thử nghiệm.

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

Bạn nên loại trừ jaxrs hệ thống phụ từ được kích hoạt cho việc triển khai của bạn thêm này vào 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> 

hoặc bạn có thể truy cập standalone.xml và xóa hệ thống con ở đó. Để làm như vậy, bạn cần phải xóa

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

một phần của cấu hình, phần mở rộng trên cùng có thể không bị tổn hại theo cách nào. hoặc bạn có thể kết nối với máy chủ với CLI và chạy

/subsystem=webservices:remove() 

Chỉ cần một lưu ý, loại trừ-hệ thống con chức năng và triển khai-strucure: 1.2 đã được bổ sung trong 7.1.2 và như vậy sẽ không hoạt động trên trên 7.1.1.

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

sẽ làm các trick, hoạt động tốt với 7.3AS.ctomc chỉ bỏ lỡ một dấu gạch chéo nhỏ cuối cùng để chấm dứt phần :-)

1
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

Ahother tùy chọn:.

  1. Chỉnh sửa standalone/configuration/standalone.xml và nhận xét tất cả các mục nhập jaxrs. Điều này sẽ cấu hình Jersey thay vì RESTEasy.
  2. Xóa tệp jboss-web.xml khỏi WEB-INF/web.xml. Tập tin này không longers làm việc với JBoss 7
  3. Sửa web.xml, thêm một com.sun.jersey.config.property.packages init-param cấu hình để gói của tài nguyên của bạn, như:

    <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

Các vấn đề liên quan