| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 01:14:20
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Estou disponibilizando o MentaContainer, que é um framework de IoC simple, prático, rápido, sem XML e sem anotações. Suporta Injection, DI, Wiring, Singleton, blah, blah, blah, com a diferença de ser simples de usar e fácil de entender. É mais uma alternativa em relação ao Spring, Guice e PicoContainer.
Comparem com esses outros e coloquem seus comentários e sugestões.
http://www.seducaotecnologica.com.br/mentacontainer-ioc-simples-rapido/
-Sergio
PS: Quando você lê um livro, você gosta de ler um texto limpinho ou um texto repleto de anotações? Anotação = remendo de código.
This message was edited 1 time. Last update was at 28/07/2010 01:15:46
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 01:28:59
|
peerless
GUJ Master
![[Avatar]](/images/avatar/5b2a8f2b014bb326fd82ee313704e78c.jpg)
Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline
|
Sergio, usa Generics no método get para não precisar fazer Casting
|
follow me
pitacos
"The most problems that teams face are about communication, and all the others are too." - Dan North
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 01:31:56
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
peerless wrote:Sergio, usa Generics no método get para não precisar fazer Casting
O get pode retornar qualquer coisa... Não dá para configurar isso não... Só se vc tivesse passando o type como parâmetro, o que não faz parte da API que retorna beans por NOME...
This message was edited 1 time. Last update was at 28/07/2010 01:40:23
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 01:44:26
|
peerless
GUJ Master
![[Avatar]](/images/avatar/5b2a8f2b014bb326fd82ee313704e78c.jpg)
Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline
|
Não tem como fazer isso:
ex:
?
|
follow me
pitacos
"The most problems that teams face are about communication, and all the others are too." - Dan North
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 01:55:33
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
peerless wrote:Não tem como fazer isso:
ex:
?
Funcionou bonito !!! Espero agora nunca mais me esquecer desse truque esperto. MUITO OBRIGADO !!!
This message was edited 1 time. Last update was at 28/07/2010 02:32:49
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 08:14:50
|
Ataxexe
JavaEvangelist
![[Avatar]](/images/avatar/8ed02495f7499c010a3b22c830438ec2.jpg)
Membro desde: 11/10/2007 15:34:17
Mensagens: 418
Localização: Brasília
Offline
|
Bacana, Sergio. Esse container será usado nas próximas versões do Mentawai?
|
Marcelo Guimarães
https://github.com/ataxexe
http://sourceforge.net/projects/trugger
http://www.youtube.com/user/ataxexe
http://www.flickr.com/photos/ataxexe |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 08:56:46
|
RicardoCobain
JavaChild
![[Avatar]](/images/avatar/78e3b5ca79e1d3688b73c13540b5c261.jpg)
Membro desde: 21/06/2007 16:05:01
Mensagens: 147
Offline
|
Show de bola Sérgio, estava pensando em uma coisa junto ao mentawai, mas vc fez logo um independente... muito bom.
Agora pode ser até usado em projetos Desktop, e tambem da pra fazer nossos TEST CASE bem mais fácil, e tambem chamar ações fora do contexto/request de forma simples.
|
Ricardo JL Rufino <ricardo.jl.rufino@gmail.com> < UNYK > :: CriativaSoft :: Teresina - PI
"Existe apenas um bem, o saber, e apenas um mal, a ignorância" - Sócrates
"Devemos julgar um homem mais pelas suas perguntas que pelas respostas" - Voltaire
Mentawai Developer
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 11:41:29
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Ataxexe wrote:Bacana, Sergio. Esse container será usado nas próximas versões do Mentawai?
A primeira idéia é essa. O Mentawai, como o Rufino falou, só suporta IoC dentro das actions, o que funciona bem para as actions, mas já para os test cases e chamadas assíncronas, não...
Claro que vc pode usar Spring, Guice ou outra coisa junto com ele para contornar esse problema, mas agora essa facilidade virá out-of-the-box com o MentaContainer.
This message was edited 1 time. Last update was at 28/07/2010 11:42:22
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 13:51:50
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
Membro desde: 08/07/2007 00:08:14
Mensagens: 6395
Offline
|
saoj,
como você espera que seja o uso do MentaContainer?
qual é a vantagem dele sobre o PicoContainer?
já leu esse post do Uncle Bob?
http://blog.objectmentor.com/articles/2010/01/17/dependency-injection-inversion
|
--
Caelum
www.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 14:49:13
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Lucas Cavalcanti wrote:
como você espera que seja o uso do MentaContainer?
O primeiro uso será dentro do Mentawai, como um case-proof. Hoje o Mentawai oferece IoC e AutoWiring dentro das actions, mas se você queria usar o container por fora de uma action, por exemplo para testes ou tasks assíncronas sem qualquer request por trás, você ficava na mão, isto é, tinha que instanciar e configurar os seus componentes na mão. Nada difícil mas feio. Claro que vc podia utilizar ele com Spring ou Guice, mas agora com esse container integrado vai ficar tudo transparente e abstraído. Basta pegar a referencia do container e partir para o abraço.
O MentaContainer é bem pequeno, não depende de nada e por ser totalmente baseado em configuração programática e sem annotations você pode integrá-lo de forma fácil a qualquer outro framework. Vc também pode utilizá-lo em seus projetos de forma não-obstrusiva.
qual é a vantagem dele sobre o PicoContainer?
Me parece que o pico container não registra os componentes por nome, apenas por type. Tente fazer aqueles exemplos básicos do MentaContainer com o Pico. Tenho minhas dúvidas se será tão simples...
Acabei de ler por alto. Mas ele critica IoC ??? Claro que qualquer coisa usada de forma errada, exagerada ou desnecessária será ruim, mas todo mundo hoje entende que IoC é essencial pra quase tudo.
This message was edited 3 times. Last update was at 28/07/2010 14:57:59
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 21:01:14
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
Membro desde: 08/07/2007 00:08:14
Mensagens: 6395
Offline
|
saoj wrote:
Lucas Cavalcanti wrote:
qual é a vantagem dele sobre o PicoContainer?
Me parece que o pico container não registra os componentes por nome, apenas por type. Tente fazer aqueles exemplos básicos do MentaContainer com o Pico. Tenho minhas dúvidas se será tão simples...
Seu código:
Pico container:
é a mesma coisa, só muda o nome dos métodos... e o pico até é mais simples, pq vc não precisa pedir pra fazer o autowire: ele faz sozinho, já é suposto...
e sim, dá pra registrar componentes por nome (o código acima tá usando isso)
Cuidado pra não reinventar a roda.
saoj wrote:
Acabei de ler por alto. Mas ele critica IoC ??? Claro que qualquer coisa usada de forma errada, exagerada ou desnecessária será ruim, mas todo mundo hoje entende que IoC é essencial pra quase tudo.
ele não critica IoC, ele critica a necessidade de usar um Container de IoC para fazer coisas comuns, em que fazer na mão é muito mais fácil...
Containers IoC são bastante úteis qdo integrado a frameworks como o VRaptor, o Spring MVC, o proprio EJB com CDI...
usar um container na mão só pra instanciar objetos numa classe da sua aplicação é meio desperdício, usar o construtor da classe e fazer na mão é melhor!
é isso que o Uncle Bob está falando
|
--
Caelum
www.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 21:17:58
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Legal, não sabia que suportava por nome tb, mas isso realmente me pareceu básico dele suportar. O exemplo da introdução no site deles não menciona isso e achei que por ser básico deveria aparecer ali. Então pensei que não suportava.
AutoWire totalmente automático é loucura. Funciona em hello world, mas em qualquer projeto maior vc vai começar a ter clash de dependencia. Por isso no MentaContainer isso é explícito por nome e type. Deixar apenas por type tem dois problemas:
1) Clash como eu falei
2) Demasiadamente custoso, pois agora vc tem que checar todas as propriedades de todo mundo e fazer um cruzamento entre todas as classes e suas propriedades. Quando vc define uma lista finita de dependencias isso fica bem mais simples e rápido.
Não sei se o Pico te permite especificar as dependencias. Provavelmente sim, mas olhei o javadoc deles e não encontrei nada como addDependency.
Mas tudo bem, podem usar o Pico ao invés do MentaContainer se assim desejarem. Vcs são livres pra isso. O PicoContainer é muito bom. Não sei porque o Google não usou o PicoContainer quando precisou de um container de IoC com configuração programática. Eles adoram re-inventar a roda por lá, a começar pelo próprio buscador...
Já pra mim valeu muito a pena porque o Mentawai suporta IoC e DI e AutoWiring desde 2005 quando foi lançado e eu apenas extraí essa funcionalidade num framework separado. Valeu como aprendizado e principalmente para fazer com que o Mentawai se torne um container de IoC genérico e não apenas para Actions. Claro que usando ele com Spring/Guice/Pico/XXX vc tb consegue isso, mas lembre-se que desde 2005, antes de Struts2, VRaptor2, VRaptor3, Seam, etc. o framework possui a filosofia de ser FULLSTACK, sem XML e sem Annotations. É isso que diferencia ele dos outros 10 milhões de frameworks. A roda fica diferente das outras porque tem sua própria integridade.
This message was edited 9 times. Last update was at 28/07/2010 21:38:10
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 21:26:15
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline
|
Ola
Vc poderia ter algo como
Cujo codigo pode ser
|
http://pacman.blog.br
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2010 22:05:38
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
Membro desde: 08/07/2007 00:08:14
Mensagens: 6395
Offline
|
saoj wrote:Legal, não sabia que suportava por nome tb, mas isso realmente me pareceu básico dele suportar. O exemplo da introdução no site deles não menciona isso.
AutoWire totalmente automático é loucura. Funciona em hello world, mas em qualquer projeto maior vc vai começar a ter clash de dependencia.
Não concordo...
Se você faz Inversão de Controle do jeito certo, vc não tem ciclos de dependência, e portanto não tem clash...
saoj wrote:
Por isso no MentaContainer isso é explícito por nome e type. Deixar apenas por type tem dois problemas:
1) Clash como eu falei
clash é só qdo vc precisa instanciar uma classe mais de uma vez com configurações diferentes...
mas nesse caso será que o problema não está no design da sua aplicação?
saoj wrote:
2) Demasiadamente custoso, pois agora vc tem que checar todas as propriedades de todo mundo e fazer um cruzamento entre todas as classes e suas propriedades. Quando vc define uma lista finita de dependencias isso fica bem mais simples e rápido.
se a sua classe tem muitas dependências, de novo, o problema provavelmente está no design da sua aplicação!
se sua classe só tem 2 ou 3 dependências, não é tão mais custoso
Bom, boa sorte aí com seu framework novo, vc vai aprender bastante coisa com ele
[]'s
|
--
Caelum
www.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/08/2011 11:23:45
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Lucas Cavalcanti wrote:
Se você faz Inversão de Controle do jeito certo, vc não tem ciclos de dependência, e portanto não tem clash...
Clash não é ciclo, mas o caso que vc tem duas variáveis do mesmo tipo, ou que implementam a mesma interface, daí vc fica sem ter como saber qual que recebe o quê. Especificando explicitamente vc nunca terá esse problema porque vc especifica o tipo e o NOME da propriedade.
O problema de não especificar nada é que um objeto pode ter 100 propriedades mas apenas uma é uma dependencia que vai precisar de wiring. Melhor especificá-la pois vc ganha três vezes:
A coisa fica clara e vc sabe exatamente o que está dependendo de que.
Fica mais fácil (e rápido) para o container achar essa dependencia e injetá-la, isto é, não precisa checar cada uma das 100 propriedades.
Menos risco de vc injetar algo sem querer, porque o container achou uma propriedade na super.super.super.super class e calhou de ter algo parecido definido no container.
se a sua classe tem muitas dependências, de novo, o problema provavelmente está no design da sua aplicação!
se sua classe só tem 2 ou 3 dependências, não é tão mais custoso
Acho que vc misturou. A minha aplicacao provavelmente vai ter poucas dependencias e EXATAMENTE POR CAUSA DISSO não custa nada definí-las na mão ao invés de deixar o container adivinhá-las.
Menos linhas de código não é necessariamente melhor. As vezes é bom saber o que está acontecendo e manter o controle.
MentaContanier => http://forum.seducaotecnologica.com.br/posts/list/5.page
This message was edited 4 times. Last update was at 02/08/2011 11:26:45
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
|
|