package org.jboss.web.loadbalancer;
import java.io.IOException;
import javax.management.MalformedObjectNameException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.HttpMethod;
import org.jboss.logging.Logger;
import org.jboss.mx.util.MBeanProxyExt;
import org.jboss.web.loadbalancer.scheduler.NoHostAvailableException;
import org.jboss.web.loadbalancer.util.Constants;
import org.jboss.web.loadbalancer.util.Request;
public class LoadbalancerServlet
extends HttpServlet
{
protected static Logger log = Logger.getLogger(LoadbalancerServlet.class);
protected String loadbalancerName;
protected LoadbalancerServiceMBean loadbalancer;
protected void handleRequest(
HttpServletRequest request,
HttpServletResponse response,
int requestMethod) throws ServletException, IOException
{
HttpMethod method = null;
Request schedRequest=new Request(request, response, requestMethod);
initLoadbalancerDelegate();
try
{
loadbalancer.createMethod(schedRequest);
}
catch (NoHostAvailableException nhae)
{
log.error("We have no host to schedule request - giving up");
response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, nhae.getMessage());
return;
}
loadbalancer.addRequestData(schedRequest);
loadbalancer.handleRequest(schedRequest);
}
protected void doGet(
HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
handleRequest(request, response,Constants.HTTP_METHOD_GET);
}
protected void doPost(
HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
handleRequest(request, response, Constants.HTTP_METHOD_POST);
}
protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
handleRequest(request, response, Constants.HTTP_METHOD_DELETE);
}
protected void doHead(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
handleRequest(request, response, Constants.HTTP_METHOD_HEAD);
}
protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
handleRequest(request, response, Constants.HTTP_METHOD_OPTIONS);
}
protected void doPut(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException
{
handleRequest(request, response, Constants.HTTP_METHOD_PUT);
}
public void init(ServletConfig config) throws ServletException
{
super.init(config);
loadbalancerName=config.getInitParameter("loadbalancer-service-name");
log.debug("Servlet init ready");
}
public void destroy()
{
super.destroy();
loadbalancer=null;
log.debug("Servlet destroyed");
}
protected void initLoadbalancerDelegate()
{
if (loadbalancer == null)
{
try
{
loadbalancer = (LoadbalancerServiceMBean)
MBeanProxyExt.create(LoadbalancerServiceMBean.class,
loadbalancerName);
}
catch (MalformedObjectNameException ex)
{
log.error("Could not create LoadbalancerService-Proxy",ex);
}
}
}
}