14 Replies Latest reply on Jan 3, 2012 10:01 AM by rhauch

    Deploying modeshape on AS7

    sverker

      Hi

      I'm trying to deploy modeshape on JBoss AS 7 but have run into problems as I can't figure out how to configure the dependencies. In deployments I have the following modules:

       

      modeshape-servies.jar

      modeshape-rest.war

      modeshape-webdav.war

       

      I've also created the org.modeshape.jcr module under the modules structure.

       

      In modeshape-services.jar/META-INF I've placed the following jboss-deployment-structure.xml:

       

      <?xml version="1.0"?>

      <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">

      <deployment>

        <resources>

         <resource-root path="modeshape-common-2.6.0.Beta2.jar"/>

        </resources>

        <dependencies>

         <module name="org.modeshape.jcr" />

        </dependencies>

      </deployment>

      </jboss-deployment-structure>

       

      In modeshape-rest.war and modeshape-webdav.war I've created WEB-INF/jboss-deployment-structure.xml like this:

       

      <?xml version="1.0"?>

      <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">

      <deployment>

        <dependencies>

         <module name="org.modeshape.jcr" />

         <module name="deployment.modeshape-services.jar" />

         <module name="org.slf4j" />

        </dependencies>

      </deployment>

      </jboss-deployment-structure>

       

      Still when deploying I get java.lang.NoClassDefFoundError: org/modeshape/common/util/CheckArg which is a class located in modeshape-service.jar/modeshape-common-2.6.0.Beta2.jar. My impression was from reading the developer guid that the jboss-deployment-structure.xml files above would add this file to the class path of the .war deployments but it's not working.

       

      Can anybody please spread some light on how to correctly configure the dependencies between the deployments above?

       

      Best regards

      Sverker

        • 1. Re: Deploying modeshape on AS7
          rhauch

          There basically are a number of separate components:

           

          • Global Classpath - these are needed by the war files, and should include the two API classes needed by ModeShape clients: modeshape-jcr-api-<version>.jar and jcr.jar file. The "modeshape-jdbc-local-<version>.jar" file contains the ModeShape JDBC driver and is needed if and only if your web applications want to query the repository using JCR-SQL2 via the JDBC API. (I'd recommend getting it working without the JDBC driver at first; you can always add it in later once everything else is working.)
          • Services - this is everything needed by the ModeShape JCR engine (e.g., 'modeshape-jcr-<version>.jar'), including all extensions (e.g., sequencers, connectors, text extractors) and all libraries they are dependent upon. If you're not sure of the dependencies, look at our current Maven assembly that puts together the JARs that are needed for running ModeShape as a service in AS 5 and 6. Note that this includes all extension libraries and their 3rd party dependencies, so if you want to trim down you'll need to look at the dependencies needed for each extension. BTW, I don't tink this includes the SLF4J API jar because it is (or should be) available globally (I hope I'm right about this).
          • Web apps - these should be deployable and self-contained (e.g., they would have their own copies of classes like 'CheckArg'), except for the two API jars that are globally available. They are deployed just like any other web app resource.

           

          Where this gets complicated is that I don't think any of the Java classes in the "modeshape-jbossas-service" project are needed nor can be used in AS 7, since they depend on the profile service used in AS 5 and 6. I was thinking we'd need to create another Java class similar to ManagedEngine that would be instantiated by AS 7 as the service. Perhaps I'm wrong, and the Managed* classes for AS5/6 can actually work in AS7.

           

          Hopefully this is what you need to keep going. I wish I could provide more guidance on AS7 integration, but I just haven't yet had the time to dive into that.

          • 2. Re: Deploying modeshape on AS7
            sverker

            Hi Randall,

            the class loading is fundamentally different in AS7 than in AS5 and AS6. I created a module under $JBOSS_HOME/modules/org/modeshape/jcr/main where I've put jcr-2.0.jar, modeshape-jcr-api-<version>.jar and modeshape-jdbc-local-<version>.jar. The modules.xml file looks like this:

             

            <?xml version="1.0"?>
            <module xmlns="urn:jboss:module:1.0" name="org.modeshape.jcr">
            <resources>
              <resource-root path="jcr-2.0.jar" />
              <resource-root path="modeshape-jcr-api-2.6.0.Beta2.jar" />
              <resource-root path="modeshape-jdbc-local-2.6.0.Beta2.jar" />
            </resources>
            </module>

             

            This module is refered to by the jboss-deployment-structure.xml files mentioned above, so far it seams to work. It is neccesary to declare the dependency on org.slf4j as otherwise that module will not be availible on the class path for the .war modules.

             

            My specific question in this thread was why it doesn't work with the dependencies as I declare them above to make modeshape-common-<version>.jar from modeshape-services.jar deployment availible to the two .war deployments. If I copy modeshape-common-<version>.jar to WEB-INF/lib on the .war deployments then I don't get that NoClassDefFoundError.

            • 3. Re: Deploying modeshape on AS7
              rhauch

              My specific question in this thread was why it doesn't work with the dependencies as I declare them above to make modeshape-common-<version>.jar from modeshape-services.jar deployment availible to the two .war deployments. If I copy modeshape-common-<version>.jar to WEB-INF/lib on the .war deployments then I don't get that NoClassDefFoundError.

               

              Frankly I'm not sure why the WAR files don't contain the 'modeshape-common-<version>.jar' file in their WEB-INF/lib directory. The code is definitely dependent upon classes in that JAR. What if you add that JAR to the WAR file? Perhaps that's a packaging issue that doesn't really manifest itself in AS 5 or 6.

              • 4. Re: Deploying modeshape on AS7
                sverker

                I believe that on AS 5/6 if the modeshape-common-<version>.jar file would be placed in the .war deployments then that would cause ClassCastExceptions when they access the service as they get different class loaders. On AS 5/6 you really need to take care that any class is only present once on deployments that needs to interact, also known as the class loading hell...

                 

                As the behaviour of AS 7 is completly different the jboss-deployment-structure.xml file is used to declare what dependencies a module has unless the container detects it and add the dependency automatically. That was the purpose of my question in this thread, to figure out how to properly declare these dependencies between the deployments. As I read the developers guide the above jboss-deployment-structure.xml files would do the trick but I still get the NoClassDefFoundError.

                 

                May I suggest that we move over the Modeshape-specific discussion to the other thread I started some time ago in the Modeshape forum and keep this thread on the question on how to configure AS 7 class loading and modules? There I'll also answer to you what happens when I put the common jar in the .war files lib . There are most likely also other aspects to consider on how to make Modeshape work best under AS 7 that we need to discuss.

                 

                /Sverker

                • 5. Re: Deploying modeshape on AS7
                  sverker

                  Update. If I put modeshape-common-<version>.jar in modules/org/modeshape/jcr/main and add it to the module.xml then it is provided to the .war deployments, but not if I try to export it from the .jar deployment.

                  • 6. Re: Deploying modeshape on AS7
                    sverker

                    I found out from this thread: http://community.jboss.org/thread/171692 that I need to use the nightly snapshot as pojo deployment is not availible in AS 7.0.1.Final but will be in 7.0.2.Final. With the nightly jboss finds the META-INF/jboss-beans.xml file and tries to deploys it.

                     

                    However, I then get NoClassDefFoundError on classes which are present as .jar files within the jar deployment. It seems that entries in jboss-deployment-structure.xml under deployment-structure/deployment/resources are not added to the class path.

                     

                    Next try was to add a module in META-INF/jboss-deployment-structure.xml in the exploded jar deployment, but that failed on indexing the jar's.

                     

                    I then moved all the jar files from deployment/modeshape-services.jar/ to modules/org/modshape/services/main and created a module.xml there listing all the files as resources. That made those classes availible on the class path.

                     

                    Next issue that I ran in to was that org.jboss.as.pojo module could not find the classes in module org.modeshape.services, even though deployment/modeshape-services.jar/META-INF/jboss-deployment-structure.xml declared the dependency. I had to add org.modeshape.services in the module.xml file of org.jboss.as.pojo.

                     

                    So, to summarize I believe there are two issues here (which might actually be the same issue):

                     

                    1. Why are not the jar files in modshape-services.jar deployment made availible on the class path even when declared in resources section? They are neither availible to the deployed module itself nor other deployments that depends on it.

                     

                    2. Why in this scenatio would org.jboss.as.pojo need a dependency to be declared on org.modeshape.services when deployment.modeshape-services.jar, which contails the META-INF/jboss-bean.xml file declare that dependency?

                    • 7. Re: Deploying modeshape on AS7
                      alesj

                      2. Why in this scenatio would org.jboss.as.pojo need a dependency to be declared on org.modeshape.services when deployment.modeshape-services.jar, which contails the META-INF/jboss-bean.xml file declare that dependency?

                      Can you provide the full stack trace of this?

                       

                      Since you're definitely right, POJO module shouldn't need the dependency on any other module.

                      • 8. Re: Deploying modeshape on AS7
                        sverker

                        Certainly, here comes the stacktrace:

                         

                        15:50:02,089 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) Starting deployment of "modeshape-services.jar"
                        15:50:02,232 INFO  [org.jboss.as.jpa] (MSC service thread 1-1) added javax.persistence.api dependency to modeshape-services.jar
                        15:50:03,407 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.pojo.ModeShapeEngin
                        e.CONFIGURED: org.jboss.msc.service.StartException in service jboss.pojo.ModeShapeEngine.CONFIGURED: java.lang.reflect.InvocationTar
                        getException
                                at org.jboss.as.pojo.service.ConfiguredPojoPhase.configure(ConfiguredPojoPhase.java:70)
                                at org.jboss.as.pojo.service.ConfiguredPojoPhase.start(ConfiguredPojoPhase.java:97)
                                at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.j
                        ar:1.0.1.GA]
                                at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.
                        GA]
                                at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_24]
                                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_24]
                                at java.lang.Thread.run(Thread.java:662) [:1.6.0_24]
                        Caused by: java.lang.reflect.InvocationTargetException
                                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_24]
                                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_24]
                                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_24]
                                at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_24]
                                at org.jboss.as.pojo.service.MethodJoinpoint.dispatch(MethodJoinpoint.java:41)
                                at org.jboss.as.pojo.service.ConfiguredPojoPhase.configure(ConfiguredPojoPhase.java:91)
                                at org.jboss.as.pojo.service.ConfiguredPojoPhase.configure(ConfiguredPojoPhase.java:60)
                                ... 6 more
                        Caused by: java.lang.ExceptionInInitializerError
                                at org.modeshape.repository.ModeShapeConfiguration.<init>(ModeShapeConfiguration.java:115)
                                at org.modeshape.jcr.JcrConfiguration.<init>(JcrConfiguration.java:296)
                                at org.modeshape.jboss.managed.ManagedEngine.loadConfigurationAndCreateEngine(ManagedEngine.java:105)
                                at org.modeshape.jboss.managed.ManagedEngine.setConfigURL(ManagedEngine.java:100)
                                ... 13 more
                        Caused by: org.modeshape.common.SystemFailureException: java.lang.ClassNotFoundException: org.modeshape.graph.mimetype.ExtensionBase
                        dMimeTypeDetector from [Module "org.jboss.as.pojo:main" from local module loader @470b9279 (roots: D:\java\jboss-as-7.1.0.Alpha1-SNA
                        PSHOT\modules)]
                                at org.modeshape.common.component.ComponentLibrary.newInstance(ComponentLibrary.java:318)
                                at org.modeshape.common.component.ComponentLibrary.add(ComponentLibrary.java:162)
                                at org.modeshape.graph.mimetype.MimeTypeDetectors.addDetector(MimeTypeDetectors.java:67)
                                at org.modeshape.graph.ExecutionContext.createDefaultMimeTypeDetector(ExecutionContext.java:177)
                                at org.modeshape.graph.ExecutionContext.<init>(ExecutionContext.java:169)
                                at org.modeshape.graph.ExecutionContext.<init>(ExecutionContext.java:87)
                                at org.modeshape.graph.ExecutionContext.<clinit>(ExecutionContext.java:66)
                                ... 17 more
                        Caused by: java.lang.ClassNotFoundException: org.modeshape.graph.mimetype.ExtensionBasedMimeTypeDetector from [Module "org.jboss.as.
                        pojo:main" from local module loader @470b9279 (roots: D:\java\jboss-as-7.1.0.Alpha1-SNAPSHOT\modules)]
                                at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)
                                at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:361)
                                at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:333)
                                at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:310)
                                at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:103)
                                at java.lang.Class.forName0(Native Method) [:1.6.0_24]
                                at java.lang.Class.forName(Class.java:247) [:1.6.0_24]
                                at org.modeshape.common.component.ComponentLibrary.newInstance(ComponentLibrary.java:303)
                                ... 23 more

                        15:50:03,643 INFO  [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployment of "modeshape-services.jar" was rolle
                        d back with failure message {"Failed services" => {"jboss.pojo.ModeShapeEngine.CONFIGURED" => "org.jboss.msc.service.StartException
                        in service jboss.pojo.ModeShapeEngine.CONFIGURED: java.lang.reflect.InvocationTargetException"},"Services with missing/unavailable d
                        ependencies" => ["jboss.pojo.ModeShapeSequencingService.CONFIGURED missing [ jboss.pojo.ModeShapeEngine.INSTALLED ]","jboss.pojo.JND
                        IManaged.CONFIGURED missing [ jboss.pojo.ModeShapeEngine.INSTALLED ]"]}
                        15:50:03,660 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) Stopped deployment modeshape-services.jar in 17ms
                        15:50:03,663 ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 1) {"Composite operation failed and was rolled back. Steps
                        that failed:" => {"Operation step-2" => {"Failed services" => {"jboss.pojo.ModeShapeEngine.CONFIGURED" => "org.jboss.msc.service.St
                        artException in service jboss.pojo.ModeShapeEngine.CONFIGURED: java.lang.reflect.InvocationTargetException"},"Services with missing/
                        unavailable dependencies" => ["jboss.pojo.ModeShapeSequencingService.CONFIGURED missing [ jboss.pojo.ModeShapeEngine.INSTALLED ]","j
                        boss.pojo.JNDIManaged.CONFIGURED missing [ jboss.pojo.ModeShapeEngine.INSTALLED ]"]}}}

                        • 9. Re: Deploying modeshape on AS7
                          tejones

                          Hi Sverker,

                           

                          Do you have any code you would like to contribute to assist with AS 7 integration?

                           

                          Thanks,

                          Ted

                          • 10. Re: Deploying modeshape on AS7
                            sverker

                            Hi Ted,

                            not yet but I would like to assist. I'd need some pointer though on where to start searching.

                             

                            I believe the first step would be to solve the issue that with a (exploded) jar deployment the jar files it contain is not added to the class path despite what is specified in jboss-deployment-structure.xml. I've tried to run the deployment in debugger but didn't find the right part yet where it is supposed to happen.

                            /Sverker

                            • 11. Re: Deploying modeshape on AS7
                              rhauch

                              not yet but I would like to assist. I'd need some pointer though on where to start searching.

                               

                              We'd definitely appreciate any help. While we can accept trivial contributions, anything else requires signing a contributor agreement for the ModeShape project. If you're interested, we'd love to have you contribute.

                               

                              There's some newer documentation for extending AS7, and that appears to document what we'll need to create a ModeShape service for AS7, which would basically be similar to our existing service for AS5 and 6.

                              • 12. Re: Deploying modeshape on AS7
                                sverker

                                Yes, I know the process with the contributor agreement and I don't have any problem with that. It will be needed for the S3 connector anyway.

                                • 13. Re: Deploying modeshape on AS7
                                  clau_babau

                                  Is there an update to this problem? Did someone succeded integrating Modeshape with AS 7?

                                  • 14. Re: Deploying modeshape on AS7
                                    rhauch

                                    Nothing has been done with ModeShape 2.x and AS7 in the official codebase. Since AS7 integration is signficantly different than AS5 or AS6, we're focusing our AS7 integration work to be done in the 3.x codebase. Our goals is to have that working with AS7 by the end of the month, but we hope to have something working in either the first or second 3.0 alpha release (mid-Jan).

                                     

                                    A workaround is to deploy ModeShape not as a service in AS7 but as a component of your application or a sibling web app. This is similar to how ModeShape is deployed in other application servers or servlet containers (such as Tomcat or Glassfish).

                                     

                                    Has anyone in the community tried deploying ModeShape as a service into AS7?