package net.mad.ads.server.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.servlet.AsyncContext;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.mad.ads.server.utils.AdServerConstants;
import net.mad.ads.server.utils.RuntimeContext;
import net.mad.ads.server.utils.context.AdContext;
import net.mad.ads.server.utils.http.listener.AdContextListener;
@WebServlet(asyncSupported = true)
public static final int CALLBACK_TIMEOUT = 60000;
public static final int MAX_SIMULATED_TASK_LENGTH_MS = 5000;
private ExecutorService exec;
public void init()
throws ServletException {
int size = Integer.parseInt(getInitParameter("threadpoolsize"));
exec = Executors.newFixedThreadPool(size);
}
exec.shutdown();
}
HttpServletResponse response) throws ServletException, IOException {
final AsyncContext ctx = request.startAsync();
ctx.setTimeout(CALLBACK_TIMEOUT);
ctx.addListener(new AsyncListener() {
public void onComplete(AsyncEvent event)
throws IOException { }
public void onTimeout(AsyncEvent event)
throws IOException {
log("onTimeout called");
log(event.toString());
ctx.getResponse().getWriter().write("TIMEOUT");
ctx.complete();
}
public void onError(AsyncEvent event)
throws IOException {
log("onError called");
log(event.toString());
ctx.getResponse().getWriter().write("ERROR");
ctx.complete();
}
public void onStartAsync(AsyncEvent event)
throws IOException { }
});
execute(ctx, AdContextListener.ADCONTEXT.get());
}
private void execute(
final AsyncContext ctx,
final AdContext adcontext) {
ctx.start(new Runnable() {
ServletResponse response = ctx.getResponse();
PrintWriter out = null;
try {
out = response.getWriter();
Map<String, Object> context = new HashMap<String, Object>();
String adselect_url = RuntimeContext
.getProperties()
.getProperty(
AdServerConstants.CONFIG.PROPERTIES.ADSERVER_SELECT_URL,
"");
String adserver_url = RuntimeContext.getProperties().getProperty(
AdServerConstants.CONFIG.PROPERTIES.ADSERVER_URL, "");
context.put("adselect_url", adselect_url);
context.put("adserver_url", adserver_url);
context.put("adrequest_id", adcontext.getRequestid());
context.put("enviroment", RuntimeContext.getEnviroment()
.toLowerCase());
String content = RuntimeContext.getTemplateManager()
.processTemplate("ads", context);
out.println(content);
} catch (Exception e) {
log("Problem processing task", e);
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
ctx.complete();
}
}
});
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override
return "Short description";
}
}