in src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPoolManager.java [230:276]
public void updated(String pid, Dictionary properties)
throws ConfigurationException {
final String name = (String) properties.get(ModifiableThreadPoolConfig.PROPERTY_NAME);
if ( name == null || name.length() == 0 ) {
throw new ConfigurationException(ModifiableThreadPoolConfig.PROPERTY_NAME, "Property is missing or empty.");
}
this.logger.debug("Updating {} with {}", pid, properties);
Entry createdEntry = null;
synchronized ( this.pools ) {
final ThreadPoolConfig config = this.createConfig(properties);
Entry foundEntry = null;
// we have to search the config by using the pid first!
for (final Entry entry : this.pools.values()) {
if ( pid.equals(entry.getPid()) ) {
foundEntry = entry;
break;
}
}
// if we haven't found it by pid we search by name
if ( foundEntry == null ) {
for (final Entry entry : this.pools.values()) {
if ( name.equals(entry.getName()) ) {
foundEntry = entry;
break;
}
}
}
if ( foundEntry != null ) {
// if the name changed - we have to reregister(!)
if ( !name.equals(foundEntry.getName()) ) {
this.pools.remove(foundEntry.getName());
this.pools.put(name, foundEntry);
}
// update
foundEntry.update(config, name, pid);
} else {
// create
createdEntry = new Entry(pid, config, name, bundleContext);
this.pools.put(name, createdEntry);
}
}
if ( createdEntry != null ) {
createdEntry.registerMBeanAndMetrics();
}
}