package org.apache.struts2.osgi;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import org.apache.struts2.StrutsException;
import org.apache.struts2.osgi.host.OsgiHost;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* ServletContextListener that starts Osgi host
*/
public class StrutsOsgiListener implements ServletContextListener {
public static final String OSGI_HOST = "__struts_osgi_host";
public static final String PLATFORM_KEY = "struts.osgi.host";
private static final Logger LOG = LoggerFactory.getLogger(StrutsOsgiListener.class);
private OsgiHost osgiHost;
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
String platform = servletContext.getInitParameter(PLATFORM_KEY);
if (LOG.isDebugEnabled()) {
LOG.debug("Defined OSGi platform as [#0] via context-param [#1]", platform, PLATFORM_KEY);
}
osgiHost = OsgiHostFactory.createOsgiHost(platform);
servletContext.setAttribute(OSGI_HOST, osgiHost);
try {
osgiHost.init(servletContext);
} catch (Exception e) {
throw new StrutsException("Cannot init OSGi platform!", e);
}
}
public void contextDestroyed(ServletContextEvent sce) {
try {
osgiHost.destroy();
} catch (Exception e) {
throw new StrutsException("Cannot stop OSGi platform!", e);
}
}
}