quinta-feira, 17 de março de 2011

Acessando Dados e Métodos

O código é auto explicativo!!

01: FacesContext ctx = FacesContext. getCurrentInstance() ;
02: ELContext ectx =ctx. getELContext() ;
03: Application app = ctx. getApplication( ) ;
04: ExpressionFactory factory = app. getExpressionFactory() ;
05: ValueExpression ve =
factory. createValueExpression(ectx,
"#{ bindings. DepartmentName. inputValue} ",
java. lang. String) ;
06: String dname = ve. getValue( ectx) ;

Linha 01 ■ Obter o objeto FacesContext.
Linha 02 ■ Obter ELContext (JSF), necessário para resolver a EL.
Linha 03 ■ Obter a referencia do objeto Application do JSF necessário para localização do factory EL Resolver.
Linha 04 ■ Exibe o objeto Application sendo usado para obter a factory corrente.
ExpressionFactory
Linha 05 ■ Se faz uso da ExpressionFactory para fazer o parse da EL String #{ bindings
. DepartmentName. inputValue} para um objeto do tipo ValueExpression. Perceba que a classe esperada para a expressão ser resolvida é passada para o método. A Fábrica tenta forçar o valor para o seu tipo e irá lançar uma exceção (javax. faces. el. EvaluationException) se não for capaz de fazer essa conversão. Se esse argumento é setado para null, então o valor que irá ser retornado será um POJO.
Linha 06 ■ o método getValue() é chamado na ValueExpression recuperando o valor atual. Esse objeto também suporta o método getType() caso você necessite checar o tipo ou a classe do seu payload.

Diferenças entre getRowCount e getEstimatedRowCount

Em uma aplicação ADF, quando usamos um VO com uma quantidade significativa de dados, é bem ruim pra performance da app o uso da instrução getRowCount para achar o número de linhas daquele VO. A razão é que o VO faz uma ida ao banco toda vez que o instrução é chamada.

Já a instrução getEstimatedRowCount é mais inteligente. Em sua primeira execução, ela faz a consulta usando select * from tabela e guarda a contagem de linhas. Depois disso, apenas faz ajustes em função de adições novas, ou exclusões de linhas executadas no VO.

Desse modo evita idas consecutivas ao banco tornando a app mais rápida. O ponto negativo é que o método pode não ser tão assertivo em algumas vezes. Principalmente quando temos aplicações que "compartilham" a base de dados, fazendo inserções e deleções.

There is no free lunch...

Erro de Socket no WLS

Erro de Compatibilidade do Fuso

Erro: "oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.sql.SQLDataException, msg=ORA-01882: timezone region not found"

Solução: Project Properties-> run/debug/profile => -Duser.timezone="-03:00"

WIKI

Resolvi criar esse blog para ajudar a documentar algumas issues encontradas enquanto desenvolvo um projeto para um cliente usando as tecnologias mais recentes da Oracle, especificamente, ADF.

Esse é o primeiro post, obviamente, apenas para testar e ver se o mesmo está no ar corretamente. Os próximos serão resultados das pesquisas e desenvolvimentos na ferramenta.