estou com um problema no meu servidor web. Tenho um servlet que devolve um arquivo xml. Até semana passada estava tudo certo. Porém este arquivo cresce a cada dia, pois é reflexo do tamanho de uma tabela de dados do banco. Quando esse arquivo ultrapassou os 1Mb de tamanho, o servlet começou a interromper a geração do arquivo deixando-o inacabado. Parece que há um tempo de execução máximo definido dentro do tomcat (5.5) que foi ultrapassado e então o processo é abortado. Estou viajando ou pode ser isso mesmo? Alguma dica? Não sei bem por onde começar.
package org.pec.servlet;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.pec.dao.PropriedadeDao;
public class GeraKml extends HttpServlet {
public void doGet(HttpServletRequest req, // This provides information sent by the browser
HttpServletResponse res // This is used to send information back to the browser
) throws ServletException, // General exception that should be thrown if there
// is a unrecoverable error in the Servlet
IOException
{
// Set the MIME type for the information being sent to the browser.
// In this case, we are going to send back HTML
String action = req.getParameter("do");
if (action==null)
action = "all";
ServletOutputStream out = res.getOutputStream();
res.setHeader("Expires", "0");
res.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
res.setHeader("Pragma", "public");
res.setContentType("application/octet-stream");
res.setHeader( "Content-Disposition", " attachment; filename=propriedades.kml");
PropriedadeDao propDao = new PropriedadeDao();
HttpSession session = req.getSession();
Collection prcoll = propDao.getAllPropriedades();
out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
out.println("<kml xmlns=\"http://earth.google.com/kml/2.0\">");
out.println("<Document>");
out.println("<ScreenOverlay>");
out.println("<name>Absolute Positioning: Top left</name>");
out.println("<Icon>");
out.println("<href>http://sistema99.com.br/images/logos/logo2.gif</href>");
out.println("</Icon>");
out.println("<overlayXY x=\"0\" y=\"1\" xunits=\"fraction\" yunits=\"fraction\"/>");
out.println("<screenXY x=\"0\" y=\"1\" xunits=\"fraction\" yunits=\"fraction\"/>");
out.println("<rotationXY x=\"0\" y=\"0\" xunits=\"fraction\" yunits=\"fraction\"/>");
out.println("<size x=\"0.1\" y=\"0.1\" xunits=\"fraction\" yunits=\"fraction\"/>");
out.println("</ScreenOverlay>");
out.println("<name>Teste de Sistema</name>");
out.println("<description>Propriedades</description>");
String status = "";
for (Iterator iter = prcoll.iterator();iter.hasNext();){
PropriedadeVO holder = (PropriedadeVO)iter.next();
if ((holder.getLatitude()!=null && !holder.getLatitude().equals("")) &&
(holder.getLongitude()!=null && !holder.getLongitude().equals("")) ){
out.println("<Placemark>");
out.println("<Style>");
out.println("<IconStyle>");
out.println("<Icon>");
out.println("<href>http://maps.google.com/mapfiles/kml/pal4/icon55.png</href>");
out.println("</Icon>");
out.println("</IconStyle>");
out.println(" </Style>");
out.println("<name>"+holder.getIdPropriedade()+"</name>");
out.println("<description>");
out.println("<![CDATA[");
out.println("<b>Propriedade:</b> "+holder.getNome()+"<br/>");
out.println("<b>Latitude:</b> "+holder.getLatitudeDecimal()+"<br/>");
out.println("<b>Longitude:</b> "+holder.getLongitudeDecimal()+"<br/>");
out.println("]]>");
out.println("</description>");
out.println("<Point>");
out.println("<coordinates>"+"-"+holder.getLongitudeDecimal()+",-"+holder.getLatitudeDecimal()+"</coordinates>");
out.println("</Point>");
out.println("</Placemark>");
out.println("</Document>");
out.println("</kml>");
out.flush();
out.close();
}
}
Basicamente essa classe é um servlet que basicamente pega uma collection de propriedades e gera uma saída em xml.
Ps.: teria alguma outra forma de gerar esse arquivo xml de forma mais otimizada? O servidor tá botando a língua pra fora quando gera esse arquivo.