2012-03-29 77 views
8

私は様々なプロジェクトを公開するためにjBoss AS 7を使用していますが、すべてがJersey APIを使用していますので、すべてのプロジェクトに展開する代わりにモジュールを作成します。そのために、私は、フォルダJBOSS_HOME \モジュール\ COM \日\ジャージー\メインを作成し、このフォルダに私はジャージージャーのとファイルmodule.xmlを置い:jBossでモジュールを作成する

<?xml version="1.0" encoding="UTF-8"?> 
<module xmlns="urn:jboss:module:1.1" name="com.sun.jersey"> 
    <properties> 
     <property name="jboss.api" value="private"/> 
    </properties> 
    <resources> 
     <resource-root path="jersey-bundle-1.12.jar"/> 
     <resource-root path="asm-3.1.jar"/> 
     <resource-root path="jackson-core-asl-1.9.2.jar"/> 
     <resource-root path="jackson-jaxrs-1.9.2.jar"/> 
     <resource-root path="jackson-mapper-asl-1.9.2.jar"/> 
     <resource-root path="jackson-xc-1.9.2.jar"/>   
     <resource-root path="jersey-client-1.12.jar"/> 
     <resource-root path="jersey-core-1.12.jar"/> 
     <resource-root path="jersey-json-1.12.jar"/> 
     <resource-root path="jersey-server-1.12.jar"/> 
     <resource-root path="jersey-servlet-1.12.jar"/> 
     <resource-root path="jettison-1.1.jar"/> 
     <resource-root path="jsr311-api-1.1.1.jar"/> 
    </resources> 
    <dependencies> 
     <module name="javax.api"/> 
     <module name="org.jboss.staxmapper"/> 
     <module name="org.jboss.as.controller"/> 
     <module name="org.jboss.as.server"/> 
     <module name="org.jboss.modules"/> 
     <module name="org.jboss.msc"/> 
     <module name="org.jboss.logging"/> 
     <module name="org.jboss.vfs"/> 
    </dependencies> 
</module> 

JBossのJAX-の使用を防ぐためにRS私は、ファイルから削除JBOSS_HOME \スタンドアロン\次の行standalone.xml:

:私は次のような構造を持つのjboss-展開するstructure.xmlファイルを作成しMyProjectEAR \ META-INFフォルダで

<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/> 
<extension module="org.jboss.as.jaxrs"/> 

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> 
    <deployment> 
     <dependencies> 
     <module name="com.sun.jersey" slot="main" > 
      <imports> 
       <include path="META-INF/**"/> 
       <include path="**"/> 
      </imports> 
     </module> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name> MyProject </display-name> 

    <servlet> 
     <description> 
     </description> 
     <servlet-name>Jersey Servlet</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <description></description> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.MyProject.service.REST_Application</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey Servlet</servlet-name> 
     <url-pattern>/jaxrs/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

MyProjectと\ WebContentを\ META-INF \ MANIFEST.MFでの私のマニフェストファイルの存在はこれです:マイMyProjectと\ WebContentを\ web.xmlファイルはこれです、私がしようとした

Manifest-Version: 1.0 
Class-Path: 

メインとC \ *私はJBOSS_HOME \モジュールにジャージーのAPIを配置する場合、\ COM \太陽の\ JSF-のimpl:

