| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/04/2003 02:06:06
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/04/2003 11:20:47
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/04/2003 11:26:37
|
smota
Moderador
![[Avatar]](/images/avatar/ca9c267dad0305d1a6308d2a0cf1c39c.jpg)
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" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/04/2003 11:45:48
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/04/2003 15:20:49
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2003 12:22:54
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2003 12:46:34
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2003 08:25:27
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/04/2003 15:21:28
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/04/2003 19:56:24
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7839
Localização: São Paulo, SP
Offline
|
Valeu pela dica, Eduardo!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2008 14:32:13
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 17:32:57
|
rodrigoy
GUJ Ranger
![[Avatar]](/images/avatar/cf79ae6addba60ad018347359bd144d2.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2008 11:16:24
|
Ferryman
JavaGuru
![[Avatar]](/images/avatar/2e3907cbad887e6a1bea84d450b756db.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2008 13:15:39
|
Kenobi
GUJ Master
![[Avatar]](/images/avatar/cf2226ddd41b1a2d0ae51dab54d32c36.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2008 21:38:25
|
Alessandro Lazarotti
Virtual Machine Man
![[Avatar]](/images/avatar/2aaaddf27344ee54058548dc081c6541.jpg)
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/
|
|
|
 |
|
|