Problema de performace - Relatorio(jasper) acessando banco Access usando RMI

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&ccedil;&atilde;o: <br /></td>
      			<td><input type="text" name="nomeAplicacao"></td>
    		</tr>
    		<tr>
      			<td>Descri&ccedil;&atilde;o Sucinta: <br /></td>
      			<td><input type="text" name="descricaoSucinta"></td>
    		</tr>
    		<tr>
      			<td>&Oacute;rg&atilde;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.

Alguem pode passar uma pagina boa explicando a sintaxe do banco Access?? Queria fazer uma mudanca na query e nao sei como ou se da para fazer isso.

Colocar uma condicao antes de cada like, para esse soh fazer o like se o parametro nao for nulo. Tem como fazer isso? Como?