10 Replies Latest reply on May 2, 2012 7:16 PM by rwhitely

    ClassNotFoundException when deploying ear file on Jboss AS 7

    mcatalin23

      I included my ear file into <jboss_home>\standalone\deployments\ folder.

      The ear file was generated with Jboss Developer Studio version 4.0.0.GA.

       

      I'm getting following error when starting Jboss 7 as standalone:

       

      12:07:08,729 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."<ear_name>.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."<ear_name>.ear".INSTALL: Failed to process phase INSTALL of deployment "<ear_name>.ear"

          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)

          at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)

          at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)

          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_23]

          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_23]

          at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]

      Caused by: java.lang.RuntimeException: Error getting reflective information for class <my_class_name>

          at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)

          at org.jboss.as.ee.component.EEModuleClassDescription$DefaultConfigurator.configure(EEModuleClassDescription.java:144)

          at org.jboss.as.ee.component.EEClassConfigurationProcessor.processClasses(EEClassConfigurationProcessor.java:133)

          at org.jboss.as.ee.component.EEClassConfigurationProcessor.deploy(EEClassConfigurationProcessor.java:76)

          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)

          ... 5 more

      Caused by: java.lang.NoClassDefFoundError: Lorg/apache/log4j/Category;

          at java.lang.Class.getDeclaredFields0(Native Method) [:1.6.0_23]

          at java.lang.Class.privateGetDeclaredFields(Class.java:2291) [:1.6.0_23]

          at java.lang.Class.getDeclaredFields(Class.java:1743) [:1.6.0_23]

          at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57)

          at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)

          ... 9 more

      Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Category from [Module "deployment.<ear_name>.ear.<jar_name>.jar:main" from Service Module Loader]

          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358)

          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)

          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307)

          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101)

          ... 14 more

       

       

      Following instructions from

      https://docs.jboss.org/author/display/AS7/How+do+I+migrate+my+application+from+AS5+or+AS6+to+AS7

      section "How to find the JBoss module dependency"

      I searched for the jboss 7 module that contains the class org.apache.log4j.Category

      The class is included into following jar: <jboss_home>\modules\org\apache\log4j\main\log4j-1.2.16.jar

      From module.xml file I got the module name org.apache.log4j, and I added this module name to the Dependencies in the MANIFEST.MF file:

      like Dependencies: org.apache.log4j

       

      I did all these steps from the documentation but I still get the same error ClassNotFoundException.

      I have tried to update the main MANIFEST.MF file from the ear and also the MANIFEST.MF file from jar included into the ear that requires the class.

       

      The MANIFEST.MF file I used is attached.

       

      Where is the problem regarding this issue?

      Is anything wrong with my configuration for manifest file? I manually edited the manifest file.

        • 1. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
          jaikiran

          Which MANIFEST.MF did you add it to?

          • 2. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
            mcatalin23

            I tried with

            <ear_name>.ear\META-INF\MANIFEST.MF

            and also with

            <ear_name>.ear\<jar_name>.jar\META-INF\MANIFEST.MF

            • 3. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
              jaikiran

              It should be in the .ear/.jar/META-INF/MANIFEST.MF since that's what the stacktrace is complaining about. By the way, the attached application doesn't have any Dependencies: in the MANIFEST.MF. If you still run into issues after adding that dependency, then please post the new stacktrace and also the exact MANIFEST.MF and its location.

              • 4. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                mcatalin23

                I have tried again with the .ear/.jar/META-INF/MANIFEST.MF file and I get the same error.

                Most probably is something wrong with my configuration into MANIFEST.MF file because I edited it manually.

                The file contains also Class-Path: as well as the Dependencies: sections and I'm not sure what should be the structure of the file in this case.

                Below is the MANIFEST.MF file am using. Also the attached file contains the MANIFEST.MF I am using.

                 

                Manifest-Version: 1.0

                Dependencies: org.apache.log4j

                Class-Path: <jar_name_001>.jar

                <jar_name_002>.jar

                <jar_name_003>.jar

                 

                 

                 

                 

                ... and the stacktrace:

                 

                13:04:51,898 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.deployment.unit."<ear_name>.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."<ear_name>.ear".INSTALL: Failed to process phase INSTALL of deployment "<ear_name>.ear"

                    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)

                    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)

                    at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)

                    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_23]

                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_23]

                    at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]

                Caused by: java.lang.RuntimeException: Error getting reflective information for class <my_class_name>

                    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)

                    at org.jboss.as.ee.component.EEModuleClassDescription$DefaultConfigurator.configure(EEModuleClassDescription.java:144)

                    at org.jboss.as.ee.component.EEClassConfigurationProcessor.processClasses(EEClassConfigurationProcessor.java:133)

                    at org.jboss.as.ee.component.EEClassConfigurationProcessor.deploy(EEClassConfigurationProcessor.java:76)

                    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)

                    ... 5 more

                Caused by: java.lang.NoClassDefFoundError: Lorg/apache/log4j/Category;

                    at java.lang.Class.getDeclaredFields0(Native Method) [:1.6.0_23]

                    at java.lang.Class.privateGetDeclaredFields(Class.java:2291) [:1.6.0_23]

                    at java.lang.Class.getDeclaredFields(Class.java:1743) [:1.6.0_23]

                    at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57)

                    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)

                    ... 9 more

                Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Category from [Module "deployment.<ear_name>.ear.<jar_name>.jar:main" from Service Module Loader]

                    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)

                    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358)

                    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)

                    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307)

                    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101)

                    ... 14 more

                • 5. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                  mcatalin23

                  My simplified schema for ear looks like:

                   

                  myapp.ear // contains META-INF\application.xml with ejb & web modules: ejb.jar & web.war

                  |

                  |-- web.war // this includes WEB-INF\web.xml with web services definitions

                  |

                  |--- ejb.jar // this includes META-INF\ejb-jar.xml with deployment descriptor for ejb3

                  |

                  |---additional_module.jar //this requires org.apache.log4j module for Category class

                   

                  I have tried different approaches but it doesn't work. I still get ClassNotFoundException.

                  What do I have to do exactly to add the dependency for org.apache.log4j module to my additional_module.jar into the ear?

                  • 6. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                    jaikiran

                    What kind of jar is that addition_module.jar? If it's a plain jar, then move it to the .ear/lib folder and then add a

                     

                    Dependencies: org.apache.log4j
                    
                    

                     

                    to the .ear/META-INF/MANIFEST.MF.

                    • 7. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                      mcatalin23

                      Yes, addition_module.jar it's a plain jar.

                      My ejb.jar needs a reference to addition_module.jar so the MANIFEST.MF file for my ejb.jar contains in Class-Path: addition_module.jar.

                       

                      I moved all additional (plain) jars to .ear/lib and for .ear/META-INF/MANIFEST.MF I added "Dependencies: org.apache.log4j".

                      Also I updated the Class-Path into MANIFEST.MF files for my ejb.jar & web.war to new location of additional jars .ear/lib.

                       

                      But the error is still there; stacktrace:

                       

                      14:39:53,187 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."my.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."my.ear".INSTALL: Failed to process phase INSTALL of deployment "my.ear"

                          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)

                          at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)

                          at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)

                          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_23]

                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_23]

                          at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]

                      Caused by: java.lang.RuntimeException: Error getting reflective information for class <my_class_in_addition_module.jar>

                          at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)

                          at org.jboss.as.ee.component.EEModuleClassDescription$DefaultConfigurator.configure(EEModuleClassDescription.java:144)

                          at org.jboss.as.ee.component.EEClassConfigurationProcessor.processClasses(EEClassConfigurationProcessor.java:133)

                          at org.jboss.as.ee.component.EEClassConfigurationProcessor.deploy(EEClassConfigurationProcessor.java:76)

                          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)

                          ... 5 more

                      Caused by: java.lang.NoClassDefFoundError: Lorg/apache/log4j/Category;

                          at java.lang.Class.getDeclaredFields0(Native Method) [:1.6.0_23]

                          at java.lang.Class.privateGetDeclaredFields(Class.java:2291) [:1.6.0_23]

                          at java.lang.Class.getDeclaredFields(Class.java:1743) [:1.6.0_23]

                          at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57)

                          at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)

                          ... 9 more

                      Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Category from [Module "deployment.my.ear.lib/<my_class_in_addition_module.jar>.jar:main" from Service Module Loader]

                          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)

                          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358)

                          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)

                          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307)

                          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101)

                          ... 14 more

                       

                       

                      Now my ear structure is as shown below:

                       

                      myapp.ear

                      |

                      |---lib

                      |    |---additional_module_1.jar

                      |    |---additional_module_n.jar

                      |

                      |---META-INF

                      |    |---application.xml

                      |    |---MANIFEST.MF     //contains Dependencies: org.apache.log4j

                      |

                      |--- ejb.jar

                      |    |---META-INF\ejb-jar.xml

                      |    |---META-INF\MANIFEST.MF

                      |

                      |-- web.war

                           |---META-INF\MANIFEST.MF

                           |---WEB-INF\web.xml

                      • 8. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                        mcatalin23

                        @jaikiran pai

                         

                        Can you attach a MANIFEST.MF file that includes "Dependencies: org.apache.log4j"?

                        I don't know if my manually edited MANIFEST.MF is correct because I still get the same error.

                        • 9. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                          d.croe

                          i think you should remove < > from the jar names within the manifest file and be sure to have a newline at the end!

                          • 10. Re: ClassNotFoundException when deploying ear file on Jboss AS 7
                            rwhitely

                            Adding a newline at the end of my manifest hast mostly fixed this problem for me.

                             

                            Apparently, the last character of the file needs to be a newline, which is absolutely rediculous, because it's completely invisible.... Though this appears to be the standard. From the official documentation, it appears that this is by design (http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/jar.html) at least back with Java 1.4. Specifically, where it says:

                             

                            Be sure that any pre-existing manifest file that you use ends with a new line. The last line of a manifest file will not be parsed if it doesn't end with a new line character.

                             

                            I say it's "mostly fixed" because I'm still seeing an error, but I suspect it's a new, unrelated error. So if anyone is running into this problem, it's worth checking your manifest file to make sure the file ends with a new line.