BT
x Por favor preencha a pesquisa do InfoQ !

Java EE 7 e suas melhorias na Linguagem de Expressões

por Dan Woods , traduzido por Rafael Brito em 30 Jul 2013 |

Dentro do arsenal de melhorias que vem com o Java EE 7, está uma revisão do API de da Linguagem de Expressões do Java, conhecida como Expression Language 3.

Especificada pela JSR-341, a coleção de melhorias para a API da EL inclui suporte a expressões lambda, atributos estáticos e acessos a métodos, assim como melhorias em processamento de coleções, e um modo de processamento autônomo (standalone).

Antes do Java EE 7, a Java Expression Language era um componente fortemente acoplado às APIs JSF e JSP. A JSR-341, entretanto, introduz a Java Expression Language como entidade distinta, desacoplada das APIs da camada de view do Java EE (embora permaneça interoperável com essa camada).

A API de EL agora oferece a possibilidade de invocar a EL de forma ad-hoc. Pode-se criar uma instância da nova classe ELProcessor e invocar seu método eval(). É passada uma String com o script a ser avaliado, e retornado o resultado que poderá ser usado como variável no escopo da aplicação Java.

ELProcessor el = new ELProcessor();
assert ((Integer)el.eval("a = [1, 2, 3]; a[1]")) == 2;

Além do modo autônomo, a JSR-341 traz aos desenvolvedores Java EE a possibilidade de escrever expressões lambda. Expressões lambda estão previstas para a próxima versão do Java, mas já se pode utilizar a sintaxe em scripts. Na última conferência do JavaOne, Kin-man Chung, líder da especificação da JSR-341 observou que o grupo de peritos da especificação foram consultados várias vezes pelos desenvolvedores do Projeto Lambda no Java 8. O objetivo foi garantir uma API comum e futura interoperabilidade entre a Java EL e o Java 8.

ELProcessor el = new ELProcessor();
assert ((Integer)(el.eval("((x,y) -> x+y)(4, 5)"))) == 9;

Para trabalhar com coleções, a nova API de streams da Java EL inclui operadores como forEach, reduce, filter, e map. Muitas das funcionalidades e conceitos introduzidos no processamento de coleções da EL estão também agendados para inclusão no Java 8. Mas por ora, os desenvolvedores podem ser beneficiar do mecanismo de streams lazy e eager e de expressões lambda como parte das melhorias trazidas pela JSR-341.

ELProcessor el = new ELProcessor();
List list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
    list.add(i);
}
el.defineBean("list", list);
List processedList = (List)el.eval("list.stream().filter( x -> x <= 3).map(x -> x * 5).toList()");
assert processedList.get(0) == list.get(0);
assert processedList.get(1) == list.get(5);
assert processedList.get(2) == list.get(10);
assert processedList.get(3) == list.get(15);

Outra novidade há muito esperada é o aperfeiçoamento da Java EL que permite acesso direto a atributos estáticos e métodos. Por padrão as classes java.lang* sejam pré-importadas em todos os scripts, mas agora desenvolvedores de scripts EL poderão acessar recursos estáticos de qualquer classe importada para o contexto do EL. Isso é feito através do recurso ELmanager em uma instância de ELProcessor.

ELProcessor el = new ELProcessor();
el.getELManager().importStatic("com.company.Class.STATIC_FIELD");
assert (el.eval("Math.random()") instanceof Double);
System.out.println(el.eval("STATIC_FIELD"));

As melhorias na Expression Language que são parte da JSR-341 deverão se mostrar de grande ajuda nas implementações de JSP e JSF. E o modo de processamento autônomo também deverá ser muito bem-vindo.

O tutorial do Java EE já tem versão atualizada para a nova EL.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

Percebemos que você está utilizando um bloqueador de propagandas

Nós entendemos porquê utilizar um bloqueador de propagandas. No entanto, nós precisamos da sua ajuda para manter o InfoQ gratuito. O InfoQ não compartilhará seus dados com nenhum terceiro sem que você autorize. Procuramos trabalhar com anúncios de empresas e produtos que sejam relevantes para nossos leitores. Por favor, considere adicionar o InfoQ como uma exceção no seu bloqueador de propagandas.