This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gcj & JMX


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]