Java源码示例:org.apache.commons.configuration.event.ConfigurationEvent
示例1
public synchronized void configurationListener(ConfigurationEvent event) {
if (event.isBeforeUpdate()) {
return;
}
if (keyCache == null) {
keyCache = new ConcurrentHashMapEx<>();
updateCache(new Object(), priorityPropertySet);
configObjectMap.forEach((k, v) -> updateCache(k, v));
}
if (event.getPropertyName() != null) {
keyCache.forEach((k, v) -> v.getOrDefault(event.getPropertyName(), Collections.emptyList()).stream()
.forEach(p -> p.updateFinalValue(false, k)));
return;
}
// event like add configuration source, need to make a global refresh
keyCache.forEach(
(k, v) -> v.values().stream().flatMap(Collection::stream).forEach(
p -> p.updateFinalValue(false, k)));
}
示例2
public DynamicRequestLimiter(DynamicDistributedLogConfiguration dynConf,
StatsLogger statsLogger,
Feature rateLimitDisabledFeature) {
final StatsLogger limiterStatsLogger = statsLogger.scope("dynamic");
this.dynConf = dynConf;
this.rateLimitDisabledFeature = rateLimitDisabledFeature;
this.listener = new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent event) {
// Note that this method may be called several times if several config options
// are changed. The effect is harmless except that we create and discard more
// objects than we need to.
LOG.debug("Config changed callback invoked with event {} {} {} {}", new Object[] {
event.getPropertyName(), event.getPropertyValue(), event.getType(),
event.isBeforeUpdate()});
if (!event.isBeforeUpdate()) {
limiterStatsLogger.getCounter("config_changed").inc();
LOG.debug("Rebuilding limiter");
limiter = build();
}
}
};
LOG.debug("Registering config changed callback");
dynConf.addConfigurationListener(listener);
}
示例3
public DynamicRequestLimiter(DynamicDistributedLogConfiguration dynConf,
StatsLogger statsLogger, Feature rateLimitDisabledFeature) {
final StatsLogger limiterStatsLogger = statsLogger.scope("dynamic");
this.dynConf = dynConf;
this.rateLimitDisabledFeature = rateLimitDisabledFeature;
this.listener = new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent event) {
// Note that this method may be called several times if several config options
// are changed. The effect is harmless except that we create and discard more
// objects than we need to.
LOG.debug("Config changed callback invoked with event {} {} {} {}", new Object[] {
event.getPropertyName(), event.getPropertyValue(), event.getType(),
event.isBeforeUpdate()});
if (!event.isBeforeUpdate()) {
limiterStatsLogger.getCounter("config_changed").inc();
LOG.debug("Rebuilding limiter");
limiter = build();
}
}
};
LOG.debug("Registering config changed callback");
dynConf.addConfigurationListener(listener);
}
示例4
private void onInformationPointAdded(ConfigurationEvent event, InformationPointService informationPointService) {
String methodReference = readMethodReference(event);
String informationPointDtoAsJsonString = (String) event.getPropertyValue();
Optional<InformationPoint> informationPoint =
InformationPointDTOParser.parse(informationPointDtoAsJsonString, methodReference);
informationPoint.ifPresent(ip -> {
informationPointService.addInformationPoint(ip);
LOG.trace(() -> "Information point " + ip + " added");
});
}
示例5
private void onInformationPointModified(ConfigurationEvent event, InformationPointService informationPointService) {
String methodReference = readMethodReference(event);
String informationPointDtoAsJsonString = (String) event.getPropertyValue();
Optional<InformationPoint> informationPoint =
InformationPointDTOParser.parse(informationPointDtoAsJsonString, methodReference);
informationPoint.ifPresent(ip -> {
informationPointService.removeInformationPoint(ip);
informationPointService.addInformationPoint(ip);
LOG.trace(() -> "Information point " + ip + " modified");
});
}
示例6
private void onInformationPointRemoved(ConfigurationEvent event, InformationPointService informationPointService) {
String methodReference = readMethodReference(event);
InformationPoint informationPoint = InformationPoint.builder().withMethodReference(methodReference).build();
informationPointService.removeInformationPoint(informationPoint);
LOG.trace(() -> "Information point " + informationPoint + " removed");
}
示例7
@Override
public void configurationChanged(ConfigurationEvent e) {
if (e.getPropertyName() != null && e.getPropertyName().equalsIgnoreCase("gui.markColor")) {
final Object propertyValue = e.getPropertyValue();
if (propertyValue instanceof MarkerColors) {
markerColors = (MarkerColors) propertyValue;
} else if (propertyValue instanceof String) {
String value = (String) propertyValue;
markerColors = MarkerColors.fromString(value);
}
}
}
示例8
public void configurationChanged(ConfigurationEvent event) {
if (!event.isBeforeUpdate()) {
// only display events after the modification was done
System.out.println(name + " Received event!");
System.out.println(name + " Type = " + event.getType());
if (event.getPropertyName() != null) {
System.out.println(name + " Property name = " + event.getPropertyName());
}
if (event.getPropertyValue() != null) {
System.out.println(name + " Property value = " + event.getPropertyValue());
}
}
}
示例9
@Override
public synchronized void configurationChanged(ConfigurationEvent event) {
if (!event.isBeforeUpdate()) {
stopAndClearReporter();
start();
}
}
示例10
@Override
public synchronized void configurationChanged(ConfigurationEvent event) {
if (!event.isBeforeUpdate()) {
stopAndClearReporter();
start();
}
}
示例11
private void addConfigurationListener() {
final MetricsCloudWatchConfiguration springConfig = this;
ConfigurationManager.getConfigInstance().addConfigurationListener(new ConfigurationListener() {
@Override
public synchronized void configurationChanged(ConfigurationEvent event) {
if (!(event.getType() == AbstractConfiguration.EVENT_SET_PROPERTY ||
event.getType() == AbstractConfiguration.EVENT_ADD_PROPERTY)) {
return;
}
if (event.isBeforeUpdate()) {
return;
}
String name = event.getPropertyName();
if (!(name.equals(METRICS_AWS_ENABLED) ||
name.equals(METRICS_AWS_FILTER) ||
name.equals(METRICS_AWS_PUBLISH_INTERVAL) ||
name.equals(METRICS_AWS_PUBLISH_INTERVAL_UNIT))) {
return;
}
springConfig.enabled = name.equals(METRICS_AWS_ENABLED) ? Boolean.parseBoolean(event.getPropertyValue() + "") : springConfig.enabled;
destroyReporter();
if (springConfig.enabled) {
createReporter();
}
}
});
}
示例12
private void addConfigurationListener() {
final MetricsGraphiteConfiguration springConfig = this;
ConfigurationManager.getConfigInstance().addConfigurationListener(new ConfigurationListener() {
@Override
public synchronized void configurationChanged(ConfigurationEvent event) {
if (!(event.getType() == AbstractConfiguration.EVENT_SET_PROPERTY ||
event.getType() == AbstractConfiguration.EVENT_ADD_PROPERTY)) {
return;
}
if (event.isBeforeUpdate()) {
return;
}
String name = event.getPropertyName();
if (!(name.equals(METRICS_GRAPHITE_ENABLED) ||
name.equals(METRICS_GRAPHITE_SERVER) ||
name.equals(METRICS_GRAPHITE_PORT) ||
name.equals(METRICS_GRAPHITE_FILTER) ||
name.equals(METRICS_GRAPHITE_PUBLISH_INTERVAL) ||
name.equals(METRICS_GRAPHITE_PUBLISH_INTERVAL_UNIT))) {
return;
}
springConfig.enabled = name.equals(METRICS_GRAPHITE_ENABLED) ? Boolean.parseBoolean(event.getPropertyValue() + "") : springConfig.enabled;
destroyReporterLoader();
if (springConfig.enabled) {
createReporterLoader();
}
}
});
}
示例13
private ArchaiusPropertyResolver() {
this.config = ConfigurationManager.getConfigInstance();
ConfigurationManager.getConfigInstance().addConfigurationListener(new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent event) {
if (!event.isBeforeUpdate()) {
actions.forEach(ArchaiusPropertyResolver::invokeAction);
}
}
});
}
示例14
private String readMethodReference(ConfigurationEvent event) {
return event.getPropertyName().replace('!', '#');
}
示例15
@Test(timeout = 60000)
public void testExceptionInConfigLoad() throws Exception {
PropertiesWriter writer = new PropertiesWriter();
writer.setProperty("prop1", "1");
writer.save();
DeterministicScheduler mockScheduler = new DeterministicScheduler();
FileConfigurationBuilder builder = new PropertiesConfigurationBuilder(writer.getFile().toURI().toURL());
ConcurrentConstConfiguration conf = new ConcurrentConstConfiguration(new CompositeConfiguration());
List<FileConfigurationBuilder> fileConfigBuilders = Lists.newArrayList(builder);
ConfigurationSubscription confSub =
new ConfigurationSubscription(conf, fileConfigBuilders, mockScheduler, 100, TimeUnit.MILLISECONDS);
final AtomicInteger count = new AtomicInteger(1);
conf.addConfigurationListener(new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent event) {
LOG.info("config changed {}", event);
// Throw after so we actually see the update anyway.
if (!event.isBeforeUpdate()) {
count.getAndIncrement();
throw new RuntimeException("config listener threw and exception");
}
}
});
int i = 0;
int initial = 0;
while (count.get() == initial) {
writer.setProperty("prop1", Integer.toString(i++));
writer.save();
mockScheduler.tick(100, TimeUnit.MILLISECONDS);
}
initial = count.get();
while (count.get() == initial) {
writer.setProperty("prop1", Integer.toString(i++));
writer.save();
mockScheduler.tick(100, TimeUnit.MILLISECONDS);
}
}
示例16
@Test(timeout = 60000)
public void testExceptionInConfigLoad() throws Exception {
PropertiesWriter writer = new PropertiesWriter();
writer.setProperty("prop1", "1");
writer.save();
DeterministicScheduler mockScheduler = new DeterministicScheduler();
FileConfigurationBuilder builder = new PropertiesConfigurationBuilder(writer.getFile().toURI().toURL());
ConcurrentConstConfiguration conf = new ConcurrentConstConfiguration(new DistributedLogConfiguration());
List<FileConfigurationBuilder> fileConfigBuilders = Lists.newArrayList(builder);
ConfigurationSubscription confSub =
new ConfigurationSubscription(conf, fileConfigBuilders, mockScheduler, 100, TimeUnit.MILLISECONDS);
final AtomicInteger count = new AtomicInteger(1);
conf.addConfigurationListener(new ConfigurationListener() {
@Override
public void configurationChanged(ConfigurationEvent event) {
LOG.info("config changed {}", event);
// Throw after so we actually see the update anyway.
if (!event.isBeforeUpdate()) {
count.getAndIncrement();
throw new RuntimeException("config listener threw and exception");
}
}
});
int i = 0;
int initial = 0;
while (count.get() == initial) {
writer.setProperty("prop1", Integer.toString(i++));
writer.save();
mockScheduler.tick(100, TimeUnit.MILLISECONDS);
}
initial = count.get();
while (count.get() == initial) {
writer.setProperty("prop1", Integer.toString(i++));
writer.save();
mockScheduler.tick(100, TimeUnit.MILLISECONDS);
}
}
示例17
public void configurationChanged(ConfigurationEvent arg0) {
SessionListener.reloadMessageResources(basePath);
}