package org.distributeme.core.routing;
import java.util.ArrayList;
import java.util.List;
import org.configureme.annotations.AfterConfiguration;
import org.configureme.annotations.AfterInitialConfiguration;
import org.configureme.annotations.AfterReConfiguration;
import org.configureme.annotations.ConfigureMe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Generic configuration file that will work with most routers, even many routers most probably won't support all of the options.
*
* @author lrosenberg
* @since 20.02.15 23:07
* @version $Id: $Id
*/
@ConfigureMe (allfields = true)
public class GenericRouterConfiguration {
private static Logger logger = LoggerFactory.getLogger(GenericRouterConfiguration.class);
/**
* Number of instances of this service.
*/
private int numberOfInstances;
/**
* Amount of time in milliseconds a service instance will be blacklisted.
*/
private long blacklistTime;
/**
* If true and all instances are blacklisted, then blacklisting for all instances will be cancelled.
*/
private boolean overrideBlacklistIfAllBlacklisted;
/**
* Fully qualified class name of blacklist strategy.
* If not set org.distributeme.core.routing.blacklisting.DefaultBlacklistingStrategy will be used
*/
private String blacklistStrategyClazz;
/**
* Name of configureme configuration for blacklist strategy. Json file sufffix is not part of the name.
*/
private String blacklistStrategyConfigurationName;
/**
* Observer wich can react onf configuration changes.
*/
private List<RouterConfigurationObserver> routerConfigurationObservers = new ArrayList<>();
/**
* <p>Getter for the field <code>blacklistTime</code>.</p>
*
* @return a long.
*/
public long getBlacklistTime() {
return blacklistTime;
}
/**
* <p>Setter for the field <code>blacklistTime</code>.</p>
*
* @param blacklistTime a long.
*/
public void setBlacklistTime(long blacklistTime) {
this.blacklistTime = blacklistTime;
}
/**
* <p>Getter for the field <code>numberOfInstances</code>.</p>
*
* @return a int.
*/
public int getNumberOfInstances() {
return numberOfInstances;
}
/**
* <p>Setter for the field <code>numberOfInstances</code>.</p>
*
* @param numberOfInstances a int.
*/
public void setNumberOfInstances(int numberOfInstances) {
this.numberOfInstances = numberOfInstances;
}
public boolean isOverrideBlacklistIfAllBlacklisted() {
return overrideBlacklistIfAllBlacklisted;
}
public void setOverrideBlacklistIfAllBlacklisted(boolean overrideBlacklistIfAllBlacklisted) {
this.overrideBlacklistIfAllBlacklisted = overrideBlacklistIfAllBlacklisted;
}
public String getBlacklistStrategyClazz() {
return blacklistStrategyClazz;
}
public void setBlacklistStrategyClazz(String blacklistStrategyClazz) {
this.blacklistStrategyClazz = blacklistStrategyClazz;
}
public void setBlacklistStrategyConfigurationName(String blacklistStrategyConfigurationName) {
this.blacklistStrategyConfigurationName = blacklistStrategyConfigurationName;
}
public String getBlacklistStrategyConfigurationName() {
return blacklistStrategyConfigurationName;
}
/** {@inheritDoc} */
@Override
public String toString() {
return "GenericRouterConfiguration{" +
"numberOfInstances=" + numberOfInstances +
", blacklistTime=" + blacklistTime +
", overrideBlacklistIfAllBlacklisted=" + overrideBlacklistIfAllBlacklisted +
", blacklistStrategyClazz='" + blacklistStrategyClazz + '\'' +
", blacklistStrategyConfigurationName='" + blacklistStrategyConfigurationName + '\'' +
", routerConfigurationObservers=" + routerConfigurationObservers +
'}';
}
public void addRouterConfigurationObserver(RouterConfigurationObserver routerConfigurationObserver) {
routerConfigurationObservers.add(routerConfigurationObserver);
}
@AfterInitialConfiguration
public void afterInitialConfiguration() {
for(RouterConfigurationObserver observer: routerConfigurationObservers) {
try {
observer.routerConfigurationInitialChange(this);
} catch (Exception e) {
logger.warn("Could not call routerConfigurationInitialChange in " + observer, e);
}
}
}
@AfterReConfiguration
public void afterReConfiguration() {
for(RouterConfigurationObserver observer: routerConfigurationObservers) {
try {
observer.routerConfigurationFollowupChange(this);
} catch (Exception e) {
logger.warn("Could not call routerConfigurationFollowupChange in " + observer, e);
}
}
}
@AfterConfiguration
public void afterConfiguration() {
for(RouterConfigurationObserver observer: routerConfigurationObservers) {
try {
observer.routerConfigurationChange(this);
} catch (Exception e) {
logger.warn("Could not call routerConfigurationChange in " + observer, e);
}
}
}
}