2012-03-29 15 views
8

में मॉड्यूल बनाना मैं अपनी विभिन्न परियोजनाओं को प्रकाशित करने के लिए जेबॉस एएस 7 का उपयोग कर रहा हूं, और उनमें से सभी जर्सी एपीआई का उपयोग करते हैं, इसलिए प्रत्येक प्रोजेक्ट में इसे तैनात करने के बजाय मैं इसके लिए एक मॉड्यूल बनाना चाहता हूं। कि के लिए, मैं फ़ोल्डर JBOSS_HOME \ मॉड्यूल \ कॉम \ सूरज \ जर्सी \ मुख्य बनाया है और इस फ़ोल्डर में मैं रखा जर्सी जार के और फ़ाइल 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- के उपयोग को रोकने के लिए आरएस मैं फ़ाइल से निकाल दिया JBOSS_HOME \ स्टैंडअलोन \ standalone.xml निम्नलिखित लाइनों:

:

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

MyProjectEAR \ META-INF फ़ोल्डर में मैं निम्नलिखित संरचना के साथ jboss तैनाती-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> 
<?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: 

जब मैं करने की कोशिश की परियोजना मैं निम्नलिखित त्रुटि मिली तैनात:

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\""}}}} 

* संपादित करें: * मैं JBOSS_HOME \ मॉड्यूल में जर्सी एपीआई जगह \ कॉम \ सूरज \ JSF-impl \ मुख्य और ग संबंधित मॉड्यूल.एक्सएमएल सब कुछ ठीक काम करता है। इस स्थान का क्या अलग है?

उत्तर

7

मैं 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 विशेषज्ञ नहीं हूं, लेकिन कुछ ऐसी चीजें हैं जिन्हें आप आजमा सकते हैं।

आपने कहा कि आपने JBOSS_HOME\modules\com\sun\Jersey\main में सभी जेएआर और मॉड्यूल.एक्सएमएल डाले हैं। राजधानी जे पर ध्यान दें। मुझे नहीं पता कि यह महत्वपूर्ण है, लेकिन आप कम से कम स्थिरता के लिए इसे कम मामला बनाना चाहते हैं।

मुझे यह भी नहीं लगता कि आप jboss-deployment-structure.xml में चाहते हैं।

फिर से, मैं गलत हो सकता था क्योंकि मैं निश्चित रूप से एक jboss-modules विशेषज्ञ नहीं हूं, लेकिन मैं पहले उन दो चीजों को आजमाऊंगा।

+0

राजधानी जम्मू सिर्फ एक त्रुटि थी जब मैं पथ यहाँ टाइप किया;) कोशिश को हटाने टी वह <पथ = "**" /> शामिल है लेकिन यह अभी भी काम नहीं करता है :( –

+0

शायद कुछ खराब XML को jboss-deployment-struct.xml में डालने का प्रयास करें ताकि यह देखने के लिए कि यह संसाधित हो रहा है या नहीं। शायद समस्या का हिस्सा है। फिर, यह सिर्फ एक अनुमान है हालांकि। –

0

वेब.एक्सएमएल में init param को टिप्पणी करें जो वास्तव में खराब है केड ...

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

वैश्विक मॉड्यूल को सीएलआई इंटरफ़ेस के माध्यम से भी जोड़ा जा सकता है।

इस के रूप में आप एक बैच फ़ाइल बना सकते हैं और यदि Maven का उपयोग कर इसे --file ./jboss-cli.sh {दायर करने के लिए पथ}

2

चला सकते हैं यह आसान परिवर्तन करने के लिए, आप के लिए एक संदर्भ जोड़ सकते हैं बनाता है जेबॉस एएस में एक मॉड्यूल इस तरह:

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

जो स्वचालित रूप से आपके लिए मैनिफेस्ट प्रविष्टियां उत्पन्न करेगा।

मैं व्यक्तिगत रूप से, जबकि com.microsoft.jdbc.sqlserver.SQLServerDriver लोड हो रहा है कि मैं JBoss के रूप में एक मॉड्यूल के रूप में परिभाषित किया गया है इस दृष्टिकोण का उपयोग करने के लिए से बचने के लिए त्रुटि "मूल लाइब्रेरी पहले से ही एक और classloader में लोड xxxxxxx" है - यही कारण है कि जिस तरह से जेएनडीआई परिभाषित कनेक्शन एमएसएसएलएल से कनेक्ट हो सकते हैं, और साथ ही मैं डीबी से सीधे कनेक्ट होने के लिए उस निर्भरता का पुन: उपयोग कर सकता हूं (इस बार जेएनडीआई के बजाए चालक प्रबंधक प्रबंधक)।

3

पहले से ही एक उत्तर है, लेकिन मैं भविष्य के पाठकों के लिए विषय को थोड़ा सा स्पष्ट करना चाहता हूं।

तीन स्थानों जहां JBoss 7 में अन्य की तैनाती की निर्भरता के रूप में एक JBoss मॉड्यूल घोषित करने के लिए (ईएपी 6) के होते हैं:

  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

मैनिफ़ेस्ट में Dependencies प्रविष्टि जोड़ें निर्भरता मॉड्यूल नामों की एक अल्पविराम से अलग सूची के साथ .MF फ़ाइल।

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> 

नोट: export का उपयोग कर com.foo.bar.test-module सब कान में बंडल मॉड्यूल के लिए दिखाई दे बनाता है।

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)

आप कैसे शक्तिशाली यह 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=truecom.foo.bar.test-module सब कान में बंडल मॉड्यूल के लिए दिखाई दे बनाता है।

नोट 2: विशेषता optional=true/false jboss-deployment-struct.xml में भी उपलब्ध है, लेकिन विशिष्ट संस्करणों (शायद < ईएपी 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

संबंधित मुद्दे