AOP?  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline

Olá pessoal!

Como anda o desenvolvimento usando AOP (Aspect-Oriented Programming) no Brasil? Alguem tem estatísticas, casos de sucesso ou algo do gênero pra compartilhar? Quero ter certeza de que eu nao sou o unico xarope a usar isso por aqui

[]'s
-cv
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4154
Localização: São Paulo
Offline

usar a filosofia AOP tem muita gente usando. qualquer interceptador, filtro, etc ta usando crosscutting de uma maneira ou outra.

agora, usar alguma ferramenta, como o aspectj, em um projeto comercial, ouvi apenas boatos.

em especial porque o aspectj gera o bytecode da sua classe diferente, o aspecto nao vai existir em bytecode, sux.

se voce usar o bcel ou outro gerador de bytecode em cojunto, ai ateh pode sair algo mais real, porem mesmo assim nao vai ser a virtual machine que estara interceptando os pointcuts. sux denovo, nao?

por exemplo, voce escreveu um aspecto, e agora adicionou outra classe sozinha, o aspecto nao vai pegar essa classe se voce nao compila-la junto com o aspecto. um crime.

eu acho que tem futuro, mas nao agora.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
smota
Moderador
[Avatar]

Membro desde: 21/02/2003 16:19:19
Mensagens: 1647
Offline

Desculpem a ignorância ... mas, será que vocês tem algum link pra eu ler a respeito? (não das ferramentas, mas do conceito)

Só pra eu saber do que se trata este tópico

Obrigado

"Perfection is reached not when there's nothing more to add but when there's no more to take out"
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4154
Localização: São Paulo
Offline

http://www.aosd.net/ site sobre AOP em geral
http://www.aspecj.org/ implementacao de aspectos para java

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline

Paulo Silveira wrote:em especial porque o aspectj gera o bytecode da sua classe diferente, o aspecto nao vai existir em bytecode, sux.


Pois é, mas não só de AspectJ vive o AOP pra Java...existem diversos outros projetos (com níveis variados de sucesso em suas implementações), como o nanning.sf.net, aspectwerkz.sf.net...

Aliás, esse último não tem o problema de geração de bytecodes que vc descreve, caso vc "plugue" ele na VM em Runtime. Dá até pra criar novos aspectos dinamicamente e aplicá-los a qualquer classe carregada (excluindo as que foram carregadas pelo bootclasspath, como as do rt.jar).

Meu problema não está sendo nem a tecnologia ou o conhecimento pra fazer a coisa funcionar (afinal, AOP eh soh mais um paradigma de desenvolvimento, e bem complementar ao OOP em muitos casos), é o medo de algum desenvolvedor olhar o código mais tarde e ficar completamente boiando sobre o que está acontecendo no código...
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline

Mais algumas informações, caso alguém esteja com a mesma preocupação que eu: fiz uma pequena experiência "treinando" um desenvolvedor Java em AOP esse fim-de-semana.

Aqui vão alguns trechos do diálogo:

- AOP é simplesmente estender a visão da orientação a objetos para acomodar o conceito de "cross-cutting concerns", que são preocupações que todos, ou muitos dos objetos no seu sistema têm. Logging é um exemplo clássico disso: quase todos os objetos no seu sistema tem que chamar alguma rotininha pra logar coisas...

- Pois é, mas no que o AOP me ajuda com logging, por exemplo?

- Então, supondo que vc queira logar todas as entradas e saídas de um determinado conjunto de métodos, por exemplo, todos os getters de um bean, vc cria um "aspecto" que dá uma mãozinha aos getters, e ajuda eles a logar coisas. Essa "mãozinha" é chamada de advice, e os advices podem executar qualquer coisa antes da chamada de um método, ou depois da chamada. No caso do logging, vc vai querer fazer as duas coisas -- um log na entrada e outro na saída...entendeu?

- Hmmm...é, sem pensar na implementação disso, parece simples...

- E a implementação disso é simples! A maioria dos frameworks de AOP pra Java funcionam usando os Dynamic Proxies introduzidos pela JDK 1.3, ou trabalham "off-line" alterando dinamicamente os bytecodes das classes já compiladas para adicionar os advices.

- Ah, já tem framework pra isso? Po, legal, entao eu nem preciso me preocupar tanto com implementação...

- Pois é, voltando à teoria da coisa, então: outro conceito bem bacana do AOP é o de mix-ins. Mix-ins são nada mais do que implementações adicionais adicionadas a seus objetos. Por exemplo, suponha que vc queira adicionar um método getVersion() para todos os objetos, que retorna a versão atual de sua implementação ou o serialVersionUID, ou algo do gênero. Voce escreve uma interface, digamos, GetVersionMixin, e uma implementacao, por exemplo, GetVersionMixinImpl, que implementa a interface GetVersionMixin, e adiciona esses mixins a seus objetos. Automaticamente, seus objetos implementarão a interface GetVersionMixin, e quando o metodo getVersion() for chamado, o codigo existente em GetVersionMixinImpl será executado.

