terça-feira, 3 de fevereiro de 2009

Netbeans 6.5: Pequenos contratempos II

Mais um problema para a lista de pequenas adaptações para poder fazer uso dessa fenomenal ferramenta! A versão do meu JDK é a 1.6.0_03 mas a minha JRE é 1.6.0_11 e eu uso o Ireport, versão 3.1.2, para desenvolver os relatórios da minha aplicação. Novamente estava tudo funcionando bem até o momento em que instalei o Netbeans 6.5. Os relatórios simplesmente não compilavam mais e não geravam nem o preview. Foi meio angustiante perceber que dos relatórios mais simples aos mais complexos, nenhum deles funcionava mais.

Depois de muita pesquisa na net e já quase acreditando que ninguém estaria enfrentando ou já teria enfretado o mesmo problema, descobri que este estava relacionado a ausência do pacote xercesImpl.jar na lista de extensões do JRE. O erro que ocorria era:

javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found

Existe uma cópia atualizada desse pacote na subpasta ext dentro NETBEANS_HOME. Então para resolver o problema foi só copiar o arquivo xercesImpl.jar da pasta:$NETBEANS_HOME\ireport\modules\ext para a pasta: $JDK_HOME\jre\lib\ext. Pronto! Netbeans 6.5 definitivamente – outra vez - funcionando!

segunda-feira, 2 de fevereiro de 2009

Netbeans 6.5: Pequenos contratempos I

Estava me lembrando de uma expressão bem popular que citava que "a curiosidade matou o gato!". E o que dizer da ansiosidade? E aquela desejo, bem leve, que alguns tem de dirigir algum lançamento de uma grande industria de automóvel ou mesmo de motos? Imagine a qualidade da massagem cerebral quando você ouve a companhia tocar e chegando lá descobre que é a transportadora entregando aquela maravilhosa TV de plasma de 40 e tantas polegadas que você comprou na internet! Ou até mesmo ficar aguardando chegar o novo e ultra moderno notebook adquirido também na internet!

Você deve está se perguntando qual a conexão dessas frases, aparentemente perdidas, com a expressão logo acima, no início desse pequeno artigo. Pois bem, na verdade isso tudo é justamente uma tentativa de frisar o quanto o que é novo nos comove e envolve. E nos faz tomar decisões precipitadas!

Explicando melhor e tecnicamente: Eu estava envolvido em alguns projetos Java SE utilizando o Netbeans 5.5. Resisti verdadeiramente ao surgimento das versões 6.0, 6.1 e outras milestones até que for fim foi lançado a versão 6.5 do Netbeans. Instalei, fiz alguns testes e resolvi utilizá-la. Algumas semanas foram se passando e eu me sentia cada vez mais confiante até que resolvi trabalhar apenas com essa versão nova. Equivocadamente resolvi também desinstalar o 5.5.

Em um desses projetos Java SE eu utilizo a JPA através da implementação da Oracle, o TopLink. Ocorre que algumas pesquisas mais complexas que trabalhavam com coleções e subcoleções não estavam funcionando. Como as nossas janelas de pesquisa oferecem diversas opções de filtro, eu não fui capaz de testar tudo. O meu cliente testou!

Em relação ao relacionamento dos POJO's, eu tinha a seguinte situação:

@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable {
...
@OneToMany(mappedBy="codPes", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List fone;
...
}

@Entity
@Table(name = "fone")
public class Fone implements Serializable {
...
@OneToMany(mappedBy="numSeqFone", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List foneContato;

@JoinColumn(name = "COD_PESSOA", referencedColumnName = "COD_PESSOA")
@ManyToOne
private Pessoa codPes;
...
}

@Entity
@Table(name = "fone_contato")
public class FoneContato implements Serializable {
...
@JoinColumn(name = "NUM_SEQ_FONE", referencedColumnName = "NUM_SEQ")
@ManyToOne
private Fone numSeqFone;
...
}


Eu citei os POJO's Pessoa, Fone e FoneContato exatamente porque era uma pesquisa feita em seus dados que estava gerando o erro abaixo:

...
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager at oracle.toplink....cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:209)
...
Error compiling the query [SELECT DISTINCT p FROM Pessoa p WHERE (EXISTS(SELECT f FROM p.fone f WHERE f.fone = :fone) or EXISTS(SELECT fc FROM p.fone fc WHERE fc.foneContato.fone = :fone))], line 1, column 136: invalid navigation expression [fc.foneContato.fone], cannot navigate collection valued association field [foneContato].
...

A versão do TopLink que vem no Netbeans 6.5 era a 2.0.1 (Build b09d-fcs (12/06/2007)), enquanto que no Netbeans 5.5 era a 2006.8 (Build 060830).

Então, com o TopLink 2.0.1 qualquer pesquisa em tipos coleções de POJO's – List - gerava o erro: cannot navigate collection valued association field. Tentei inclusive baixar a última versão dessa biblioteca direto no site da Oracle (versão 2 e build 31) e o problema persistia. Não teve jeito, para resolver definitivamente o problema, eu tive que remover as bibliotecas originais do TopLink, que eram instaladas no NetBeans 6.5, e instalar a versão que vinha junto com o 5.5. Nesse caso, eu tive que reinstalar o Netbeans 5.5 novamente para conseguir copiar a versão anterior do TopLink. Mas, como reconfigurar bibliotecas e tantas outras coisas no Netbeans é muito fácil, no final deu tudo certo. Netbeans 6.5 definitivamente funcionando!

Pois é, a curiosidade e a ansiosidade em usar a última versão do Netbeans me trouxe esses contratempos que me tomaram algum tempo para saná-los.