/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License.
*/ package org.apache.catalina.util;
privatestaticfinal StringManager sm =
StringManager.getManager("org.apache.catalina.util");
/* Cache components of the MBean registration. */ private String domain = null; private ObjectName oname = null;
/** * Sub-classes wishing to perform additional initialization should override * this method, ensuring that super.initInternal() is the first call in the * overriding method.
*/
@Override protectedvoid initInternal() throws LifecycleException { // If oname is not null then registration has already happened via // preRegister(). if (oname == null) {
oname = register(this, getObjectNameKeyProperties());
}
}
/** * Sub-classes wishing to perform additional clean-up should override this * method, ensuring that super.destroyInternal() is the last call in the * overriding method.
*/
@Override protectedvoid destroyInternal() throws LifecycleException {
unregister(oname);
}
/** * Specify the domain under which this component should be registered. Used * with components that cannot (easily) navigate the component hierarchy to * determine the correct domain to use.
*/
@Override publicfinalvoid setDomain(String domain) { this.domain = domain;
}
/** * Obtain the domain under which this component will be / has been * registered.
*/
@Override publicfinal String getDomain() { if (domain == null) {
domain = getDomainInternal();
}
if (domain == null) {
domain = Globals.DEFAULT_MBEAN_DOMAIN;
}
return domain;
}
/** * Method implemented by sub-classes to identify the domain in which MBeans * should be registered. * * @return The name of the domain to use to register MBeans.
*/ protectedabstract String getDomainInternal();
/** * Obtain the name under which this component has been registered with JMX.
*/
@Override publicfinal ObjectName getObjectName() { return oname;
}
/** * Allow sub-classes to specify the key properties component of the * {@link ObjectName} that will be used to register this component. * * @return The string representation of the key properties component of the * desired {@link ObjectName}
*/ protectedabstract String getObjectNameKeyProperties();
/** * Utility method to enable sub-classes to easily register additional * components that don't implement {@link JmxEnabled} with an MBean server. * <br> * Note: This method should only be used once {@link #initInternal()} has * been called and before {@link #destroyInternal()} has been called. * * @param obj The object the register * @param objectNameKeyProperties The key properties component of the * object name to use to register the * object * * @return The name used to register the object
*/ protectedfinal ObjectName register(Object obj,
String objectNameKeyProperties) {
// Construct an object name with the right domain
StringBuilder name = new StringBuilder(getDomain());
name.append(':');
name.append(objectNameKeyProperties);
ObjectName on = null;
try {
on = new ObjectName(name.toString());
Registry.getRegistry(null, null).registerComponent(obj, on, null);
} catch (Exception e) {
log.warn(sm.getString("lifecycleMBeanBase.registerFail", obj, name), e);
}
return on;
}
/** * Utility method to enable sub-classes to easily unregister additional * components that don't implement {@link JmxEnabled} with an MBean server. * <br> * Note: This method should only be used once {@link #initInternal()} has * been called and before {@link #destroyInternal()} has been called. * * @param objectNameKeyProperties The key properties component of the * object name to use to unregister the * object
*/ protectedfinalvoid unregister(String objectNameKeyProperties) { // Construct an object name with the right domain
StringBuilder name = new StringBuilder(getDomain());
name.append(':');
name.append(objectNameKeyProperties);
Registry.getRegistry(null, null).unregisterComponent(name.toString());
}
/** * Utility method to enable sub-classes to easily unregister additional * components that don't implement {@link JmxEnabled} with an MBean server. * <br> * Note: This method should only be used once {@link #initInternal()} has * been called and before {@link #destroyInternal()} has been called. * * @param on The name of the component to unregister
*/ protectedfinalvoid unregister(ObjectName on) {
Registry.getRegistry(null, null).unregisterComponent(on);
}
/** * Not used - NOOP.
*/
@Override publicfinalvoid postDeregister() { // NOOP
}
/** * Not used - NOOP.
*/
@Override publicfinalvoid postRegister(Boolean registrationDone) { // NOOP
}
/** * Not used - NOOP.
*/
@Override publicfinalvoid preDeregister() throws Exception { // NOOP
}
/** * Allows the object to be registered with an alternative * {@link MBeanServer} and/or {@link ObjectName}.
*/
@Override publicfinal ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.