| /* |
| * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * - Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * |
| * - Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * - Neither the name of Oracle nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS |
| * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| /* |
| * This source code is provided to illustrate the usage of a given feature |
| * or technique and has been deliberately simplified. Additional steps |
| * required for a production-quality application, such as security checks, |
| * input validation and proper error handling, might not be present in |
| * this sample code. |
| */ |
| |
| |
| package com.sun.jmx.examples.scandir; |
| |
| import java.io.IOException; |
| import java.util.Map; |
| import javax.management.InstanceNotFoundException; |
| import javax.management.JMException; |
| |
| /** |
| * The <code>ScanManagerMXBean</code> is responsible for applying a |
| * configuration, starting and scheduling directory scans, and reporting |
| * application state. |
| * <p> |
| * The <code>ScanManagerMXBean</code> is a singleton MBean: there can be |
| * at most one instance of such an MBean registered in a given MBeanServer. |
| * The name of that MBean is a constant defined in |
| * {@link ScanManager#SCAN_MANAGER_NAME ScanManager.SCAN_MANAGER_NAME}. |
| * </p> |
| * <p> |
| * The <code>ScanManagerMXBean</code> is the entry point of the <i>scandir</i> |
| * application management interface. It is from this MBean that all other |
| * MBeans will be created and registered. |
| * </p> |
| * |
| * @author Sun Microsystems, 2006 - All rights reserved. |
| **/ |
| public interface ScanManagerMXBean { |
| /** |
| * This state tells whether directory scans are running, scheduled, |
| * successfully completed, or stopped. |
| * <p> |
| * The {@link #CLOSED} state means |
| * that the {@link ScanManagerMXBean} was closed and is no longer usable. |
| * This state is used when the {@link ScanManagerMXBean} needs to be |
| * unregistered. |
| * </p> |
| **/ |
| public enum ScanState { |
| /** |
| * Scanning of directories is in process. |
| **/ |
| RUNNING, |
| |
| /** |
| * Scanning of directories is not in process, but is scheduled |
| * for a later date. |
| **/ |
| SCHEDULED, |
| |
| /** |
| * Scanning is successfully completed. |
| **/ |
| COMPLETED, |
| |
| /** |
| * Scanning is stopped. No scanning is scheduled. |
| **/ |
| STOPPED, |
| |
| /** |
| * close() was called. |
| **/ |
| CLOSED |
| |
| } |
| |
| /** |
| * Returns the current state of the application. |
| * @return the current state of the application. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public ScanState getState() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Schedule a scan session for a later date. |
| * <p> |
| * A scan session is a background task that will sequentially call {@link |
| * DirectoryScannerMXBean#scan scan()} on every {@link |
| * DirectoryScannerMXBean} configured for this MBean. |
| * </p> |
| * @see #getDirectoryScanners |
| * @param delay The first scan session will be started after |
| * the given delay. 0 means start now. |
| * @param interval Scan session will be rescheduled periodically |
| * at the specified interval. The interval starts at the |
| * the end of the scan session: if a scan session takes |
| * on average x milliseconds to complete, then a scan session will |
| * be started on average every x+interval milliseconds. |
| * if (interval == 0) then scan session will not be |
| * rescheduled, and will run only once. |
| * @throws IllegalStateException if a scan session is already |
| * running or scheduled, or the MBean is closed. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void schedule(long delay, long interval) |
| throws IOException, InstanceNotFoundException; |
| |
| |
| /** |
| * Stops current running or scheduled scan sessions if any. |
| * <p> |
| * A scan session is a background task that will sequentially call {@link |
| * DirectoryScannerMXBean#scan scan()} on every {@link |
| * DirectoryScannerMXBean} configured for this MBean. |
| * </p> |
| * <p> |
| * Scan sessions are started/scheduled by calls to {@link #start start} or |
| * {@link #schedule schedule}. |
| * </p> |
| * After this method completes the state of the application will |
| * be {@link ScanState#STOPPED}. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void stop() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Switches the state to CLOSED. |
| * When closed, this MBean cannot be used any more. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void close() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Starts a scan session immediately. |
| * This is equivalent to {@link #schedule(long,long) schedule(0,0)}. |
| * @throws IllegalStateException if a scan session is already |
| * running or scheduled, or the MBean is closed. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public void start() |
| throws IOException, InstanceNotFoundException; |
| |
| /** |
| * Gets the list of directory scanners configured for this MBean. |
| * @return A {@code Map<String,DirectoryScannerMXBean>} where the |
| * key in the map is the value of the <code>name=</code> key |
| * of the {@link DirectoryScannerMXBean} ObjectName. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws JMException The MBeanServer failed to call the underlying MBean. |
| **/ |
| public Map<String,DirectoryScannerMXBean> getDirectoryScanners() |
| throws IOException, JMException; |
| |
| /** |
| * Apply the configuration handled by the {@link |
| * #getConfigurationMBean configuration MBean}. |
| * <p> |
| * When the configuration is applied, all the {@link DirectoryScannerMXBean} |
| * created by this MBean will be unregistered, and new {@link |
| * DirectoryScannerMXBean} will be created and registered from the |
| * new {@link ScanDirConfigMXBean#getConfiguration configuration data}. |
| * </p> |
| * <p> |
| * The initial result log configuration held by the {@link |
| * #getConfigurationMBean configuration MBean} will also be pushed to the |
| * {@link ResultLogManagerMXBean}. If you don't want to lose your current |
| * {@link ResultLogManagerMXBean} configuration, you should therefore call |
| * {@link #applyCurrentResultLogConfig |
| * applyCurrentResultLogConfig} before calling |
| * {@link #applyConfiguration applyConfiguration} |
| * </p> |
| * @param fromMemory if {@code true}, the configuration will be applied |
| * from memory. if {@code false}, the {@code ScanManagerMXBean} will |
| * ask the {@link |
| * #getConfigurationMBean configuration MBean} to {@link |
| * ScanDirConfigMXBean#load reload its configuration} before applying |
| * it. |
| * @throws IllegalStateException if a scan session is |
| * running or scheduled, or the MBean is closed. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws JMException The MBeanServer failed to call the underlying MBean. |
| **/ |
| public void applyConfiguration(boolean fromMemory) |
| throws IOException, JMException; |
| /** |
| * Replaces the {@link |
| * #getConfigurationMBean configuration MBean}'s {@link |
| * com.sun.jmx.examples.scandir.config.ScanManagerConfig#getInitialResultLogConfig |
| * initial result log configuration} with the current {@link |
| * ResultLogManagerMXBean} |
| * configuration. This prevents the <code>ResultLogManagerMXBean</code> |
| * current configuration from being reset when {@link #applyConfiguration |
| * applyConfiguration} is called. |
| * @param toMemory if {@code true} only replaces the initial result log |
| * configuration held in memory. |
| * if {@code false}, the {@link |
| * #getConfigurationMBean configuration MBean} will be asked to commit |
| * the whole configuration to the configuration file. |
| * |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws JMException The MBeanServer failed to call the underlying MBean. |
| **/ |
| public void applyCurrentResultLogConfig(boolean toMemory) |
| throws IOException, JMException; |
| |
| /** |
| * Instruct the {@code ScanManagerMXBean} to use another {@link |
| * ScanDirConfigMXBean configuration MBean}. |
| * <p>This method doesn't {@link #applyConfiguration apply} the new |
| * configuration. If you want to apply the new configuration, you should |
| * additionally call {@link #applyConfiguration |
| * applyConfiguration(true|false)}. Note that you cannot apply a |
| * configuration as long as a scan session is scheduled or running. |
| * In that case you will need to wait for that session to complete |
| * or call {@link #stop} to stop it. |
| * </p> |
| * @param config A proxy to the {@link ScanDirConfigMXBean} that holds |
| * the new configuration for the application. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| */ |
| public void setConfigurationMBean(ScanDirConfigMXBean config) |
| throws IOException, InstanceNotFoundException; |
| /** |
| * Gets the current configuration MBean. |
| * @return A proxy to the current configuration MBean. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws InstanceNotFoundException The underlying MBean is not |
| * registered in the MBeanServer. |
| **/ |
| public ScanDirConfigMXBean getConfigurationMBean() |
| throws IOException, InstanceNotFoundException; |
| /** |
| * This method creates a new alternate {@link ScanDirConfigMXBean}. |
| * |
| * <p>You will need to call {@link #setConfigurationMBean |
| * setConfigurationMBean} if you |
| * want this new {@link ScanDirConfigMXBean} to become the |
| * current configuration MBean. |
| * </p> |
| * <p> |
| * This new {@link ScanDirConfigMXBean} will be unregistered automatically |
| * by the {@code ScanManagerMXBean} when the {@code ScanManagerMXBean} |
| * is unregistered. |
| * </p> |
| * @param name The short name for the new {@link ScanDirConfigMXBean}. |
| * This name will be used in the ObjectName <code>name=</code> key |
| * of the new {@link ScanDirConfigMXBean}. |
| * @param filename The path of the file from which the new {@link |
| * ScanDirConfigMXBean} can {@link ScanDirConfigMXBean#load load} or |
| * {@link ScanDirConfigMXBean#save save} its configuration data. |
| * Note that even if the file exists and contain a valid |
| * configuration, you will still need to call {@link |
| * ScanDirConfigMXBean#load load} to make the {@link |
| * ScanDirConfigMXBean} load its configuration data. |
| * @throws IOException A connection problem occurred when accessing |
| * the underlying resource. |
| * @throws JMException The MBeanServer failed to call the underlying MBean. |
| * @return A proxy to the created {@link ScanDirConfigMXBean}. |
| */ |
| public ScanDirConfigMXBean createOtherConfigurationMBean(String name, |
| String filename) |
| throws JMException, IOException; |
| } |