/* * Copyright (c) 2003, Intracom S.A. - www.intracom.com * * This library 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 of the License, or (at your option) any later version * * This library 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 library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * This package and its source code is available at www.jboss.org **/ package org.jboss.jmx.adaptor.snmp.agent; import java.util.Date; import javax.management.MBeanServer; import javax.management.ObjectName; import org.jboss.logging.Logger; /** * <tt>Heartbeat</tt> auxiliary class implementing agent heartbeat * schedulling and emission setup * * @version $Revision: 44604 $ * * @author <a href="mailto:spol@intracom.gr">Spyros Pollatos</a> * @author <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a> **/ public class Heartbeat { /** The notification message field */ public static final String NOTIFICATION_MSG = "heartbeat report"; /** Logger object */ private static final Logger log = Logger.getLogger(Heartbeat.class); /** JMX Agent */ private MBeanServer agent = null; /** Heart-beat interval in secs */ private long interval = 0; /** Timer name */ private ObjectName timer = null; /** The id of the scheduled event */ private Integer heartbeatSchedule = null; /** * CTOR **/ public Heartbeat(MBeanServer agent, ObjectName timer, long interval) { this.agent = agent; this.timer = timer; this.interval = interval; } /** * Setup the production of heart-beat notifications **/ public void start() throws Exception { // Get the heartbeat period in mSecs long period = interval * 1000; if (period <= 0) { log.debug("Heartbeat disabled"); return; } // Skip if schedule is already set // if(heartbeatSchedule == null) { try { // Organise schedulled emission of heartbeat notification Object userData = null; // No user payload Date startTime = new Date(); // Start immediately Long nbOccurences = new Long(0); // Go on forever // If timer MBean not registered, exception will be thrown heartbeatSchedule = (Integer) agent.invoke( timer, "addNotification", new Object[] { EventTypes.HEARTBEAT, NOTIFICATION_MSG, userData, startTime, new Long(period), nbOccurences }, new String[] { "java.lang.String", "java.lang.String", Object.class.getName(), Date.class.getName(), Long.TYPE.getName(), Long.TYPE.getName() }); log.debug("Heartbeat period set to " + period + " msecs"); } catch (Exception e) { log.error("while setting heartbeat notification", e); throw e; } } } // start() /** * Disable heartbeat **/ public void stop() throws Exception { if(heartbeatSchedule != null) { try { // Have the schedule removed agent.invoke( timer, "removeNotification", new Object[] { heartbeatSchedule }, new String[] { heartbeatSchedule.getClass().getName() } ); heartbeatSchedule = null; } catch (Exception e) { log.error("while unsetting heartbeat notification", e); throw e; } } } // stop } // class Heartbeat