Subreport iReport Bean como DataSource

Olá,

Sou novo no mundo da programação Java e estou tentando criar alguns relatórios com o Jasper Reports e o iReport. Já fiz algumas experiências, mas ainda não consegui o que queria.
Alguém teria um exemplo simples de relatório que utiliza um subreport no Detail Band e que este subreport utilize uma Lista de Beans como fonte de dados?
Segue o código que estava tentando utlizar, mas não funciona. O relatório é gerado com a parte do sub vazia.
Obrigado.

public class Exportador {

public static void main(String[] args) throws ExcecaoDeAgenda, ClassNotFoundException, SQLException, IOException , JRException{
	
	Connection Conexao=null;
	Statement Comando=null;
	Statement Comando_detahes=null;
	ResultSet Resultado=null;
	ResultSet detalhes=null;
	
	try
	{
		Class.forName ("oracle.jdbc.driver.OracleDriver");
	}
		catch(java.lang.ClassNotFoundException E)
	{
			ExcecaoDeAgenda.indique
			(ExcecaoDeAgenda.IMPOSSIVEL_CARREGAR_DRIVER);
	}
	try
	{

// Se o serviror for a propria maquina, IPSERVIDOR=127.0.0.1
// Normalmente, PORTA=1521
// A menos que tenha sido criada outra, INSTANCIA=orcl
Conexao = DriverManager.getConnection(“jdbc:oracle:thin:@mocho:1527:mocho9i1”,“sgtp”, “sstptst”);
}
catch(SQLException E)
{
ExcecaoDeAgenda.indique
(ExcecaoDeAgenda.IMPOSSIVEL_ESTABELECER_CONEXAO);
}
try
{
Comando =Conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Comando_detahes = Conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}
catch(SQLException E)
{
ExcecaoDeAgenda.indique
(ExcecaoDeAgenda.IMPOSSIVEL_CRIAR_COMANDO);
}
try
{
Resultado = Comando.executeQuery("select nomeholding from "+
“holding order by nomeholding desc”);
//segunda consulta
detalhes = Comando_detahes.executeQuery(“select c.desccodexc tiporeg,”+
“count(*) registros,”+
“sum(numcreditos) numcreditos,sum(numpulsos) numpulsos,”+
"sum(duracaocham) duracaocham "+
"from decompexterna d, codigoexclusao c "+
"where d.codcontestacao=c.codexclusao "+
“group by d.codcontestacao,c.codexclusao,c.desccodexc”);
}
catch (SQLException E)
{
ExcecaoDeAgenda.indique
(ExcecaoDeAgenda.IMPOSSIVEL_EXECUTAR_COMANDO);
}
try
{
Resultado.first ();
}
catch (SQLException E)
{
ExcecaoDeAgenda.indique
(ExcecaoDeAgenda.IMPOSSIVEL_POSICIONAR_EM_LINHA);
}
//exportador para PDF
JRExporter exporter;
//exportador para XLS
JRExporter exporterXLS;
//exportador para PDF
exporter = new JRPdfExporter();
//exportador para XLS
exporterXLS = new JRXlsExporter();
JasperPrint print;
OutputStream fos = null;
List beans = new ArrayList();
List beans_detalhes = new ArrayList();
Rel_geral rel_geral;
Detalhes detalhesBean ;
//MeuBean meuBean;
//preenche os beans para serem utilizados no relatório
rel_geral = new Rel_geral();
//preenche holding credora
String credora = Resultado.getString(“nomeholding”);
System.out.println(credora);
rel_geral.setCredora(Resultado.getString(“nomeholding”));
//pega proximo nome de holding
Resultado.next();
// //preenche holding devedora
String devedora = Resultado.getString(“nomeholding”);
System.out.println(devedora);
rel_geral.setDevedora(Resultado.getString(“nomeholding”));

	       while (detalhes.next()){
	       	detalhesBean = new Detalhes();
	       	//preenche
	       	String tiporeg = detalhes.getString("tiporeg");
			System.out.println(tiporeg);
			detalhesBean.setTiporegistro(detalhes.getString("tiporeg"));
			///preenche
			String numcreditos = detalhes.getString("numcreditos");
			System.out.println(numcreditos);
			detalhesBean.setCreditos(detalhes.getString("numcreditos"));
			//preenche
			String numpulsos = detalhes.getString("numpulsos");
			System.out.println(numpulsos);
			detalhesBean.setPulsos(detalhes.getString("numpulsos"));
			//preenche
			String duracaocham = detalhes.getString("duracaocham");
			System.out.println(duracaocham);
			detalhesBean.setMinutos(detalhes.getString("duracaocham"));

// preenche
String registros = detalhes.getString(“registros”);
System.out.println(registros);
detalhesBean.setRegistros(detalhes.getString(“registros”));
//insere na lista de beans
beans_detalhes.add(detalhesBean);
}
//beans.add(meuBean);
beans.add(rel_geral);

		//cria Jasper Report Source do Master
		JRDataSource jrds = new  
                         JRBeanArrayDataSource(beans.toArray()); 
		//cria Jasper Report Source do detalhe
		JRDataSource jrds_detalhe = new  
                         JRBeanArrayDataSource(beans_detalhes.toArray()); 
		try{
			
			//compila o XML para o Jasper do detalhe
			JasperCompileManager.compileReportToFile(
					"D:/jasper/layouts_excel/detalhes.jrxml", 
					"D:/jasper/layouts_excel/detalhes.jasper");
			//compila o XML para o Jasper do master
			JasperCompileManager.compileReportToFile(
					"D:/jasper/layouts_excel/contestacao_DETUP.jrxml", 
					"D:/jasper/layouts_excel/contestacao_DETUP.jasper");

// Preenche o Relatorio
print = JasperFillManager.fillReport(
“D:/jasper/layouts_excel/detalhes.jasper”,
null,
jrds_detalhe);
//Preenche o Relatorio
print = JasperFillManager.fillReport(
“D:/jasper/layouts_excel/contestacao_DETUP.jasper”,
null,
jrds);
//Exporta o Relatorio para PDF
fos = new FileOutputStream(“D:/jasper/layouts_excel/contestacao_DETUP.pdf”);
exporter.setParameter(
JRExporterParameter.OUTPUT_STREAM,fos);
exporter.setParameter(
JRExporterParameter.JASPER_PRINT,print);
exporter.exportReport();
fos.close();
//Exporta o Relatorio para XLS
fos = new FileOutputStream(“D:/jasper/layouts_excel/contestacao_DETUP.xls”);
exporterXLS.setParameter(
JRExporterParameter.OUTPUT_STREAM,fos);
exporterXLS.setParameter(
JRExporterParameter.JASPER_PRINT,print);
exporterXLS.exportReport();
fos.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(fos!=null)fos.close();
}catch(Exception e){}
}
}
}