Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 1999-2005 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.log4j.jmx;
 
 
 
 
 
 public class AppenderDynamicMBean extends AbstractDynamicMBean {
 
   private Vector dAttributes = new Vector();
   private String dClassName = this.getClass().getName();
 
   private Hashtable dynamicProps = new Hashtable(5);
   private MBeanOperationInfo[] dOperations = new MBeanOperationInfo[2];
   private String dDescription =
      "This MBean acts as a management facade for log4j appenders.";
 
   // This category instance is for logging.
   private static Logger cat = Logger.getLogger(AppenderDynamicMBean.class);
 
   // We wrap this appender instance.
   private Appender appender;
 
   public  AppenderDynamicMBean(Appender appenderthrows IntrospectionException {
     this. = appender;
   }
 
   private
     Constructor[] constructors = this.getClass().getConstructors();
     [0] = new MBeanConstructorInfo(
              "AppenderDynamicMBean(): Constructs a AppenderDynamicMBean instance",
 	     constructors[0]);
 
 
     BeanInfo bi = Introspector.getBeanInfo(.getClass());
 
     int size = pd.length;
 
     for(int i = 0; i < sizei++) {
       String name = pd[i].getName();
       Method readMethod =  pd[i].getReadMethod();
       Method writeMethod =  pd[i].getWriteMethod();
       if(readMethod != null) {
 	Class returnClass = readMethod.getReturnType();
 	if(isSupportedType(returnClass)) {
 	  String returnClassName;
 	  if(returnClass.isAssignableFrom(Priority.class)) {
 	    returnClassName = "java.lang.String";
 	  } else {
 	    returnClassName = returnClass.getName();
 	  }
 
 						 returnClassName,
 						 "Dynamic",
						 true,
						 writeMethod != null,
						 false));
	  .put(namenew MethodUnion(readMethodwriteMethod));
	}
      }
    }
    MBeanParameterInfo[] params = new MBeanParameterInfo[0];
    [0] = new MBeanOperationInfo("activateOptions",
					    "activateOptions(): add an appender",
					    params,
					    "void",
    params = new MBeanParameterInfo[1];
    params[0] = new MBeanParameterInfo("layout class""java.lang.String",
				       "layout class");
    [1] = new MBeanOperationInfo("setLayout",
					    "setLayout(): add a layout",
					    params,
					    "void",
  }
  private
  boolean isSupportedType(Class clazz) {
    if(clazz.isPrimitive()) {
      return true;
    }
    if(clazz == String.class) {
      return true;
    }
    if(clazz.isAssignableFrom(Priority.class)) {
      return true;
    }
    return false;
  }
  public
    .debug("getMBeanInfo called.");
    .toArray(attribs);
    return new MBeanInfo(,
			 attribs,
  }
  public
  Object invoke(String operationNameObject params[], String signature[])
    throws MBeanException,
    if(operationName.equals("activateOptions") &&
                      instanceof OptionHandler) {
      OptionHandler oh = (OptionHandler;
      oh.activateOptions();
      return "Options activated.";
    } else if (operationName.equals("setLayout")) {
      Layout layout = (Layout) OptionConverter.instantiateByClassName((String)
								      params[0],
								      Layout.class,
								      null);
      .setLayout(layout);
      registerLayoutMBean(layout);
    }
    return null;
  }
  void registerLayoutMBean(Layout layout) {
    if(layout == null)
      return;
    String name = .getName()+",layout="+layout.getClass().getName();
    .debug("Adding LayoutMBean:"+name);
    ObjectName objectName = null;
    try {
      LayoutDynamicMBean appenderMBean = new LayoutDynamicMBean(layout);
      objectName = new ObjectName("log4j:appender="+name);
      .registerMBean(appenderMBeanobjectName);
      .add(new MBeanAttributeInfo("appender="+name,
					     "javax.management.ObjectName",
					     "The "+name+" layout.",
					     true,
					     true,
					     false));
    } catch(Exception e) {
      .error("Could not add DynamicLayoutMBean for ["+name+"]."e);
    }
  }
  protected
    return ;
  }
  public
                                                   MBeanException,
                                                   ReflectionException {
       // Check attributeName is not null to avoid NullPointerException later on
    if (attributeName == null) {
			"Attribute name cannot be null"),
       "Cannot invoke a getter of " +  + " with null attribute name");
    }
    .debug("getAttribute called with ["+attributeName+"].");
    if(attributeName.startsWith("appender="+.getName()+",layout")) {
      try {
	return new ObjectName("log4j:"+attributeName );
      } catch(Exception e) {
	.error("attributeName"e);
      }
    }
    MethodUnion mu = (MethodUnion.get(attributeName);
    //cat.debug("----name="+attributeName+", b="+b);
    if(mu != null && mu.readMethod != null) {
      try {
	return mu.readMethod.invoke(null);
      } catch(Exception e) {
	return null;
      }
    }
    // If attributeName has not been recognized throw an AttributeNotFoundException
    throw(new AttributeNotFoundException("Cannot find " + attributeName +
					 " attribute in " + ));
  }
  public
  void setAttribute(Attribute attributethrows AttributeNotFoundException,
                                                InvalidAttributeValueException,
                                                MBeanException,
                                                ReflectionException {
    // Check attribute is not null to avoid NullPointerException later on
    if (attribute == null) {
      throw new RuntimeOperationsException(
                  new IllegalArgumentException("Attribute cannot be null"),
		  "Cannot invoke a setter of " +  +
		  " with null attribute");
    }
    String name = attribute.getName();
    Object value = attribute.getValue();
    if (name == null) {
      throw new RuntimeOperationsException(
                    new IllegalArgumentException("Attribute name cannot be null"),
		    "Cannot invoke the setter of "++
		    " with null attribute name");
    }
    MethodUnion mu = (MethodUnion.get(name);
    if(mu != null && mu.writeMethod != null) {
      Object[] o = new Object[1];
      Class[] params = mu.writeMethod.getParameterTypes();
      if(params[0] == org.apache.log4j.Priority.class) {
	value = OptionConverter.toLevel((Stringvalue,
      }
      o[0] = value;
      try {
	mu.writeMethod.invoke(,  o);
      } catch(Exception e) {
	.error("FIXME"e);
      }
    } else if(name.endsWith(".layout")) {
    } else {
      throw(new AttributeNotFoundException("Attribute " + name +
					   " not found in " +
					   this.getClass().getName()));
    }
  }
  public
    .debug("preRegister called. Server="+server", name="+name);
    this. = server;
    return name;
  }
New to GrepCode? Check out our FAQ X