package org.jboss.solder.servlet.event;
import java.io.IOException;
import java.lang.annotation.Annotation;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.jboss.solder.core.Requires;
import org.jboss.solder.servlet.WebApplication;
import org.jboss.solder.servlet.event.literal.DestroyedLiteral;
import org.jboss.solder.servlet.event.literal.StartedLiteral;
/**
* Leverages the lifecycle of a Servlet to generate a CDI when the web application has been fully deployed and when it is
* undeployed. This Servlet is assigned a high load-on-startup value (99999) in this module's web-fragment.xml to ensure it
* comes last in the list of ordered Servlets.
*
* @author <a href="http://community.jboss.org/people/dan.j.allen">Dan Allen</a>
*/
@Requires("javax.servlet.Servlet")
public class ServletEventBridgeServlet extends AbstractServletEventBridge implements Servlet {
private transient ServletConfig config;
public void init(ServletConfig config) throws ServletException {
this.config = config;
fireWebApplicationEvent(StartedLiteral.INSTANCE);
// fireEvent(config.getServletContext(), StartedLiteral.INSTANCE);
}
public void destroy() {
if (config != null) {
fireWebApplicationEvent(DestroyedLiteral.INSTANCE);
fireEvent(config.getServletContext(), DestroyedLiteral.INSTANCE);
}
}
protected void fireWebApplicationEvent(Annotation qualifier) {
if (config.getServletContext().getAttribute(WEB_APPLICATION_ATTRIBUTE_NAME) instanceof WebApplication) {
fireEvent(config.getServletContext().getAttribute(WEB_APPLICATION_ATTRIBUTE_NAME), qualifier);
}
}
public ServletConfig getServletConfig() {
return config;
}
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
}
public String getServletInfo() {
return "Solder Servlet module WebApplication event publisher";
}
}