私はjBossAS 7を使用してさまざまなプロジェクトを公開しており、それらはすべてJersey APIを使用しているため、すべてのプロジェクトにデプロイするのではなく、そのためのモジュールを作成したいと思いました。そのために、JBOSS_HOME\modules\com\Sun\Jersey\mainフォルダーを作成し、このフォルダーにJerseyjarとファイルmodule.xmlを配置しました。
<?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\standalone.xmlから次の行を削除しました。
<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
<extension module="org.jboss.as.jaxrs"/>
MyProjectEAR\META-INFフォルダーに、次の構造でjboss-deployment-structure.xmlファイルを作成しました。
<?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>
私のMyProject\webContent\web.xmlファイルは次のとおりです。
<?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にあるマニフェストファイルは次のとおりです。
Manifest-Version: 1.0
Class-Path:
プロジェクトをデプロイしようとすると、次のエラーが発生しました。
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\""}}}}
*編集:* JerseyAPIをJBOSS_HOME\modules\com\Sun\jsf-impl\mainに配置し、対応するmodule.xmlを変更すると、すべて正常に機能します。この場所の違いは何ですか?
追加する必要がありました
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="com.Sun.jersey" slot="main"/>
</global-modules>
</subsystem>
jBOSS_HOME\Standalone\configuration\standalone.xml設定ファイルに
デプロイメント内のモジュールへの依存関係を指定する必要があります。
META-INF\MANIFEST.MF
Dependencies: com.Sun.jersey
参照 https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7
すでに答えはありますが、今後の読者のために少し明確にしたいと思います。
JBoss 7(EAP 6)の他のデプロイメントの依存関係としてJBossモジュールを宣言する場所は3か所あります。
ほとんどの場合、それらは代替です。
1。グローバルモジュール
グローバルモジュールは、JBoss Enterprise Application Platform6がすべてのアプリケーションへの依存関係として提供するモジュールです。すべてのモジュールは、アプリケーションサーバーのグローバルモジュールのリストに追加することでグローバルにすることができます。
管理コンソール(ソースを参照)から、または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
依存関係モジュール名のコンマ区切りリストを使用して、Dependencies
エントリをMANIFEST.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
が表示されます。
3。 jboss-deployment-structure.xml
jboss-deployment-structure.xmlは、クラスのロードをきめ細かく制御するために使用できるJBoss固有のデプロイメント記述子です。最上位のデプロイメント、META-INF(またはWebデプロイメントの場合はWEB-INF)に配置する必要があります
以下のドキュメントから、MANIFEST.MFと比較してどれほど強力であるかがわかります。最も単純なケースとして、次の例を示します。
<?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-デプロイメントに明示的なモジュール依存関係を追加する
Mavenを使用している場合は、次のようにJBossASのモジュールへの参照を追加できます。
<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>
これにより、マニフェストエントリが自動的に生成されます。
個人的には、このアプローチを使用して、ロード中に「ネイティブライブラリxxxxxxxがすでに別のクラスローダーにロードされています」エラーを回避する必要がありますcom.Microsoft.jdbc.sqlserver.SQLServerDriver JBossASでモジュールとして定義しました-このようにして、JNDIで定義された接続をMSSQLに接続できると同時に、その依存関係を再利用してDBに直接接続できます(今回はJNDIではなくDriverManagerを介して)。
私はjboss-modulesの専門家ではありませんが、試すことができることがいくつかあります。
すべてのJARとmodule.xmlをJBOSS_HOME\modules\com\Sun\Jersey\main
に配置するとおっしゃいました。大文字のJに注意してください。それが重要かどうかはわかりませんが、一貫性を保つために、少なくとも小文字にすることをお勧めします。
また、<include path="**"/>
にjboss-deployment-structure.xml
が必要だとは思いません。
繰り返しますが、私は間違いなくjboss-modulesの専門家ではないため、間違っている可能性がありますが、最初にこれら2つのことを試してみます。
グローバルモジュールは、CLIインターフェイスを介して追加することもできます。
これにより、バッチファイルを作成して実行できるため、変更を簡単に行うことができます。/jboss-cli.sh--file {ファイルへのパス}
実際に機能したweb.xmlのinitパラメータをコメントアウトします...
<?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>