001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.configuration.reloading; 019 020 import org.apache.commons.configuration.FileConfiguration; 021 import org.apache.commons.logging.Log; 022 import org.apache.commons.logging.LogFactory; 023 024 /** 025 * A strategy to reload configuration based on management requests. Designed for 026 * JMX management. 027 * 028 * @author Nicolas De loof 029 */ 030 public class ManagedReloadingStrategy implements ReloadingStrategy, 031 ManagedReloadingStrategyMBean 032 { 033 /** The logger. */ 034 private Log log = LogFactory.getLog(ManagedReloadingStrategy.class); 035 036 /** Stores a reference to the associated configuration. */ 037 private FileConfiguration configuration; 038 039 /** A flag whether a reload is required. */ 040 private boolean reloadingRequired; 041 042 /** 043 * @see org.apache.commons.configuration.reloading.ReloadingStrategy#init() 044 */ 045 public void init() 046 { 047 } 048 049 /** 050 * @see org.apache.commons.configuration.reloading.ReloadingStrategy#reloadingPerformed() 051 */ 052 public void reloadingPerformed() 053 { 054 reloadingRequired = false; 055 } 056 057 /** 058 * Checks whether reloading is required. This implementation checks whether 059 * the <code>refresh()</code> method has been invokded. 060 * 061 * @return a flag whether reloading is required 062 * @see org.apache.commons.configuration.reloading.ReloadingStrategy#reloadingRequired() 063 */ 064 public boolean reloadingRequired() 065 { 066 return reloadingRequired; 067 } 068 069 /** 070 * Sets the associated configuration. 071 * 072 * @param configuration the associated configuration 073 */ 074 public void setConfiguration(FileConfiguration configuration) 075 { 076 this.configuration = configuration; 077 } 078 079 /** 080 * Tells this strategy that the monitored configuration file should be 081 * refreshed. This method will typically be called from outside (through an 082 * exposed MBean) on behalf of an administrator. 083 * 084 * @see org.apache.commons.configuration.reloading.ManagedReloadingStrategyMBean#refresh() 085 */ 086 public void refresh() 087 { 088 log.info("Reloading configuration."); 089 this.reloadingRequired = true; 090 // force reloading 091 configuration.isEmpty(); 092 } 093 }