O mistério do diretório EXT

2 respostas
VictorAJ

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!

2 Respostas

E

O diretório “jre/lib/ext” é um diretório onde você pode pôr qualquer JAR que deva ser incluído por todas as aplicações que rodam em uma determinada JVM. Como você deve ter visto, normalmente ele só é usado para “JCE Providers” (como é o caso dos arquivos sunjce_provider.jar, sunmscapi.jar e sunpkcs11.jar) mas nada impede de você pôr drivers de bancos de dados, por exemplo. O único problema, nesse caso, é que todas as aplicações que rodam nessa JVM terão de usar essa tal versão que você pôs no jre\lib\ext; elas não podem sobrepôr com uma outra versão.

C:\>dir c:\jdk1.6.0\jre\lib\ext
 Volume in drive C is C
 Volume Serial Number is C0F8-417D

 Directory of c:\jdk1.6.0\jre\lib\ext

18/01/2010  09:46    <DIR>          .
18/01/2010  09:46    <DIR>          ..
18/01/2010  09:46             8.239 dnsns.jar
18/01/2010  09:46           841.696 localedata.jar
18/01/2010  09:46               521 meta-index
18/01/2010  09:46           170.239 sunjce_provider.jar
18/01/2010  09:46            33.668 sunmscapi.jar
18/01/2010  09:46           230.608 sunpkcs11.jar
               6 File(s)      1.284.971 bytes
               2 Dir(s)  23.330.553.856 bytes free
VictorAJ

Entendi o propósito deste diretório.

Agora, pq o iReport só reconhece o driver do banco MySQL quando este está no diretório EXT ??? Pq ele não reconhece quando o mesmo está no CLASSPATH? Seria um bug?

Criado 26 de janeiro de 2010
Ultima resposta 26 de jan. de 2010
Respostas 2
Participantes 2