Atualmente estou desenvolvendo um sistema utilizando ADF Faces na IDE da Oracle JDeveloper 10.1.3.4 e passei por um problema interessante. Estava ocorrendo um problema na minha aplicação mas não era gerado nenhuma exception no console, onde após determinada ação da aplicação era impresso no console apenas:
15/01/2009 17:32:31 oracle.adf.controller.faces.lifecycle.FacesPageLifecycle addMessage
WARNING: JBO-29000: null
Mensagem muito interessante e muito, muito, muito explicativa, não acham?! 😀
Depois de muito pesquisar, acabei encontrando uma forma de exibir o que ocasionou o JBO-29000 e é bem simples de implementar. A idéia principal é sobrescrever o método addMessage da classe FacesPageLifecycle e utilizá-la como o novo ADFPhaseListener do projeto.
Primeiro vou extender a classe FacesPageLifecycle e sobrescrever o método addMessage para ter o novo comportamento (mostrar a exception):
package br.com.rodrigolazoti.view.adf;
import javax.faces.context.FacesContext;
import oracle.adf.controller.faces.lifecycle.FacesPageLifecycle;
import oracle.binding.AttributeBinding;
public class MyPageLifecycle extends FacesPageLifecycle {
protected void addMessage(FacesContext context, AttributeBinding binding, Throwable error) {
super.addMessage( context, binding, error );
//aqui mostro o erro no console, log4j ou onde preferir
error.printStackTrace();
}
}
Agora eu extendo a classe ADFPhaseListener e retorno a minha classe criada acima ao invés de retornar a FacesPageLifecycle padrão do ADF:
package br.com.rodrigolazoti.view.adf;
import oracle.adf.controller.faces.lifecycle.ADFPhaseListener;
import oracle.adf.controller.v2.lifecycle.PageLifecycle;
public class MyPhaseListener extends ADFPhaseListener {
protected PageLifecycle createPageLifecycle() {
return new MyPageLifecycle();
}
}
Agora basta substituir o ADFPhaseListener original pelo criado acima no arquivo de configuração do JSF (faces-config.xml):
<pre class="code"><lifecycle>
<phase -listener>br.com.rodrigolazoti.view.adf.MyPhaseListener</phase>
</lifecycle></pre>
Com isso foi fácil descobrir o motivo da mensagem e o que estava acontecendo de errado na aplicação.
Espero que tenham gostado.
Um abraço a todos e até o próximo artigo!
Não deixem de acessar meu blog http://www.rodrigolazoti.com.br.