// que ni siquiera est�n correctamente de-serializados
DeserialPendingTask sessionTask = getSessionDeserialPendingTask();
if (sessionTask != null)
{
ItsNatServletImpl itsNatServlet = itsNatRequest.getItsNatServletImpl();
ItsNatServletResponse itsNatResponse = itsNatRequest.getItsNatServletResponse();
sessionTask.process(itsNatServlet,itsNatRequest,itsNatResponse);
setSessionDeserialPendingTask(null); // Para liberar memoria
}
if (hasDeserialPendingTasks())
{
ItsNatServletImpl itsNatServlet = itsNatRequest.getItsNatServletImpl();
String servletName = itsNatServlet.getName();
ItsNatServletResponse itsNatResponse = itsNatRequest.getItsNatServletResponse();
ServletContext context = itsNatContext.getServletContext();
MapListImpl<String,DeserialPendingTask> pendingTasks = getDeserialPendingTasks();
for(Map.Entry<String,LinkedList<DeserialPendingTask>> entry : pendingTasks.getMap().entrySet() )
{
String currServletName = entry.getKey();
LinkedList<DeserialPendingTask> pendingTasksOfServlet = entry.getValue();
if (pendingTasksOfServlet == null) continue; // Por si acaso pero es raro que sea nulo
if (servletName.equals(currServletName))
{
// El servlet que est� haciendo la request de verdad
for(DeserialPendingTask task : pendingTasksOfServlet)
{
task.process(itsNatServlet,itsNatRequest,itsNatResponse);
}
}
else
{
ItsNatServletImpl currItsNatServlet = ItsNatServletImpl.getItsNatServletByName(currServletName);
ServletRequest servRequest = itsNatRequest.getServletRequest();
ServletResponse servResponse = itsNatResponse.getServletResponse();
if (currItsNatServlet == null)
{
// Despertamos al servlet para que se inicie y se registren los templates etc
RequestDispatcher servletDisp = context.getNamedDispatcher(currServletName);
// No chequeamos si es null, caso de eliminaci�n de servlet o similar en una nueva versi�n de la app.
// no merece la pena porque la deserializaci�n ser� err�nea, dejamos fallar
// aunque perdamos la sessi�n entera
Object currItsNatAction = servRequest.getAttribute("itsnat_action");
servRequest.setAttribute("itsnat_action", ItsNatHttpServletImpl.ACTION_SERVLET_WEAK_UP);
servletDisp.include(servRequest,servResponse); // Aseguramos as� que se inicializa
// Lo dejamos como estaba
servRequest.removeAttribute("itsnat_action");
if (currItsNatAction != null)
servRequest.setAttribute("itsnat_action",currItsNatAction);
// Ahora deber�a de estar
currItsNatServlet = ItsNatServletImpl.getItsNatServletByName(currServletName);
}
// Porque este servlet es diferente al que recibe la request, no pasamos
// los objetos request y response originales pues los de ItsNat est�n vinculados
// al servlet, tenemos que crear un par "falsos"
// el �nico caso problem�tico son los templates basados en TemplateSource que son los �nicos que necesitan estos objetos
ItsNatServletRequestImpl currItsNatServReq = currItsNatServlet.createItsNatServletRequest(servRequest,servResponse,this); // Pasando la sesi�n como par�metro evitamos que se intente cargar de nuevo
ItsNatServletResponseImpl currItsNatServResp = currItsNatServReq.getItsNatServletResponseImpl();
for(DeserialPendingTask task : pendingTasksOfServlet)
{
task.process(currItsNatServlet,currItsNatServReq,currItsNatServResp);