iReport - Exemplo java magazine

Lista,

Estou aprendendo sobre ireport/jasperreports e segui um exemplo que veio na javamagazine. Porém tenho uma dúvida:

Caso eu queira, no servlet abaixo, passar a query do subrelatório como parâmento, é possível? Se sim, como fazer, pois sinceramente não estou conseguindo.

Ou será que preciso desenvolver formularios diferentes para cada query? Como vcs fazem?

Muito obrigado,

Marques

package br.com.globalcode.servlet;

import br.com.globalcode.exception.GlobalcodeException;
import br.com.globalcode.locator.ServiceLocator;
import java.io.IOException;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;

public class GeraRelatorioPedidos extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException  {

        // obtém a conexão com o banco de dados
        Connection conn = null;
        try {
            conn = ServiceLocator.getInstance().getConnection();
        } catch (GlobalcodeException ex) {
            ex.printStackTrace();
        }
        
        // gera o relatório
        ServletContext context = getServletContext();
        byte[] bytes = null;
        try {
            // carrega os arquivos jasper
            JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(
                    context.getRealPath("/WEB-INF/reports/RelatorioPedidos.jasper"));
            JasperReport subrelatorioJasper = (JasperReport)JRLoader.loadObject(
                    context.getRealPath("/WEB-INF/reports/RelatorioItens.jasper"));
            // parâmetros, se houverem
            Map parametros = new HashMap();
            parametros.put("pageRoot", context.getRealPath("/"));
            parametros.put("subReport", subrelatorioJasper);
            // direciona a saída do relatório para um stream
            bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conn);
        } catch (JRException e) {
            e.printStackTrace();
        }
        if (bytes != null && bytes.length > 0) {
            // envia o relatório em formato PDF para o browser
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream ouputStream = response.getOutputStream();
            ouputStream.write(bytes, 0, bytes.length);
            ouputStream.flush();
            ouputStream.close();
        }
        
    }
    
}
parametros.put("p_sql", "select * from dual");

no relatório crie o parâmetro e vá até a aconsulta e deixe-a assim

$P!{p_sql}

Também pode criar um resultset ou array de beans ou maps na tua aplicação e enviar para o report, neste caso o report não teria uma query embutida, e tu poderia montar os teus dados como quiser.