[Resolvido] iReport - JRBeanCollectionDataSource e JPA

2 respostas
E

Olá, pessoal

Tenho trabalhado num relatório Jasper em que a fonte de dados (DataSource) é um coleção Java, especificamente uma lista (List) carregada no código por um objeto JRBeanCollectionDataSource. Essa lista é gerada a partir de um método que faz uma consulta no banco de dados (utilizo JPA/Hibernate + MySQL), como exemplificado no código abaixo:

public Class DataSource{

//definicoes da classe

public static List<MeuObjeto> constructDataSource() throws Exception{
                        List<MeuObjeto> dataSource = new ArrayList<MeuObjeto>();
                        MeuObjeto meuObjeto = utilitarioJPA.getObjetoPorId(10);
                        dataSource.add(meuObjeto);

                        return dataSource;
}
}

O problema está na confecção do relatório no iReport: eu tentei criar uma nova DataSource, utilizando um JavaBean com o método estático acima que deve retornar a coleção. Mas sempre que eu tento testar a conexão o iReport acusa o seguinte erro:

NoClassDefFoundError!!
Check your classpath!
Could not initialize class dataSource.DataSource!!

Antes, mostra um erro semelhante só que com JPA. Já coloquei o .jar do projeto que contém o JavaBean e da biblioteca toplink-essentials.jar no CLASSPATH do iReport, mas não surtiu efeito.

Alguma sugestão?

2 Respostas

E

Eu consegui resolver a questão do ClassNotFound com algumas configurações no CLASSPATH do iReport. Entretanto, agora tenho um outro problema: quando tento criar o JavaBeans set datasource, o resultado retornado é null. O método estático usado para fornecer a coleção ao data source é semelhante a este:

public static List<MyObject> getDataSourceCollection{

return databaseUtility.listAllObjects();

}

Esse método utiliza JPA para fazer uma consulta no banco e retornar a lista de objetos que eu preciso para preencher o relatório.

Agora se eu fizer o método como em todos os tutoriais que encontrei, o data source é criado tranquilamente:

public static List<DadoMunicipio> getAnotherDataSource(){
                List<DadoMunicipio> aList = new ArrayList<DadoMunicipio>();

                DadoMunicipio dado1 = new DadoMunicipio("Populacao total", 48484884);
                DadoMunicipio dado2 = new DadoMunicipio("Populacao Rural", 3535353);
                DadoMunicipio dado3 = new DadoMunicipio("Populacao Urbana", 3535353);

                aList.add(dado1);
                aList.add(dado2);
                aList.add(dado3);

                return aList;
 }

Então a questão está justamente na consulta ao banco. O problema é que esse é único meio que tenho para buscar os dados do relatório. Alguém teria alguma sugestão?

E

Eu consegui dar prosseguimento ao desenho do relatório no iReport utilizando, como datasource, uma coleção simples, estática, que não faz conexão com o banco para obter os objetos.

Já no código Java, para gerar o relatório final, eu uso o JasperReports para preencher a coleção, com objetos advindos do banco de dados.

Criado 29 de julho de 2010
Ultima resposta 2 de ago. de 2010
Respostas 2
Participantes 1