* Refresh the script engine manager.
*/
private void refreshScriptEngineManager() {
// create (empty) script engine manager
final ClassLoader loader = getClass().getClassLoader();
final SlingScriptEngineManager tmp = new SlingScriptEngineManager(loader);
// register script engines from bundles
final SortedSet<Object> extensions = new TreeSet<Object>();
synchronized (this.engineSpiBundles) {
for (final Bundle bundle : this.engineSpiBundles) {
extensions.addAll(registerFactories(tmp, bundle));
}
}
// register script engines from registered services
synchronized (this.engineSpiServices) {
for (final Map.Entry<ScriptEngineFactory, Map<Object, Object>> factory : this.engineSpiServices.entrySet()) {
extensions.addAll(registerFactory(tmp, factory.getKey(),
factory.getValue()));
}
}
scriptEngineManager.setDelegatee(tmp);
// Log messages to verify which ScriptEngine is actually used
// for our registered extensions
if (log.isInfoEnabled()) {
for (Object o : extensions) {
final String ext = o.toString();
final ScriptEngine e = tmp.getEngineByExtension(ext);
if (e == null) {
log.warn("No ScriptEngine found for extension '{}' that was just registered", ext);
} else {
log.info("Script extension '{}' is now handled by ScriptEngine '{}', version='{}', class='{}'", new Object[] { ext,
e.getFactory().getEngineName(), e.getFactory().getEngineVersion(), e.getClass().getName() });