Pessoal, estou com problemas de perfomace, com diz o titulo, na geracao de um relatorio. Seguinte, no Ireports, quando eu ponho para gerar o relatorio pela ferramenta ele nao demora mais do que 2-5 segundos, na minha aplicacao java ele jah demora BEM MAIS para gerar o relatorio e quando eu coloco a aplicacao para acessar o banco usando o driver RMI, demora mais ainda ao ponto de expirar e nao mostrar o relatorio. Por enquanto o banco e a aplicacao estao na minha maquina, to usando o RMI meramente para efeitos de teste, porque futuramente a aplicacao vai estar numa maquina e o banco em outra.
No fim das contas queria algumas dicas para melhorar a perfomace da aplicacao. O select eh meio pesado porque ele usa alguns LIKEs. Se alguem tiver alguma dica de como mudar o select ou alguma coisa no codigo eu agradeco … ou alguma maneira diferente de fazer o que eu estou fazendo sem usar LIKE por exemplo … qualquer dica eu agradeco.
primeiro, vamos ao select de um dos relatorios … acredito que esse seja o segundo relatorio mais pesado da aplicacao, soh sao 2 relatorios realmente pesados. esses parametros do relatorio que ta usando para fazer comparacao estao vindo de inputs texto de uma pagina WEB.
[code]SELECT
SIS.“Nome da Aplicação” AS NOMEAPLICACAO ,
SIS.“Descrição Sucinta” AS DSCSUCINTA ,
ORG.SIGLA AS SIGLAORGAO ,
BAN.banco AS BANCO ,
LIN.linguagem AS LINGUAGEM ,
PLA.plataforma AS PLATAFORMA ,
TIP.tipo AS TIPO ,
STA.status AS STATUS ,
SIS.Observacao AS OBSERVACAO ,
SIS.ceder AS CEDER
FROM
SISTEMAS AS SIS ,
banco AS BAN ,
linguagem AS LIN ,
Tipo AS TIP ,
orgao AS ORG ,
plataforma AS PLA ,
status AS STA
WHERE
SIS.isn_orgao = ORG.isn_orgao AND
SIS.isn_Tipo = TIP.isn_Tipo AND
SIS.isn_plataforma = PLA.isn_plataforma AND
SIS.isn_banco = BAN.isn_banco AND
SIS.isn_linguagem = LIN.isn_linguagem AND
SIS.isn_status = STA.isn_status AND
UCASE(SIS.“Nome da Aplicação”) LIKE UCASE($P{PARAMETRONOMEAPLICACAO}) AND
UCASE(SIS.“Descrição Sucinta”) LIKE UCASE($P{PARAMETRODSCSUCINTA}) AND
UCASE(ORG.SIGLA) LIKE UCASE($P{PARAMETROORGAO}) AND
UCASE(BAN.banco) LIKE UCASE($P{PARAMETROBANCO}) AND
UCASE(LIN.linguagem) LIKE UCASE($P{PARAMETROLINGUAGEM}) AND
UCASE(PLA.plataforma) LIKE UCASE($P{PARAMETROPLATAFORMA}) AND
UCASE(TIP.tipo) LIKE UCASE($P{PARAMETROTIPO}) AND
UCASE(STA.status) LIKE UCASE($P{PARAMETROSTATUS})
ORDER BY
SIS.“Nome da Aplicação”[/code]
vamos as classes agora:
[code]public class ConnectionFactory {
public static Connection getConnectionAccess() {
try {
Class.forName(BancoAccess.getForNameAccess());
return DriverManager.getConnection(BancoAccess.getDriverAccess());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static Connection getConnectionAccessRmi() {
try {
Class.forName(BancoAccessRmi.getForNameAccessRmi()).newInstance();
return DriverManager.getConnection(BancoAccessRmi.getDriverAccessRmi(),
BancoAccessRmi.getDbUserAccessRmi(),
BancoAccessRmi.getDbPassAccessRmi());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}[/code]
[code]public class DAO {
protected Connection connection;
public Connection getConnection() {
return connection;
}
public void connectionClose () {
try {
this.connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}[/code]
[code]public class AccessRmiDAO extends DAO{
public AccessRmiDAO() {
this.connection = ConnectionFactory.getConnectionAccessRmi();
}
}[/code]
[code]public class RelatorioCatalogoSistemas extends HttpServlet{
private static final long serialVersionUID = -433379001619945275L;
@SuppressWarnings("unchecked")
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
JasperReport jasperReport = null;
byte[] pdfRelatorioCatalogoSistemas = null;
String sep = File.separator;
AccessRmiDAO dao = new AccessRmiDAO();
String pathJasper = getServletContext().getRealPath(
"/content/reports/") + sep;
String pathImages = getServletContext().getRealPath(
"/content/images/") + sep;
//String path = getServletContext().getRealPath("/");
Map parametros = new HashMap();
parametros.put("IMAGES_URI" , pathImages);
parametros.put("PARAMETRONOMEAPLICACAO" , "%" + req.getParameter("nomeAplicacao") + "%");
parametros.put("PARAMETRODSCSUCINTA" , "%" + req.getParameter("descricaoSucinta") + "%");
parametros.put("PARAMETROORGAO" , "%" + req.getParameter("orgao") + "%");
parametros.put("PARAMETROBANCO" , "%" + req.getParameter("banco") + "%");
parametros.put("PARAMETROLINGUAGEM" , "%" + req.getParameter("linguagem") + "%");
parametros.put("PARAMETROPLATAFORMA" , "%" + req.getParameter("plataforma") + "%");
parametros.put("PARAMETROTIPO" , "%" + req.getParameter("tipo") + "%");
parametros.put("PARAMETROSTATUS" , "%" + req.getParameter("status") + "%");
try {
jasperReport = (JasperReport) JRLoader.loadObject(pathJasper+"RelatorioCatalogoSistema.jasper");
pdfRelatorioCatalogoSistemas = JasperRunManager.runReportToPdf(jasperReport, parametros, dao.getConnection());
} catch (JRException e1) {
e1.printStackTrace();
}
System.out.println("CaminhoJasper: " + pathJasper);
System.out.println("JasperReport : " + jasperReport);
System.out.println("Parametros : " + parametros);
System.out.println("Pdf : " + pdfRelatorioCatalogoSistemas);
//Parametros para nao fazer cache e o que será exibido..
res.setContentType("application/pdf");
res.setHeader("Cache-Control", "no-store");
res.setHeader("Pragma", "no-cache");
res.setDateHeader("Expires", 0);
//Envia para o navegador o pdf..
ServletOutputStream servletOutputStream = res.getOutputStream();
servletOutputStream.write(pdfRelatorioCatalogoSistemas);
servletOutputStream.flush();
servletOutputStream.close();
dao.connectionClose();
}
}[/code]
e aqui o jsp com o formulario, eh soh um teste, bem simples, pretendo, logico, mudar ele depois
[code]<%@ page language=“java”
pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<title>Catálogo de Sistemas em Órdem Alfabética</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="description" content="Catálogo de Sistemas">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<p>Catálogo de Sistemas</p>
<form action="<%=path%>/Relatorio/RelCatalogoSistemas" method="post">
<table border="0">
<tr>
<td>Nome Aplicação: <br /></td>
<td><input type="text" name="nomeAplicacao"></td>
</tr>
<tr>
<td>Descrição Sucinta: <br /></td>
<td><input type="text" name="descricaoSucinta"></td>
</tr>
<tr>
<td>Órgão: <br /></td>
<td>
<input type="text" name="orgao">
</td>
</tr>
<tr>
<td>Banco: <br /></td>
<td>
<input type="text" name="banco">
</td>
</tr>
<tr>
<td>Linguagem: <br /></td>
<td>
<input type="text" name="linguagem">
</td>
</tr>
<tr>
<td>Plataforma: <br /></td>
<td>
<input type="text" name="plataforma">
</td>
</tr>
<tr>
<td>Tipo: <br /></td>
<td><input type="text" name="tipo"></td>
</tr>
<tr>
<td>Status: <br /></td>
<td><input type="text" name="status"></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
[/code]
[]'s
edit
Esqueci de mencionar processador e memoria da maquina que to usando para desenvolvimento. É um pentium 4 3.0 GHz usando windows xp sp2.