12:12:11,804 INFO [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015876: Starting deployment of "MyProjectEAR.ear" 
12:12:11,852 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015876: Starting deployment of "MyProject.war" 
12:12:12,052 WARN [org.jboss.as.dependency.private] (MSC service thread 1-3) JBAS018567: Deployment "deployment.MyProjectEAR.ear" is using a private module ("com.sun.jersey:main") which may be changed or removed in future versions without notice. 
12:12:12,054 WARN [org.jboss.as.dependency.private] (MSC service thread 1-3) JBAS018567: Deployment "deployment.MyProjectEAR.ear" is using a private module ("com.sun.jersey:main") which may be changed or removed in future versions without notice. 
12:12:12,055 WARN [org.jboss.as.dependency.private] (MSC service thread 1-3) JBAS018567: Deployment "deployment.MyProjectEAR.ear" is using a private module ("com.sun.misc:main") which may be changed or removed in future versions without notice. 
12:12:12,057 WARN [org.jboss.as.dependency.private] (MSC service thread 1-3) JBAS018567: Deployment "deployment.MyProjectEAR.ear" is using a private module ("com.sun.misc:main") which may be changed or removed in future versions without notice. 
12:12:12,117 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC00001: Failed to start service jboss.deployment.subunit."MyProjectEAR.ear"."MyProject.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."MyProjectEAR.ear"."MyProject.war".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "MyProject.war" of deployment "MyProjectEAR.ear" 
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.0.Final.jar:7.1.0.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_30] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_30] 
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_30] 
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011093: Could not load component class com.sun.jersey.spi.container.servlet.ServletContainer 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:113) 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:54) 
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.0.Final.jar:7.1.0.Final] 
    ... 5 more 
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer from [Module "deployment.MyProjectEAR.ear.MyProject.war:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.1.1.GA] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.1.1.GA] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.1.1.GA] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.1.1.GA] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.1.1.GA] 
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:111) 
    ... 7 more 
12:12:12,340 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "MyProjectEAR.ear" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.deployment.subunit.\"MyProjectEAR.ear\".\"MyProject.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.subunit.\"MyProjectEAR.ear\".\"MyProject.war\".POST_MODULE: Failed to process phase POST_MODULE of subdeployment \"MyProject.war\" of deployment \"MyProjectEAR.ear\""}} 
12:12:12,351 INFO [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015877: Stopped deployment MyProject.war in 9ms 
12:12:12,353 INFO [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015877: Stopped deployment MyProjectEAR.ear in 12ms 
12:12:12,355 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report 
JBAS014777: Services which failed to start:  service jboss.deployment.subunit."MyProjectEAR.ear"."MyProject.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."MyProjectEAR.ear"."MyProject.war".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "MyProject.war" of deployment "MyProjectEAR.ear" 
12:12:12,359 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.deployment.subunit.\"MyProjectEAR.ear\".\"MyProject.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.subunit.\"MyProjectEAR.ear\".\"MyProject.war\".POST_MODULE: Failed to process phase POST_MODULE of subdeployment \"MyProject.war\" of deployment \"MyProjectEAR.ear\""}}}} 

*編集:私は、次のエラーを得たプロジェクトを展開対応するmodule.xmlをすべて確認してください。この場所は何が違うのですか?

答えて

7

META-INF \ MANIFEST.MF

Dependencies: com.sun.jersey 

関連項目私はJBOSS_HOME \スタンドアロン\設定\ standalone.xmlコンフィギュレーションファイル

<subsystem xmlns="urn:jboss:domain:ee:1.0"> 
    <global-modules> 
     <module name="com.sun.jersey" slot="main"/> 
    </global-modules> 
</subsystem> 

を追加する必要が

0

私はjboss-modulesのエキスパートではありませんが、試してみることができることがいくつかあります。

あなたはすべてのJARとmodule.xmlをJBOSS_HOME\modules\com\sun\Jersey\mainに入れると言っています。首都Jに注目してください。私はそれが重要であるとは知らないが、少なくとも一貫性を保つためには、小文字にしたいと思うかもしれない。

また、私はあなたがjboss-deployment-structure.xml<include path="**"/>を望んでいないと思います。

私は間違いなくjboss-modulesの専門家ではないので、私は間違っているかもしれませんが、私は最初に2つのことを試してみます。

+0