- Ou seja...reinventaram a herança múltipla...

- Não é bem herança múltipla...não dá pra sobrescrever métodos, então não é nem herança... RELAXA, EU TAMBÉM NÃO GOSTO DE C++

- Ok, já tou mais calmo...

Argh...chega de digitar por enquanto...mais tarde eu continuo o diálogo

[]'s
-cv
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4154
Localização: São Paulo
Offline

vai ser legal quando implementarem nativamente e tal. pra ter uma puta performance e padronizado.

bem que eh legal ficar gerando bytecode compativel, neh? porque ai funciona em qualquer JVM. eh que nem generics que vai provavelmente conseguir rodar em java < 1.5. pelo menos eles desejam

a gente ta assistindo a mesma coisa que nossos pais e professores assistiram a 20 anos atras, a mudanca de paradigma. tirem fotos para a posterioridade!

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline

Paulo Silveira wrote:vai ser legal quando implementarem nativamente e tal. pra ter uma puta performance e padronizado.


Yup, mas acho difícil o Java ganhar essas coisas "na linguagem", pode ser overkill pra definição da linguagem e ia dar ainda mais trabalho do que os generics pra implementar nos compiladores (putz, coitada da galera do Jikes e Eclipse...)

Paulo Silveira wrote:a gente ta assistindo a mesma coisa que nossos pais e professores assistiram a 20 anos atras, a mudanca de paradigma. tirem fotos para a posterioridade!


Curioso que, a cada mudança de paradigma, tem menos e menos gente seguindo as novidades... quando assembly era o top, C e outras linguagens conseguiram convencer rapidamente o pessoal de que eram mais eficientes... hoje, ainda tem *muita* gente programando em C coisas que não precisariam ser feitas em linguagens tão low-level...falar de AOP ou programação funcional (heyyy Haskell!) parece loucura pra muitos...
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
eduardopiveta
Smalltalk

Membro desde: 09/04/2003 15:17:09
Mensagens: 1
Offline

Olah, existe uma lista de discussao sobre AOP e correlatos...eh uma lista de baixo trafego, contando com cerca de 50 pessoas cadastradas...segue a descricao da lista:

"Este grupo foi criado para reunir pessoas do Brasil (estrangeiros também são bem-vindos) interessadas em discutir sobre Advanced Separation of Concerns no desenvolvimento de software e suas diversas abordagens (Aspect-oriented Software Development, Multi-Dimensional Separation of Concerns, Composition Filters, Meta-object Protocols etc). "

Para se inscrever na lista: asoc-br-subscribe@yahoogroups.com
ou pelo site do yahoo...

T+
Eduardo Piveta
[Email]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline

Valeu pela dica, Eduardo!
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

cv wrote:Como anda o desenvolvimento usando AOP (Aspect-Oriented Programming) no Brasil? Alguem tem estatísticas, casos de sucesso ou algo do gênero pra compartilhar? Quero ter certeza de que eu nao sou o unico xarope a usar isso por aqui


Espero que não fiquem chateados comigo por ter recuperado um tópico tão velho, eu não resisti porque a pergunta do cv para mim continua muito atual. Como está o desenvolvimento com Orientação a Aspectos no Brasil? Alguém está usando, quais resultados vocês têm obtido?

Abraços a todos!
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Eu uso... a implementação do AspectJ é muito boa. Tem os drawbacks que o Paulo comentou, mas não acho isso impeditivo na adoção do framework. O que gosto é a integração com o Eclipse. Ele destaca os métodos que sofrem atuação de advices e se você olhar o aspecto ele também te diz todos os métodos adviced.

Atualmente tenho usado para fazer DI, Logging, Tracing. Na semana passada estava com um probleminha. Quando você está usando o Hibernate Validator e manda um manager.persist(entity) com uma entidade inválida o EntityManager gospe um RuntimeException que encerra a transação JTA. Minha aplicação precisava que os erros de validação simplesmente fossem uma RuntimeException mas @ApplicationException. Resolví com um Aspecto que observava os métodos do EntityManager (uma solução bem melhor que implementar um EntityManagerFactory).

Depois que você aprende você começa a enxergar uma outra dimensão nos objetos e começa a aplicar AOP.

Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
Ferryman
JavaGuru
[Avatar]

Membro desde: 26/10/2006 16:30:23
Mensagens: 220
Offline

