destruktor
no todo puede ser buenas noticias, al momento de que realizo mi reporte, me marca la siguiente exception java.lang.OutOfMemoryError.
Me imagino que es por el numero de registros que encuentra.
Lo genera bien en pdf , rtf , html y xls
Realiza un reporte en XLS Excel, me lo muestra cuando son menos de 1000 registros, pero cuando son 3000 reg. me marca el error que les comento.
El reporte debe estar en una sola pagina de excel sin realizar paginacion
Mi codigo es   
 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
                IObjectPersisterService service = (IObjectPersisterService) ServiceLocator.getInstance().getService(IObjectPer  sisterService.class); 
                service.open();
                 Session session = service.getSession(); 
              if (form != null){
                InformeAlumnoForm alForm = (InformeAlumnoForm) form;
                UserView uv = (UserView) request.getSession().getAttribute("USUARIO"); 
                String reportType = alForm.getTipo();
                String informeAlumno = alForm.getNombre();
                String centro = alForm.getCentro();
                String curso = alForm.getCurso();
                try {
                    //cargar los parametros para el reporte
                    HashMap reportParams = new HashMap();
                    reportParams.put("User", uv.getNombre() + " " + uv.getApellidos());
                    String criterio = "";
                    if (centro.equals("")){
                        centro = "Todos los centros";
                    }else {//Selecciona un solo centro
                        criterio = "co.codigo = '" + centro + "' and ";
                    } 
                    reportParams.put("Centro", centro);
                    ItemView iv= new ItemView(); 
                    String info ="";
                    String query;
                    if (informeAlumno.equals("AluCentro")){
                        iv.setId("AluCentro");
                        iv.setDescripcion("Alumnos por Centro");
                        info = "Alumnos por Centro";
                        query="select co.codigo as codcentro, co.nombre as nombrecentro, co.direccion as direccioncentro, al.dni as dni, aludata.nombre as nombrealu, aludata.apellidos as apellidosalu, aludata.fanacimiento as fnacimientoalu, aludata.domicilio as domicilioalu, aludata.provincia as provinciaalu, aludata.cp as cpalu, aludata.sexo as sexoalu  from centroocupacional co, alumno al, datosalumno aludata where " +  criterio + " co.codigo = al.codigocentro and al.dni = aludata.dni order by co.codigo, aludata.dni";
                    }else if (informeAlumno.equals("EdicionCurso")){
                        iv.setId("EdicionCurso");
                        iv.setDescripcion("Ediciones de Cursos por Centro");
                        info = "Ediciones de Cursos por Centro";
                        query="SELECT   cur.codigo AS codcurso, cur.nombre AS nombrecurso,         edi.codigo AS codedicion, edi.finicio AS fechainiedi,         edi.ffin AS fechafinedi, edi.alumnosi AS aluiniedi,         edi.alumnosf AS alufinedi    FROM curso cur,         edicionescurso edi,         centroocupacional co   WHERE " + criterio + "cur.codigo = edi.codigocurso        AND edi.codigocentro = co.codigo    " +
                        		"GROUP BY edi.codigo,         cur.codigo,         cur.nombre,         edi.finicio,         edi.ffin,         edi.alumnosi,         edi.alumnosf ";
                    } else { //if (informeAlumno.equals("AluEdiciones"))
                         iv.setId("AluEdiciones");
                         iv.setDescripcion("Alumnos de Ediciones");
                         info = "Alumnos de Ediciones";
                         query="SELECT cur.codigo AS codcurso,  cur.nombre AS nombrecurso,  edi.codigo AS codedicion,   edi.finicio AS fechainiedi,  edi.ffin AS fechafinedi,  edi.alumnosi AS aluiniedi,  edi.alumnosf AS alufinedi,  alu.dni AS dni,  aludata.nombre AS nombrealu,  aludata.apellidos AS apellidosalu, aludata.fanacimiento AS fnacimientoalu,  aludata.domicilio AS domicilioalu,  aludata.provincia AS provinciaalu FROM curso cur,  edicionescurso edi,  alumnosporcurso aluxcur,  alumno alu,  datosalumno aludata,  centroocupacional co  where " + criterio + "cur.codigo = edi.codigocurso AND alu.dni = aluxcur.codigoalumno AND aluxcur.codigoediciones = edi.codigo AND alu.codigocentro = edi.codigocentro AND alu.dni = aludata.dni AND edi.codigocentro = co.codigo " +
                         		"GROUP BY cur.codigo,  cur.nombre,  edi.codigo,  edi.finicio,  edi.ffin,  edi.alumnosi,  edi.alumnosf,  alu.dni,  aludata.nombre,  aludata.apellidos,  aludata.fanacimiento,  aludata.domicilio,  aludata.provincia ";
                    }
                    reportParams.put("Info", info);
                    reportParams.put("Query", query);  
                    String path = super.getPathReportes(); 
                    //Create Datasource 
                    String inputXML = path + informeAlumno + ".xml";
                    reportParams.put("Path", path);
                    logger.debug("query"+query);
                    logger.debug("query"+query);
                    logger.debug("Type"+reportType);  
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    CreateReport aStreamReport = new CreateReport(inputXML, reportType, byteArrayOutputStream, reportParams, session.connection());  
                   sendData(response,byteArrayOutputStream,"ReporteAl  umnos." + reportType.toLowerCase());  
                } catch (Exception e) {
                    e.printStackTrace();
                } 
              }
              return mapping.findForward("showReport"); 
    }