001/* 002 * (C) Copyright 2010 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo - initial API and implementation 016 */ 017 018package org.nuxeo.runtime.management.metrics; 019 020import org.javasimon.SimonManager; 021import org.nuxeo.runtime.model.ComponentContext; 022import org.nuxeo.runtime.model.DefaultComponent; 023import org.osgi.framework.BundleContext; 024 025public class MetricComponent extends DefaultComponent { 026 027 protected final MetricSerializer serializer = new MetricSerializer(); 028 029 protected final MetricEnabler enabler = new MetricEnabler(); 030 031 @Override 032 public <T> T getAdapter(Class<T> adapter) { 033 if (MetricSerializerMXBean.class.isAssignableFrom(adapter)) { 034 return adapter.cast(serializer); 035 } 036 if (MetricEnabler.class.isAssignableFrom(adapter)) { 037 return adapter.cast(enabler); 038 } 039 if (MetricSerializer.class.isAssignableFrom(adapter)) { 040 return adapter.cast(serializer); 041 } 042 return super.getAdapter(adapter); 043 } 044 045 protected final MetricRegister register = new MetricRegister(); 046 047 protected final MetricRegisteringCallback registeringCB = new MetricRegisteringCallback(register); 048 049 @Override 050 public void activate(ComponentContext context) { 051 super.activate(context); 052 doStart(); 053 } 054 055 @Override 056 public void deactivate(ComponentContext context) { 057 doStop(); 058 super.deactivate(context); 059 } 060 061 public void start(BundleContext context) { 062 doStart(); 063 } 064 065 public void stop(BundleContext context) { 066 doStop(); 067 } 068 069 protected void doStart() { 070 enabler.setSerializer(serializer); 071 SimonManager.enable(); 072 SimonManager.callback().addCallback(registeringCB); 073 register.registerMXBean(enabler, "enabler", MetricEnablerMXBean.class, "Feature"); 074 register.registerMXBean(serializer, "serializer", MetricSerializerMXBean.class, "Feature"); 075 } 076 077 protected void doStop() { 078 SimonManager.disable(); 079 if (SimonManager.callback() != null) { 080 SimonManager.callback().removeCallback(registeringCB); 081 } 082 register.unregisterAll(); 083 } 084 085}