Pessoal,
Eu estava com um problema em um sistema que já durava uma semana, e eu não conseguia resolver por nada. Foi o seguinte: estou desenvolvendo um sistema usando Struts 2 e Hibernate, acessando bases de dados MySQL. Durante todo o projeto (cadastros e transações) tudo correu perfeitamente bem e até me assustei com a velocidade que o projeto ficou pronto (pouco menos de um mês).
Mas aí, quando eu fui fazer os relatórios, começou a novela! Como estou trabalhando sempre com collections e já tenho vários métodos prontos que trabalham dessa forma, resolvi então, fazer meus relatórios baseados nesses collection. Pesquisando, vi que o JasperReport permite que relatórios sejam preenchidos através de collections, então pensei: “perfeito! Trabalho quase zero!”.
Baixei o iReport e depois de ler um pouco a documentação, cai dentro, e configurei uma fonte de dados do tipo JavaBean Set DataSource, e apontei para a minha classe provedora (do collection), e o método responsável por carrega-lo.
Depois disso, criei o JAR da minha aplicação, adicionei esse JAR ao class-path do iReport (através do menu FERRAMENTAS/OPÇÕES/CLASSPATH) e finalmente, “desenhei” um relatório, carreguei a classe bean, para que o iReport pudesse encontrar seus atributos, coloquei alguns deles no desenho do relatório, compilei, e quando fui dar o preview (ainda dentro do ambiente do iReport, botão PREVIEW):
[size=18]No suitable driver found for jdbc:mysql://localhost:3306/clinicware[/size]
Aí pensei comigo: “Ah! É só colocar o JAR do MySQL no classpath do iReport!” - e assim o fiz. E o erro continuou!
Aí pensei de novo: “Ah! Então é só colocar o JAR do MySQL dentro do diretório LIB da minha aplicação!” - assim o fiz. E o erro continou!
Aí pensei novamente: “Ah! Provavelmente o arquivo MANIEST.MF não está com o class-path configurado certinho! Vou edita-lo na mão para adicionar o JAR do MySQL, “recompilar” o JAR e pronto!” - e assim o fiz! E não funcionou de novo!!!
Numa ultima entantiva desesperada, alterei a variável de ambiente CLASSPATH, e adicionei a localização do JAR do MySQL. E também não funcionou!
Daí comecei minha busca pela internet, quando achei um gringo com o mesmo problema que eu, e ele disse que resolveu o problema colocando o JAR do PostGREE (o banco que ele estava usando) no diretório JRE\LIB\EXT no diretório do JDK.
Desacreditado, eu fiz, e: FUNCIONOU!
Agora, pergunto: o que há de especial neste diretório, pq sinceramente, eu sempre achei que o classpath fosse “autoridade” na hora de procurar por arquivos JAR. Pelo visto, em alguns casos, ele procura nesse EXT aí. Será que seria uma caracterrística unica e exclusiva do PREVIEW do iReport? De repente, os caras que programaram aquele ambiente, quiserem em alguns casos, ignorar o classpath e procurar diretamente nesse EXT. Será isso?
Enfim, eu gostaria de entender o porquê disso, pois detesto fazer as coisas assim, na “orelhada”.
Valeu!
PS: desculpem pelo POST gigante, mas é que eu gosto de explicar tudo, pq provavelmente alguém aqui ainda vai ter esse tipo de problema!