Eai pessoal,

Estou avaliando a utilização de AOP, mas pelo que percebi, não tem muita gente utilizando.... Brinquei um pouco com aspectJ e queria brincar um pouco com o JBOSS AOP.
Alguem aqui usa algum dos frameworks em projetos comerciais?

Gostei do aspectJ mas tive dificuldades para utilizá-lo com o maven... não achei nenhum plugin descente.
Pretendo avaliar o JBOSS AOP agora e ver se vale a pena...

Alguma sugestão?

[]s

Rafael Farias Silva (@rafaferry)

Jsigner - Engenharia reversa automática através do maven. Acesse http://code.google.com/p/jsigner
[Email] [WWW]
Kenobi
GUJ Master
[Avatar]

Membro desde: 14/11/2003 13:06:37
Mensagens: 1678
Localização: Brasil
Offline

Paulo Silveira wrote:vai ser legal quando implementarem nativamente e tal. pra ter uma puta performance e padronizado.

bem que eh legal ficar gerando bytecode compativel, neh? porque ai funciona em qualquer JVM. eh que nem generics que vai provavelmente conseguir rodar em java < 1.5. pelo menos eles desejam

a gente ta assistindo a mesma coisa que nossos pais e professores assistiram a 20 anos atras, a mudanca de paradigma. tirem fotos para a posterioridade!


Realmente Paulo, pois tentei montar um esquema de Log automatizado no meu projeto atual, que usa o WebLogic, além da configuração com o servidor ser árdua, a performance do bichinho não é lá essas coisas, acabou inviabilizando minha implementação.

Costumo pensar em aspectos somente para interesses ortogonais. Esse insight que o CV deu sobre Mix-ins, despertou minha atenção para alguns outros casos, utilizá-lo também em negócios. Mas teríamos que ter nativamente, como você disse.

----------------------------------------------------------
SOA|EXPERT - http://www.soaexpert.com.br
SOA de um jeito simples e eficiente.
[WWW] [MSN] [ICQ]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 718
Offline

Kenobi wrote:
Paulo Silveira wrote:vai ser legal quando implementarem nativamente e tal. pra ter uma puta performance e padronizado.

bem que eh legal ficar gerando bytecode compativel, neh? porque ai funciona em qualquer JVM. eh que nem generics que vai provavelmente conseguir rodar em java < 1.5. pelo menos eles desejam

a gente ta assistindo a mesma coisa que nossos pais e professores assistiram a 20 anos atras, a mudanca de paradigma. tirem fotos para a posterioridade!


Realmente Paulo, pois tentei montar um esquema de Log automatizado no meu projeto atual, que usa o WebLogic, além da configuração com o servidor ser árdua, a performance do bichinho não é lá essas coisas, acabou inviabilizando minha implementação.

Costumo pensar em aspectos somente para interesses ortogonais. Esse insight que o CV deu sobre Mix-ins, despertou minha atenção para alguns outros casos, utilizá-lo também em negócios. Mas teríamos que ter nativamente, como você disse.


Mix-ins são realmente muito bons Kenobi e ajudam muito, contudo manter longe do negócio e mais perto das necessidades da infra me parece ser uma escolha mais interessante.

Por exemplo:

É comum em paginas que usam Datatables JSF, disponibilizar entidades com um atributo isSelect ou algo parecido, que leem e outros que setam um valor booleano que diz se a linha foi selecionada por um checkbox ou não. Normalmente para tal, insere-se um atributo booleano na Entidade ou cria-se um wrapper para ela. Na primeira um problema é misturar no objeto entidade coisas muito além da modelagem do domínio, como um campo referente a infra da apresentação... e no segundo approach o ruim é que ficar fazendo wrapper sempre que precisar de um conteúdo a ser exibido é um saco. Para isso, fazer "Introduction" de um campo inexistente na modelagem de domínio e um "Mix-in" de uma interface para estas entidades, com implementações de métodos para leitura destes novos campos, torna de maneira única bem simples este serviço para qualquer que seja a entidade. Aspectos de segurança também são bem comuns nesta mesma linha de abordagem.

Contudo, modelar aspectos para o negócio em sí, acho meio perigoso. Os métodos pertinentes ao domínio tem que ser explícitos neste, e não plugados.

Quanto ao que o CV disse, só uma observação, é possível sim sobrescrever métodos. Aliás, para classes que compartilham de mesma estratégia comum para equals e hashCode (projetos onde as igualdades podem ser submissas a IDs, por exemplo), um aspecto pode perfeitamente resolver este crosscuting fazendo as sobrescritas.

This message was edited 3 times. Last update was at 03/08/2008 22:53:15


... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team