ClassNotFoundException when moving JCA adaptor from 4.2.3 ->
pwnell Oct 18, 2009 8:10 PMI have written a JCA adaptor some years ago on JCA 1.5, for JBoss 3.x. I later moved it to JBoss 4.x without problems. However when I tried to deploy it under JBoss 5.1.0 GA it fails. I managed to fix most of the issues but I cannot seem to get around this one:
17:06:26,781 ERROR [[/LogMon]] StandardWrapper.Throwable
java.lang.NoClassDefFoundError: net/za/pwnconsulting/logmon/rar/cci/data/client/LogMessage
at net.za.pwnconsulting.logmon.clientapi.LogMonClientAPIFactory.getCCILogMonAPI(LogMonClientAPIFactory.java:30)
at net.za.pwnconsulting.javaconfig.core.LMS.(LMS.java:28)
at net.za.pwnconsulting.javaconfig.core.BasicConfiguration.initConfig(BasicConfiguration.java:144)
at net.za.pwnconsulting.javaconfig.core.AbstractConfiguration.init(AbstractConfiguration.java:189)
at net.za.pwnconsulting.webmvc.config.WebConfiguration.(WebConfiguration.java:85)
at net.za.pwnconsulting.webmvc.servlet.BootstrapServlet.initServlet(BootstrapServlet.java:75)
at net.za.pwnconsulting.webmvc.servlet.AbstractBootstrapServlet.init(AbstractBootstrapServlet.java:105)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1048)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:950)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4122)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4421)
Now the class in question (net/za/pwnconsulting/logmon/rar/cci/data/client/LogMessage) is deployed inside the LogMonJCA.rar file in the deploy directory. The code trying to access it resides in a LogMonConsole.ear package also in the deploy directory.
Why would this work previously on JBoss 4.x and 3.x, but not in JBoss 5.x? Somewhere the classloader behaviour changed and is not loading classes from the RAR file.
So either my deployment is incorrect, or I need to change the classloader behaviour in JBoss. When I bundled this class with the .ear file, I got another error where the InteractionSpec the client code sent via .execute() is not compatible with the InteractionSpec used in the RAR file. This makes sense as they are loaded by two different class loaders - hence even though they are binary compatible they are still distinct classes.
Any help would be much appreciated.