Using Tomcat 5.5.9 and configured -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder for running as windows services. The following NullPointerException is thrown:
Nov 14, 2006 3:51:23 PM org.apache.catalina.startup.Bootstrap initClassLoaders
SEVERE: Class loader creation threw exception
java.lang.NullPointerException
at javax.management.MBeanServerFactory.loadMBeanServerBuilderClass(MBean
ServerFactory.java:266)
at javax.management.MBeanServerFactory.createMBeanServerBuilder(MBeanSer
verFactory.java:229)
at javax.management.MBeanServerFactory.createMBeanServerImpl(MBeanServer
Factory.java:195)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFact
ory.java:44)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFact
ory.java:39)
at org.apache.catalina.startup.Bootstrap.createClassLoader(Bootstrap.jav
a:188)
at org.apache.catalina.startup.Bootstrap.initClassLoaders(Bootstrap.java
:97)
at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:212)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
==
I noticed that inside MBeanServerFactory.loadMBeanServerBuilderClass(), Thread.currentThread().getContextClassLoader() is null when it runs as a Widnows Services. The following code was added into MBeanServerFactory.java to fix the problem:
try
{
// new code - start
if (Thread.currentThread().getContextClassLoader() == null) {
Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
}
// new code - end
return Thread.currentThread().getContextClassLoader().loadClass(builderClassName);
}
Please 1) patch mx4j or 2) find out when Thread.currentThread().getContextClassLoader() == null
patched version to work with tomcat as windows service