Java 在jbossas中创建模块
我使用JBossAS7发布我的各种项目,它们都使用Jersey API,所以我不想在每个项目中部署它,而是想为它创建一个模块。为此,我创建了JBOSS_HOME\modules\com\sun\Jersey\main文件夹,并在该文件夹中放置了Jersey jar和module.xml文件:Java 在jbossas中创建模块,java,deployment,configuration,jersey,jboss7.x,Java,Deployment,Configuration,Jersey,Jboss7.x,我使用JBossAS7发布我的各种项目,它们都使用Jersey API,所以我不想在每个项目中部署它,而是想为它创建一个模块。为此,我创建了JBOSS_HOME\modules\com\sun\Jersey\main文件夹,并在该文件夹中放置了Jersey jar和module.xml文件: <?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="com.sun.jers
<?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>
当我尝试部署该项目时,出现以下错误:
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\""}}}}
*编辑:如果我将Jersey API放在JBOSS_HOME\modules\com\sun\jsf impl\main中,并更改相应的module.xml,一切正常。这个位置有什么不同?我不是jboss模块专家,但有几件事你可以试试 你说你把所有的JAR和module.xml放在
JBOSS\u HOME\modules\com\sun\Jersey\main
中。注意大写字母J。我不知道这有什么关系,但为了保持一致性,至少您可能希望将其小写
另外,我认为您不希望在jboss部署结构.xml
中使用
同样,我可能错了,因为我肯定不是jboss模块专家,但我会先尝试这两件事。您需要在部署中指定对模块的依赖关系 META-INF\MANIFEST.MF
Dependencies: com.sun.jersey
另请参见我需要添加的内容
<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配置文件注释掉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>
我的项目
泽西Servlet
com.sun.jersey.spi.container.servlet.ServletContainer
1.
泽西Servlet
/jaxrs/*
还可以通过CLI界面添加全局模块
这使得更改变得很容易,因为您可以创建一个批处理文件并运行它。/jboss-cli.sh--file{path to file}如果使用Maven,您可以在jboss中添加对模块的引用,如下所示:
<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>
maven战争插件
2.2
泽西岛
这将自动为您生成清单条目
我个人必须使用这种方法来避免在加载我在JBoss as中定义为模块的com.microsoft.jdbc.sqlserver.SQLServerDriver时出现“本机库xxxxxxx已加载到另一个类加载器”错误-这样JNDI定义的连接可以连接到MSSQL,同时,我可以重用该依赖关系直接连接到DB(这次是通过DriverManager而不是JNDI)。已经有了答案,但我想为将来的读者澄清一下这个主题 有三个地方可以将JBoss模块声明为JBoss 7(EAP 6)中其他部署的依赖项:
<subsystem xmlns="urn:jboss:domain:ee:1.0" >
<global-modules>
<!-- Add global modules here -->
<module name="org.javassist" slot="main" />
</global-modules>
</subsystem>
如果您使用的是Maven,您只需要配置一些插件。
e、 耳塞
<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>
注1:与MANIFEST.MF一样,设置export=true
使com.foo.bar.test模块对ear中捆绑的所有模块可见
注2:jboss-deployment-structure.xml中也提供了属性optional=true/false
,但对于特定版本(可能
希望能有帮助
来源:
当我在这里键入路径时,大写字母J只是一个错误;)尝试删除,但仍然不起作用:(可能尝试在jboss-deployment-structure.XML中放入一些不好的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>
<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>
<subsystem xmlns="urn:jboss:domain:ee:1.0" >
<global-modules>
<!-- Add global modules here -->
<module name="org.javassist" slot="main" />
</global-modules>
</subsystem>
Dependencies: org.javassist, org.apache.velocity
<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>
<?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>