[infinispan-issues] [JBoss JIRA] (ISPN-3099) Util.loadClass() still swallows NoClassDefFoundError
Bert Jacobs (JIRA)
jira-events at lists.jboss.org
Tue May 14 09:37:06 EDT 2013
Bert Jacobs created ISPN-3099:
---------------------------------
Summary: Util.loadClass() still swallows NoClassDefFoundError
Key: ISPN-3099
URL: https://issues.jboss.org/browse/ISPN-3099
Project: Infinispan
Issue Type: Feature Request
Components: Core API
Affects Versions: 5.2.5.Final
Environment: Windows, JBoss EAP 5
Reporter: Bert Jacobs
Assignee: Mircea Markus
My log contains stack traces like the following:
{code}
Caused by: org.infinispan.CacheConfigurationException: Unable to instantiate class org.infinispan.loaders.bdbje.BdbjeCacheStore
at org.infinispan.util.Util.loadClass(Util.java:101)
at org.infinispan.util.Util.getInstance(Util.java:222)
at org.infinispan.configuration.parsing.Parser51.parseLoader(Parser51.java:440)
at org.infinispan.configuration.parsing.Parser51.parseLoaders(Parser51.java:418)
at org.infinispan.configuration.parsing.Parser51.parseCache(Parser51.java:189)
at org.infinispan.configuration.parsing.Parser51.parseNamedCache(Parser51.java:148)
at org.infinispan.configuration.parsing.Parser51.readElement(Parser51.java:115)
at org.infinispan.configuration.parsing.Parser51.readElement(Parser51.java:84)
at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110)
at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69)
at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:77)
... 73 more
Caused by: java.lang.ClassNotFoundException: org.infinispan.loaders.bdbje.BdbjeCacheStore
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at org.infinispan.util.Util.loadClassStrict(Util.java:138)
at org.infinispan.util.Util.loadClass(Util.java:99)
... 83 more
{code}
However, this ClassNotFoundException comes from the System classloader, but the code still swallows the following Error:
{code}
Caused by: org.infinispan.CacheConfigurationException: Unable to instantiate class org.infinispan.loaders.bdbje.BdbjeCacheStore
at org.infinispan.util.Util.loadClass(Util.java:101)
[SNIP - see above]
at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:77)
... 73 more
Caused by: java.lang.ClassNotFoundException: org.infinispan.loaders.bdbje.BdbjeCacheStore
at org.infinispan.util.Util.loadClassStrict(Util.java:150)
at org.infinispan.util.Util.loadClass(Util.java:99)
... 83 more
Caused by: java.lang.NoClassDefFoundError: com/sleepycat/collections/TransactionWorker
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at org.infinispan.util.Util.loadClassStrict(Util.java:138)
... 84 more
Caused by: java.lang.ClassNotFoundException: com.sleepycat.collections.TransactionWorker from BaseClassLoader at 3598d24f{vfsfile:/D:/App/Java/jboss/brms-standalone-5.3.0/jboss-as/server/lettergen-ds-default/deploy/modeshape-datastore.ear/}
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:477)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 87 more
{code}
It is this error which is actually important: the BdbjeCacheStore class was found but it cannot be loaded because the sleepycat jar is not on the classpath. It is impossible to see this without changing the code.
The commits for ISPN-2559 did not properly fix this problem. The Error should be logged in all cases because the ClassNotFoundException will also happen in almost every case: the last search ClassLoader is the System ClassLoader which will likely never have the searched class.
Once again: please log all NoClassDefFoundErrors (suppressing Errors is bad in any case) or at least handle them *before* handling any ClassNotFoundExceptions. The attached patch does exactly that.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the infinispan-issues
mailing list