package pl.net.bluesoft.rnd.processtool.plugins; import org.osgi.framework.BundleException; import pl.net.bluesoft.rnd.processtool.ProcessToolContext; import pl.net.bluesoft.rnd.processtool.plugins.osgi.PluginHelper; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.logging.Logger; import static pl.net.bluesoft.util.lang.FormatUtil.nvl; /** * @author tlipski@bluesoft.net.pl */ public class PluginServlet extends HttpServlet { static PluginHelper pluginHelper; private static Logger LOGGER = Logger.getLogger(PluginServlet.class.getName()); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { stopPluginHelper(); initPluginHelper(); } @Override public void init() throws ServletException { LOGGER.info("init"); initPluginHelper(); LOGGER.info("initout"); } private synchronized void initPluginHelper() throws ServletException { try { if (pluginHelper == null) { pluginHelper = new PluginHelper(); ProcessToolRegistry processToolRegistry = (ProcessToolRegistry) getServletContext() .getAttribute(ProcessToolRegistry.class.getName()); pluginHelper.initialize( firstExistingDirectory(getServletConfig().getInitParameter("osgi-plugins-directory"), getServletConfig().getServletContext().getRealPath("/WEB-INF/osgi"), ProcessToolContext.Util.getHomePath() + File.separator + "osgi-plugins"), nvl(getServletConfig().getInitParameter("felix-cache-directory"), ProcessToolContext.Util.getHomePath() + File.separator + "felix-cache"), nvl(getServletConfig().getInitParameter("lucene-index-directory"), ProcessToolContext.Util.getHomePath() + File.separator + "lucene-index"), (ProcessToolRegistryImpl) processToolRegistry); } } catch (Exception e) { pluginHelper = null; LOGGER.throwing("Exception while osgi init", e.getMessage(), e); throw new ServletException(e); } } private synchronized void stopPluginHelper() { if (pluginHelper != null) { try { pluginHelper.stopPluginSystem(); pluginHelper = null; } catch (BundleException e) { LOGGER.throwing("Exception while osgi stop", e.getMessage(), e); } } } private static String firstExistingDirectory(String... dirs) { for (String dir : dirs) { if (dir != null && new File(dir).exists()) { return dir; } } return null; } @Override public void destroy() { LOGGER.info("destroy"); super.destroy(); stopPluginHelper(); } }