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.

Nenhum comentário:

Postar um comentário