資本Jは、私がここにパスを入力しただけでエラーでした彼はでもまだ動作しません:( –

+0

おそらくjboss-deployment-structure.xmlにいくつかの悪いXMLを入れて、それが処理されているかどうかを調べてみてください。多分問題の一部がそこにあります。再び、それはちょうど推測です。 –

0

web.xmlのinit paramをコメントアウトしてくださいked ...

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name> MyProject </display-name> 

    <servlet> 
     <description> 
     </description> 
     <servlet-name>Jersey Servlet</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <!-- <init-param> 
      <description></description> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.MyProject.service.REST_Application</param-value> 
     </init-param>--> 

     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey Servlet</servlet-name> 
     <url-pattern>/jaxrs/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
0

グローバルモジュールはCLIインターフェイスから追加することもできます。

バッチファイルを作成し、それ./jboss-cli.sh --file {ファイルへのパスを}実行することができますので、これはMavenを使用している場合は、への参照を追加することができ、変更を行うために、それは簡単

2

を作りますJBoss ASのモジュール:

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
     <archive> 
      <manifestEntries> 
       <!-- List your dependencies here --> 
       <Dependencies>com.sun.jersey</Dependencies> 
      </manifestEntries> 
     </archive> 
    </configuration> 
</plugin> 

これは自動的にマニフェストエントリを生成します。

私は個人的に私は、JBoss AS内のモジュールとして定義されていることにcom.microsoft.jdbc.sqlserver.SQLServerDriverのロード中にエラー「ネイティブライブラリがすでに別のクラスローダにロードされXXXXXXX」を避けるために、このアプローチを使用する必要があります - それ双方向のJNDIで定義された接続はMSSQLに接続でき、同時にその依存関係を再利用してDBに直接接続することができます(今度はJNDIではなくDriverManager)。

3

すでに回答がありますが、今後の読者には少し話題を明確にしたいと思います。

のJBoss 7における他の配備の依存性(EAP 6)としてのJBossモジュールを宣言する三箇所あります

  1. グローバルモジュール
  2. MANIFEST.MF
  3. JBossの展開は-structure.xml

ほとんどの場合、代替です。

1.グローバルモジュール

A global module is a module that JBoss Enterprise Application Platform 6 provides as a dependency to every application. Any module can be made global by adding it to the application server's list of global modules.

あなたが簡単に、またはstandalone.xmlを編集することで、管理コンソールからグローバルモジュール(ソースを参照してください)を追加することができます

<subsystem xmlns="urn:jboss:domain:ee:1.0" >    
    <global-modules> 
    <!-- Add global modules here --> 
    <module name="org.javassist" slot="main" />    
    </global-modules> 
</subsystem> 

2。 MANIFEST.MF

MANIFESTにDependenciesエントリを追加します.MFファイルには、依存関係モジュール名のカンマ区切りリストが含まれています。

Dependencies: org.javassist, org.apache.velocity 

Mavenを使用している場合は、いくつかのプラグインを設定する必要があります。例えば、耳のために 。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ear-plugin</artifactId> 
    <configuration> 
     <version>6</version> 
     ... 
     <defaultLibBundleDir>lib</defaultLibBundleDir> 
     <archive> 
      <manifestEntries> 
       <Dependencies> 
        com.foo.bar.test-module export optional 
        <!-- Beware of new lines! They can quietly break the conf --> 
       </Dependencies> 
      </manifestEntries> 
     </archive> 
     <modules> 
      ... 
     </modules> 
    </configuration> 
</plugin> 

注:exportを使用しては耳にバンドルされたすべてのモジュールのcom.foo.bar.test-moduleが表示されるようになります。あなたはそれがMANIFEST.MFと比較してどのように強力な以下のドキュメントから見ることができます

3のjboss-展開するstructure.xml

jboss-deployment-structure.xml is a JBoss specific deployment descriptor that can be used to control class loading in a fine grained manner. It should be placed in the top level deployment, in META-INF (or WEB-INF for web deployments)

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> 
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated> 
    <deployment> 
     <dependencies> 
      <!-- Add modules here --> 
      <module name="com.foo.bar.test-module" export="true"/> 
      <module name="org.apache.axis.axis-jaxrpc" export="true"/> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

注1: は、最も単純なケースの場合は、ここでの例ちょうどMANIFEST.MFと同じように、export=trueが耳にバンドルされたすべてのモジュールのcom.foo.bar.test-moduleが見えるように設定します。

注2:属性optional=true/falseはjboss-deployment-structure.xmlでも利用できますが、特定のバージョン(おそらく< EAP 6.4.7)では正しく機能しません。必要ならそれをチェックしてください。

希望します。

出典:; はトンを削除しようとしました)

RedHat docs - Add an Explicit Module Dependency to a Deployment

RedHat docs - Configuring Modules

RedHat docs - Add a module to all deployments

JBoss AS 7 Developer Guide

関連する問題