List of usage examples for org.springframework.context.support ClassPathXmlApplicationContext isActive
@Override
public boolean isActive()
From source file:org.easyrec.plugin.container.PluginRegistry.java
@SuppressWarnings({ "unchecked" })
public PluginVO checkPlugin(byte[] file) throws Exception {
PluginVO plugin;// w ww . j a v a2 s . co m
FileOutputStream fos = null;
URLClassLoader ucl;
ClassPathXmlApplicationContext cax = null;
File tmpFile = null;
try {
if (file == null)
throw new IllegalArgumentException("Passed file must not be null!");
tmpFile = File.createTempFile("plugin", null);
tmpFile.deleteOnExit();
fos = new FileOutputStream(tmpFile);
fos.write(file);
fos.close();
// check if plugin is valid
ucl = new URLClassLoader(new URL[] { tmpFile.toURI().toURL() }, this.getClass().getClassLoader());
if (ucl.getResourceAsStream(DEFAULT_PLUGIN_CONFIG_FILE) != null) {
cax = new ClassPathXmlApplicationContext(new String[] { DEFAULT_PLUGIN_CONFIG_FILE }, false,
appContext);
cax.setClassLoader(ucl);
logger.info("Classloader: " + cax.getClassLoader());
cax.refresh();
Map<String, GeneratorPluginSupport> beans = cax.getBeansOfType(GeneratorPluginSupport.class);
if (beans.isEmpty()) {
logger.debug("No class implementing a generator could be found. Plugin rejected!");
throw new Exception("No class implementing a generator could be found. Plugin rejected!");
}
Generator<GeneratorConfiguration, GeneratorStatistics> generator = beans.values().iterator().next();
logger.info(String.format("Plugin successfully validated! class: %s name: %s, id: %s",
generator.getClass(), generator.getDisplayName(), generator.getId()));
cax.getAutowireCapableBeanFactory().autowireBeanProperties(generator,
AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
plugin = new PluginVO(generator.getDisplayName(), generator.getId().getUri(),
generator.getId().getVersion(), LifecyclePhase.NOT_INSTALLED.toString(), file, null);
if (tmpFile.delete())
logger.info("tmpFile deleted successfully");
return plugin;
} else { // config file not found
logger.debug("No valid config file found in the supplied .jar file. Plugin rejected!");
throw new Exception("No valid config file found in the supplied .jar file. Plugin rejected!");
}
} catch (Exception e) {
logger.error("An Exception occurred while checking the plugin!", e);
throw e;
} finally {
if (fos != null)
fos.close();
if ((cax != null) && (!cax.isActive()))
cax.close();
if (tmpFile != null)
try {
if (!tmpFile.delete())
logger.warn("could not delete tmpFile");
} catch (SecurityException se) {
logger.error("Could not delete temporary file! Please check permissions!", se);
}
}
}