00001 /** 00002 * C-JDBC: Clustered JDBC. 00003 * Copyright (C) 2002-2004 French National Institute For Research In Computer 00004 * Science And Control (INRIA). 00005 * Contact: c-jdbc@objectweb.org 00006 * 00007 * This library is free software; you can redistribute it and/or modify it 00008 * under the terms of the GNU Lesser General Public License as published by the 00009 * Free Software Foundation; either version 2.1 of the License, or any later 00010 * version. 00011 * 00012 * This library is distributed in the hope that it will be useful, but WITHOUT 00013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00014 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 00015 * for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public License 00018 * along with this library; if not, write to the Free Software Foundation, 00019 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 00020 * 00021 * Initial developer(s): Marc Wick. 00022 * Contributor(s): ______________________. 00023 */ 00024 00025 package org.objectweb.cjdbc.controller.jmx; 00026 00027 import javax.management.MBeanServer; 00028 import javax.management.MBeanServerBuilder; 00029 import javax.management.MBeanServerDelegate; 00030 00031 /** 00032 * Base class for chained MBeanServerBuilders. <br> 00033 * By default this class delegates all method calls to the nested 00034 * MBeanServerBuilder. <br> 00035 * See the MX4J documentation on how to use correctly this class. <br> 00036 * <br> 00037 * Example implementation: 00038 * 00039 * <pre> 00040 * 00041 * 00042 * 00043 * public class LoggingBuilder extends ChainedMBeanServerBuilder 00044 * { 00045 * public LoggingBuilder() 00046 * { 00047 * super(new MBeanServerBuilder()); 00048 * } 00049 * 00050 * public MBeanServer newMBeanServer(String defaultDomain, MBeanServer outer, MBeanServerDelegate delegate) 00051 * { 00052 * LoggingMBeanServer external = new LoggingMBeanServer(); 00053 * MBeanServer nested = getBuilder().newMBeanServer(defaultDomain, outer == null ? external : outer, delegate); 00054 * external.setMBeanServer(nested); 00055 * return external; 00056 * } 00057 * } 00058 * 00059 * public class LoggingMBeanServer extends ChainedMBeanServer 00060 * { 00061 * protected void setMBeanServer(MBeanServer server) 00062 * { 00063 * super.setMBeanServer(server); 00064 * } 00065 * 00066 * public Object getAttribute(ObjectName objectName, String attribute) 00067 * throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException 00068 * { 00069 * Object value = super.getAttribute(objectName, attribute); 00070 * System.out.println("Value is: " + value); 00071 * return value; 00072 * } 00073 * 00074 * ... 00075 * } 00076 * 00077 * 00078 * 00079 * </pre> 00080 * 00081 * @author <a href="mailto:marc.wick@monte-bre.ch">Marc Wick </a> 00082 * @version 1.0 00083 */ 00084 public class ChainedMBeanServerBuilder extends javax.management.MBeanServerBuilder 00085 { 00086 private final MBeanServerBuilder builder; 00087 00088 /** 00089 * Creates a new chained MBeanServerBuilder 00090 * 00091 * @param builder The MBeanServerBuilder this object delegates to. 00092 */ 00093 public ChainedMBeanServerBuilder(MBeanServerBuilder builder) 00094 { 00095 if (builder == null) 00096 throw new IllegalArgumentException(); 00097 this.builder = builder; 00098 } 00099 00100 /** 00101 * Forwards the call to the chained builder. 00102 * 00103 * @see MBeanServerBuilder#newMBeanServerDelegate 00104 */ 00105 public MBeanServerDelegate newMBeanServerDelegate() 00106 { 00107 return getMBeanServerBuilder().newMBeanServerDelegate(); 00108 } 00109 00110 /** 00111 * Forwards the call to the chained builder. 00112 * 00113 * @see MBeanServerBuilder#newMBeanServer(java.lang.String, 00114 * javax.management.MBeanServer, javax.management.MBeanServerDelegate) 00115 */ 00116 public MBeanServer newMBeanServer(String defaultDomain, MBeanServer outer, 00117 MBeanServerDelegate delegate) 00118 { 00119 return getMBeanServerBuilder().newMBeanServer(defaultDomain, outer, 00120 delegate); 00121 } 00122 00123 /** 00124 * Returns the chained MBeanServerBuilder this object delegates to. 00125 */ 00126 protected MBeanServerBuilder getMBeanServerBuilder() 00127 { 00128 return builder; 00129 } 00130 00131 }