📄 registrar.java
字号:
/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed 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.axis.management;import org.apache.axis.components.logger.LogFactory;import org.apache.axis.i18n.Messages;import org.apache.commons.logging.Log;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * class to act as a dynamic loading registrar to commons-modeler, so * as to autoregister stuff * * @link http://www.webweavertech.com/costin/archives/000168.html#000168 */public class Registrar { /** * our log */ protected static Log log = LogFactory.getLog(Registrar.class.getName()); /** * register using reflection. The perf hit is moot as jmx is * all reflection anyway * * @param objectToRegister * @param name * @param context */ public static boolean register(Object objectToRegister, String name, String context) { if (isBound()) { if (log.isDebugEnabled()) { log.debug("Registering " + objectToRegister + " as " + name); } return modelerBinding.register(objectToRegister, name, context); } else { return false; } } /** * Check for being bound to a modeler -this will force * a binding if none existed. * * @return */ public static boolean isBound() { createModelerBinding(); return modelerBinding.canBind(); } /** * create the modeler binding if it is needed * At the end of this call, modelerBinding != null */ private static void createModelerBinding() { if (modelerBinding == null) { modelerBinding = new ModelerBinding(); } } /** * the inner class that does the binding */ private static ModelerBinding modelerBinding = null; /** * This class provides a dynamic binding to the * commons-modeler registry at run time */ static class ModelerBinding { /** * the constructor binds */ public ModelerBinding() { bindToModeler(); } /** * can the binding bind? * * @return true iff the classes are bound */ public boolean canBind() { return registry != null; } /** * log */ protected static Log log = LogFactory.getLog(ModelerBinding.class.getName()); /** * registry object */ Object registry; /** * method to call */ Method registerComponent; /** * register using reflection. The perf hit is moot as jmx is * all reflection anyway * * @param objectToRegister * @param name * @param context */ public boolean register(Object objectToRegister, String name, String context) { if (registry != null) { Object args[] = new Object[]{objectToRegister, name, context}; try { registerComponent.invoke(registry, args); if (log.isDebugEnabled()) { log.debug("Registered " + name + " in " + context); } } catch (IllegalAccessException e) { log.error(e); return false; } catch (IllegalArgumentException e) { log.error(e); return false; } catch (InvocationTargetException e) { log.error(e); return false; } return true; } else { return false; } } /** * bind to the modeler; return success/failure flag * * @return true if the binding worked */ private boolean bindToModeler() { Exception ex = null; Class clazz; try { clazz = Class.forName("org.apache.commons.modeler.Registry"); } catch (ClassNotFoundException e) { // just ignore it silently if we don't have commons-modeler.jar around registry = null; return false; } try { Class[] getRegistryArgs = new Class[]{Object.class, Object.class,}; Method getRegistry = clazz.getMethod("getRegistry", getRegistryArgs); Object[] getRegistryOptions = new Object[]{null, null}; registry = getRegistry.invoke(null, getRegistryOptions); Class[] registerArgs = new Class[]{Object.class, String.class, String.class}; registerComponent = clazz.getMethod("registerComponent", registerArgs); } catch (IllegalAccessException e) { ex = e; } catch (IllegalArgumentException e) { ex = e; } catch (InvocationTargetException e) { ex = e; } catch (NoSuchMethodException e) { ex = e; } // handle any of these exceptions if (ex != null) { //log the error log.warn(Messages.getMessage("Registrar.cantregister"), ex); //mark the registration as a failure registry = null; //and fail return false; } else { //success return true; } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -