Jexpel vs Ognl

Muitos de vcs devem conhecer a biblioteca interpretadora de expressões OGNL.

Este tipo de biblioteca costuma ser usada internamente por frameworks, mas também pode ser utilizada diretamente.

Existe um novo projeto no sourceforge chamado jexpel, criado por um brasileiro(Eu), que tem a performance melhor e é tão ou mais fácil de usar do que o ognl.

Como eu sou o desenvolvedor deste projeto, gostaria de contar com a opinião de outros desenvolvedores para aprimorá-la.

Agradeço.

Alan, creio que meu comentario não acrescente muito ao fórum, porém quero apenas dar os parabéns pelo projeto.

Sei que você dedicou parte do tempo com ele, e nada mais justo do que um obrigado. Ainda estou um pouco atolado aqui (epa, hehe) com um projeto extenso, mas logo que surgir um tempo quero olhar com calma.

Abraços

tambem dou os parabens

ognl ainda tem um montao de buracos e dificuldades, e mesmo assim é o mais usado…

Queria agradecer por terem olhado e queria acrescentar mais algumas informações

O jexpel não utiliza reflexão para executar as expressões, elas são compiladas em classes java via asm. Por ex.:

a seguinte expressão: user.name seria transformada em uma classes assim:

public class Exp_1712536127 implements Expression {

  public Object get(Object obj) throws Exception {
    return obj.getUser().getName(); // a pripriedade é recuperada sem cast, recursos do bytecode
  }

  public void set(Object obj, Object value) throws Exception {
    obj.getUser().setName((String)value); // aqui faz o cast
  }

}

Neste caso é uma expressão que permite leitura e escrita, mas há casos que só permite leitura como na expressão:

dtInicio + 10243600*1000

Esta expressão seria compilada como:

new Date(obj.getDtInicio().getTime() + 864000000L)

obs.: eu implementei a soma para datas. Um recurso muito útil que eu já precisei em projetos para validar datas com expressões"

E caso a propriedade seja pública e não tenha método get ele a acessa diretamente

As conversões de tipos de inteiro para long, double, string já são todas feitas

Espero que gostem.

[]s

Suporta i18n? Por exemplo 10,99 e 10.97 conforme o Locale.

É no padrão java, double é 1.0, float 1.0f, inteiro e byte do jeito normal e long com o L no final
eu penso em colocar uma possibilidade de abilitar este tipo de conversão registrando conversores
como por exemplo, se o desenvolvedor abilitar esta funcionalidade e registrar um formato para data esta já sairia formatada ou então iria converter de string para data se necessário
no momento ela é bem simples e objetiva, mas ganha em simplicidade e performance

Acho que deveria reconsiderar isso. Somar datas é conceptualmente mais complexo que somar dois longs. Isso trazer muita dor de cabeça. Data não forma um grupo (a+b não existe)

Sergio, concordo com vc q a soma de datas é uma coisa problemática, mas o que eu considerei interessante é a soma entre uma data e um número.

A idéia é poder fazer coisas como, vamos supor que vc tem um campo data e outro campo que é a data acrescida de n dias, vc não precisaria ter q criar 2 métodos para isso, um segundo só para poder apresentar a data somada, assim, vc pode escrever o segundo campo como uma expressão, era isso que eu tinha em mente.

Eu não imaginei coisas como 19/02/2009 + 11/07/2008, pra mim seria útil a subtração de datas tendo como resultado um long, e esta operação também está implementada. Apesar de o jexpel estar calculando a adição entre duas datas. Quem sabe eu posso adicionar uma interface para inserir implementações customizadas de operações.

A minha idéia é facilitar e não complicar.

Obrigado, foi muito bom o seu questionamento

[quote=alanlohse]Sergio, concordo com vc q a soma de datas é uma coisa problemática, mas o que eu considerei interessante é a soma entre uma data e um número.

A idéia é poder fazer coisas como, vamos supor que vc tem um campo data e outro campo que é a data acrescida de n dias, vc não precisaria ter q criar 2 métodos para isso, um segundo só para poder apresentar a data somada, assim, vc pode escrever o segundo campo como uma expressão, era isso que eu tinha em mente.

Eu não imaginei coisas como 19/02/2009 + 11/07/2008, pra mim seria útil a subtração de datas tendo como resultado um long, e esta operação também está implementada. Apesar de o jexpel estar calculando a adição entre duas datas. Quem sabe eu posso adicionar uma interface para inserir implementações customizadas de operações.

A minha idéia é facilitar e não complicar.

Obrigado, foi muito bom o seu questionamento[/quote]

quanto é 19/02/2009 + 2 ?

21/02/2009
19/04/2009
19/02/2011
19/02/2009 2h00m00
19/02/2009 0h02m00
19/02/2009 0h00m02

:wink:

A operação soma data + numero não é única. Precisa definir o quê vc está somando (precisa de unidades no numero).
Este é um exemplo básico. Se vc entrar com o problema do horário de verão é ainda pior porque depende da localização da data.

A soma é feita com os milisegundos, dessa forma não importa se é horário de verão, se é calendário gregoriano etc.

Obrigado.