1 Reply Latest reply on Feb 4, 2005 5:24 PM by Scott Stark

    JMX hot deploy causes ClassNotFoundException

    drpizza Newbie

      Hello. I'm using JBoss 4.0.1 in the all configuration with Java 1.4.

      I have an ear; the pertinent (I think) bits are structured something like:

      my-app.ear
      |
      \ my-app.war
       |
       \ WEB-INF
       |
       \ classes
       | |
       | \ startupServlet.class
       |
       \ lib
       | |
       | \ quartz.jar
       |
       \ web.xml
      

      startupServlet runs on startup; it schedules a bunch of tasks using Quartz. To do this it uses Quartz's XML file format and loads an XML file which in turn causes all the Quartz objects to be created.

      When I put the ear into my deploy directory, all is well. The servlet runs on deployment, Quartz is loaded and it configures its tasks.

      However, if I instead attempt to deploy using JMX hot deployment, it fails to run the servlet properly. The servlet creates a Quartz scheduler object successfully, and it creates the Quartz XML processor successfully. However, somewhere deep inside the Quartz XML processor an CNFE is thrown:
      java.lang.ClassNotFoundException: No ClassLoaders found for: org.quartz.xml.CalendarBundle
       at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:198)
       at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:464)
       at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:374)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
       at org.apache.commons.digester.ObjectCreateRule.begin(ObjectCreateRule.java:252)
       at org.apache.commons.digester.Rule.begin(Rule.java:200)
       at org.apache.commons.digester.Digester.startElement(Digester.java:1273)
       at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
       at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
       at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
       at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
       at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
       at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
       at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
       at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
       at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
       at org.apache.commons.digester.Digester.parse(Digester.java:1548)
       at org.quartz.xml.JobSchedulingDataProcessor.processFile(JobSchedulingDataProcessor.java:369)
       at org.quartz.xml.JobSchedulingDataProcessor.processFileAndScheduleJobs(JobSchedulingDataProcessor.java:394)
       at org.quartz.xml.JobSchedulingDataProcessor.processFileAndScheduleJobs(JobSchedulingDataProcessor.java:381)
       at startupServlet.init(startupServlet.java:29)
      (snip)
      


      I don't understand why regular deployment be able to find the class properly, but JMX hot deployment fail in this way, so I'm at a loss as to how to fix it. Any ideas?