gcj & JMX

Andrew Haley aph@redhat.com
Wed Feb 14 18:31:00 GMT 2007


I've come across a bug (or just a difference) between mx4j and
Classpath that prevents Tomcat's org.apache.catalina.core.StandardHost
from being initialized correctly.
org.apache.commons.modeler.Registry.registerComponent() 
calls 
getMBeanServer().registerMBean( mbean, oname)
with oname = javax.management.ObjectName@2aaab4e37e00
{
 java.lang.String canonicalName = "Catalina:host=localhost,type=Host",
 java.lang.String propertiesString = "type=Host,host=localhost",
 boolean isDomainPattern = false,
 boolean isPropertyPattern = false,
}
with mx4j, the calling sequence is then
mx4j.server.MX4JMBeanServer.registerMBean(java.lang.Object, javax.management.ObjectName)javax.management.ObjectInstance
 at mx4j/server/MX4JMBeanServer.java:753
mx4j.server.MX4JMBeanServer.registerMBeanImpl(java.lang.Object, javax.management.ObjectName, boolean)javax.management.ObjectInstance
 at mx4j/server/MX4JMBeanServer.java:769
mx4j.server.MX4JMBeanServer.registerImpl(mx4j.server.MBeanMetaData, boolean)void
 at mx4j/server/MX4JMBeanServer.java:822
mx4j.server.interceptor.ContextClassLoaderMBeanServerInterceptor.registration(mx4j.server.MBeanMetaData, int)void
 at mx4j/server/interceptor/ContextClassLoaderMBeanServerInterceptor.java:159
mx4j.server.interceptor.DefaultMBeanServerInterceptor.registration(mx4j.server.MBeanMetaData, int)void
 at mx4j/server/interceptor/DefaultMBeanServerInterceptor.java:110
mx4j.server.interceptor.DefaultMBeanServerInterceptor.registration(mx4j.server.MBeanMetaData, int)void
 at mx4j/server/interceptor/DefaultMBeanServerInterceptor.java:110
mx4j.server.interceptor.SecurityMBeanServerInterceptor.registration(mx4j.server.MBeanMetaData, int)void
 at mx4j/server/interceptor/SecurityMBeanServerInterceptor.java:133
mx4j.server.interceptor.DefaultMBeanServerInterceptor.registration(mx4j.server.MBeanMetaData, int)void
 at mx4j/server/interceptor/DefaultMBeanServerInterceptor.java:110
mx4j.server.interceptor.InvokerMBeanServerInterceptor.registration(mx4j.server.MBeanMetaData, int)void
 at mx4j/server/interceptor/InvokerMBeanServerInterceptor.java:157
org.apache.commons.modeler.BaseModelMBean.preRegister(javax.management.MBeanServer, javax.management.ObjectName)javax.management.ObjectName 
 at org/apache/commons/modeler/BaseModelMBean.java:1397
org.apache.catalina.core.StandardHost.preRegister(javax.management.MBeanServer, javax.management.ObjectName)javax.management.ObjectName
 at org/apache/catalina/core/StandardHost.java:807
org.apache.catalina.core.ContainerBase.preRegister(javax.management.MBeanServer, javax.management.ObjectName)javax.management.ObjectName
 at org/apache/catalina/core/ContainerBase.java:1406
With Classpath, none of this ever happens. Instead,
gnu.javax.management.registerMBean(Object, ObjectName) does not call
MBeanRegistration.preRegister() unless ObjectName == null.
So, the preRegister method is never called.
The spec for MBeanServer.registerMBean() says "If the object name
given is null, the MBean must provide its own name by implementing the
MBeanRegistration interface and returning the name from the
preRegister method."
I suspect, however, that if the MBean is implements the
MBeanRegistration interface we should call the preRegister method
regardless.
I'm going to try it.
Andrew.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /