/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.management.jmx.impl; import org.exoplatform.management.spi.ManagedResource; import org.exoplatform.management.ManagementAware; import org.exoplatform.management.jmx.annotations.NamingContext; import javax.management.InstanceNotFoundException; import javax.management.MBeanException; import javax.management.MBeanRegistration; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.RuntimeOperationsException; import javax.management.modelmbean.InvalidTargetObjectTypeException; import javax.management.modelmbean.ModelMBeanInfo; import javax.management.modelmbean.RequiredModelMBean; /** * A convenient subclass of {@link RequiredModelMBean} that routes the invocation of the interface * {@link MBeanRegistration} to the managed resource when it implements the method. * * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> * @version $Revision$ */ public class ExoModelMBean extends RequiredModelMBean { /** . */ private Object mr; /** . */ private final ManagedResource context; public ExoModelMBean(ManagedResource context, Object mr, ModelMBeanInfo mbi) throws MBeanException, RuntimeOperationsException, InstanceNotFoundException, InvalidTargetObjectTypeException { super(mbi); // this.context = context; this.mr = mr; // setManagedResource(mr, "ObjectReference"); } @Override public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException { context.beforeInvoke(mr); try { return super.invoke(opName, opArgs, sig); } finally { context.afterInvoke(mr); } } @Override public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception { name = super.preRegister(server, name); // if (mr instanceof MBeanRegistration) { ((MBeanRegistration)mr).preRegister(server, name); } // return name; } @Override public void postRegister(Boolean registrationDone) { super.postRegister(registrationDone); // PropertiesInfo info = PropertiesInfo.resolve(mr.getClass(), NamingContext.class); // MBeanScopingData scopingData = info != null ? info.resolve(mr) : new MBeanScopingData(); // context.setScopingData(MBeanScopingData.class, scopingData); // if (mr instanceof MBeanRegistration) { ((MBeanRegistration)mr).postRegister(registrationDone); } } @Override public void preDeregister() throws Exception { if (mr instanceof MBeanRegistration) { ((MBeanRegistration)mr).preDeregister(); } // if (mr instanceof ManagementAware) { ((ManagementAware)mr).setContext(null); } // super.preDeregister(); } @Override public void postDeregister() { if (mr instanceof MBeanRegistration) { ((MBeanRegistration)mr).postDeregister(); } // super.postDeregister(); } }