Bill Burke (EJB) X Rod Johnson (Spring)

Bom galera , teva uma atualização legal nessa discussão. Estou aqui no Campus Party e bati um longo papo sobre o assunto com o Fábio Akita, acompanhado de perto pelo Louds.

Acho que vou bloggar sobre isso. Você tem a opção de colocar em Libs e chamar da Action, escrever um plugin que envolve seu negócio e models ou ainda mandar por mensagens, com um application server externo processando somente seus negócios. Essa é a maneira que faz mais sentido para um cenário distribuído e vou tentar escrever um pouco mais sobre o papo juntamente que tive.

Mas uma conclusão saiu da conversa - O Grails vem com esse suporte e pode ser um caminho interessante. O Akita disse que está achando bastante interessante alguns approaches do mesmo.

º´~s

Kenobi

Taí uma perguntinha boa pra um SCBCD responder…

[quote]Mauricio Wrote…: A moda era Struts, nós é que fomos pelo caminho errado[/quote]Alías vcs. só andam no caminho errado… :stuck_out_tongue:

:lol:

Pois é, eu espero continuar andando por esses “caminhos errados” por muito tempo ainda :slight_smile:

Primeiramente, queria parabenizar as pessoas dessa thread por conseguir gerar três páginas de conteúdo sem descambar pra idiotice ou pra agressão pura e simples (algo que está sendo raro ultimamente).

Mas indo à discussão, gostaria de expressar a minha opinião sobre as tecnologias citadas anteriormente:

:arrow: EJB3
Por EJB2 ser considerado uma unanimidade em quesito ruindade, fazer comparação entre esta e o EJB3 faz com que esse último aparente ser a última bolacha do pacote. Porém, tenho algumas restrições:
a) Por que a existência de inteface local e remota? Isso não poderia ser resolvido automaticamente? Do tipo: (o bean tá no mesmo nó) ? local : remoto.
b) Por que a anotação @EJB só funciona em Servlet, em Managed Bean ou eu outro EJB? E os outros objetos? Apelam pro Context?
c) Será que adianta correr o risco de de fazer um Big Design Up Front, colocando EJB porque se espera que, quando precisar escalar, basta “simplesmente” trocar tudo pra Remote (e torcer pra não reter ou transferir grande quantidade de bytes)?

:arrow: JSF
Sozinho, o Faces não faz verão. Precisa de uma porrada de bibliotecas e frameworks complementares para que fique algo decente. Nada contra, contanto que as pessoas se convençam de um simples fato: se quer algo completo, não use JSF!

:arrow: Seam
Olhando o que Seam faz, parece uma revolução. Mas não caio de amores tanto assim porque:
a) A anotação @Name me deixa com o pé atrás. É fácil declarar um managed bean desse jeito, concordo. Mas me dá uma sensação de estranheza quando a declaração de instância e a declaração de classe estão coladinhos, um embaixo do outro. Posso estar sendo careta, mas pra mim classe e objeto são coisas distintas e devem ser declarados em locais separados, juntá-los força uma relação nociva de 1 para 1 entre instância e tipo.
b) Seam é difícil quando o container não é o JBoss. Olha, tentei configurar sobre Glassfish v2, e não consegui rodar nem Hello World direito. No JBoss, consegui graças ao Sean-Gen, mas dá aquela sensação: “Não é assim uma Brastemp (ou melhor: um Rails)”.
c) Anotação é legal, mas precisa ser um framework onde o desenvolvedor tem que colocar TRÊS ou QUATRO anotações uma classe? Estamos trocando a era do XML hell para o Annotation hell!

:arrow: Spring
Já tive “nojinho” de Spring. Mas ultimamente estou gostando mais dele. A razão é que o framework está abrindo as portas para anotações e uma solução Faces, Spring e Spring WebFlow é mais simples que Seam com jBPM. Spring tem o problema de XML, mesmo usando autowired; mas a grande gama de serviços oferecidos, e ainda o fato de os grandes frameworks oferecerem suporte a Spring, compensa seu uso.

:arrow: Groovy
Desculpe-me aqueles que gostam dessa linguagem, mas Groovy é o C++ dos novos tempos! Assim como C++ tentou conciliar o paradigma OO de alto nível com o paradigma de proximidade de máquina, o Groovy tenta conciliar uma característica dinâmica com uma linguagem estática. O resultado é um só: complexidade. E é fácil reparar nisso, lembro de um programa C++ em que se abria um arquivo com fopen ao invés do iostream porque o programador simplesmente não conhecia profundamente C++. Com Groovy, um programador que também não tenha muitos conhecimentos pode simplesmente ser tentado a fazer algo parecido com Java, mesmo que não seja a melhor solução.
Além disso, a escolha de Groovy por alguns fãs de Java é puramente ideológica! Já viu alguém desse fórum reclamando pra um rubista que Django (Python) ou CakePHP (PHP) é melhor que Ruby on Rails em determinado aspecto? Lógico que não! Alguns aqui escolheram Grails porque, de todos, é “o que tem mais Java, e se tem Java é bom”. Concordo que com Grails, a integração com Java é mais fácil, mas é um pensamento de curtíssimo prazo! Daqui a pouco, outras linguagens terão integração com Java e serão mais rápidas, fazendo com que a vantagem do Groovy desapareça, sendo apenas lembrado como o mais complicado das linguagens dinâmicas.

Acho que quando vc falou “escalar” vc queria dizer “distribuir”. Para distribuir pode-se usar xFire, RMI, Soap, REST, etc. Eu acho que não vale a pena fazer um design gordo up front.

Como eu postei anteriormente, a galera do RoR enche a boca para falar que da sua característica full-stack. O famoso: “Não me faça correr atrás de um monte de frameworks diferentes”. Se um cara é um mega arquiteto que domina um monte de frameworks Java e sabe integrá-los com perfeição, então isso é bom pra ele. Mas ele não é a regra!

Faço das suas palavras as minhas. Struts2 também resolve o XML hell oferecendo um annotation hell.

Spring simplifica o EJB. Até EJB3, Spring dava uma coça no EJB. Spring também serve para IoC/DI/Autowiring, mas muitas pessoas usam ele só para isso, daí pode ser considerado um exagero. Há outras soluções tão boas quanto o Spring para IoC/DI/Autowiring…

Spring tem outras coisas muito legais tb…

Não manjo muito de Groovy, mas com (J)Ruby e agora Scala vai ficar difícil pra ele.

Leonardo! Parabens pelo excelente post!

Sobre EJB3:

a-) As vezes voce quer fornecer menos visibilidade ao cliente remoto que ao cliente local. Realmente nao ocorre muito, mas esse é um dos motivos pelo qual nao é utilizada a mesma interface para os dois.

b-) Porque apenas Managed Beans, EJBs e Servlets não são instanciadas por voce, e sim pelo container. Como ele iria injetar algo em um POJO que voce mesmo é quem da new? Precisaria de manipulacao de bytecode das grandes (interceptacao do construtor), e seria estranha essa injecao.

c-) Na minha opiniao adianta sim, mas voce precisa ja pensar em criar algumas classes com metodos de granularidade maior, que servirão como façade, para evitar isso que voce falou: a grande quantidade de bytes transferidos quando a aplicacao se tornar realmente distribuida. Mas isso vale para qualquer tecnologia remota, nao é verdade?

Nâo acredito que o RoR venha a dominar o mercado e “roubar” o espaço do Java.
Na realidade, acredito que RoR venha a ocupar o espaço do “PHP”. Ao participar de um evento sobre Ruby on Rails aqui em Minas, percebi que 90% da platéia era composta por gente que trabalhava com PHP. Se RoR vai “tomar” o lugar de alguém, este alguém será o PHP, isto se conseguirem resolver os problemas atuais de performance e escalabilidade do RoR (o que com certeza vão).

Com relação à plataforma Java, acredito que um caminho com certeza será o Grails, ele trás algumas das vantagens do RoR e ainda nos trás algumas vantagens em relação àquele:

  • Reaproveitamento de nosso código legado feito em Java (tá, tem o JRuby também, mas o Grails ainda está na frente do RoR sendo executado em JRuby). O Grails é executado NA JVM gente!

  • Um ambiente completo de fato. Você nem precisa se preocupar com um banco de dados, ele já vem com o HSQLDB embutido.

  • Muito mais fácil de se fazer deploy do que o RoR

  • É baseado em tecnologias que já estão mais que consagradas: Spring + Hibernate, a dobradinha que o JEE 5 usou como fonte de inspiração

  • Detalhe bobo mas não tanto para os iniciantes: por mais incrível que pareça, é MUITO mais fácil de instalar do que o RoR (nada de GEM, simplesmente baixe o pacote, descompacte e define a variável de ambiente GRAILS_HOME)

  • Assim como o Rails, você nem precisa parar o servidor para alterar sua aplicação.

  • Vender Grails é muito mais fácil que vender RoR. Basta dizer que é executado na plataforma Java.

  • Na minha experiência, tem mostrado performance e escalabilidade melhor que RoR.

Sem sombra de dúvidas, é o framework para desenvolvimento web mais produtivo que já conheci.

Tenho investido muito no Grails ultimamente (até criei o primeiro grupo de usuários do framework (http://www.grailsbrasil.com) aqui do Brasil). Acredito que para o desenvolvimento de aplicações web em Java, seja o caminho mais interessante atualmente. Pensem: em qual PLATAFORMA vocês apostariam uma aplicação de grande porte? Ruby ou Java?

E outra: Java está deixando de ser visto como linguagem, e passando a ser visto como deveria ser desde o início: como PLATAFORMA. E,querendo ou não, uma das melhores se não A melhor.


E gostaria também de aproveitar para fazer uma profecia: RoR vai ser o VB da próxima década. Tenho visto MUITA gente despreparada desenvolvendo “aplicações” em RoR que, ao serem analisadas, mostram-se um lixo. Preparem-se para, no futuro, dar manutenção em sistemas de merda. (não que sistemas de merda não vão ser feitos em Grails, mas normalmente quem trabalha com Grails já trabalhou com Java, e quem eu tenho visto trabalhando com RoR normalmente não saca NADA de OO ou arquitetura pois só fazia sites simples em PHP).

Esta é a minha opinião a respeito da tal “dominação do mundo pelo RoR” :smiley:

[quote=saoj]
Não manjo muito de Groovy, mas com (J)Ruby e agora Scala vai ficar difícil pra ele.[/quote]
Scala é interessante, e JRuby muito legal, mas a pergunta que fica é:
Scala tem um framework bacana pra Web? Se tiver, há salvação neste mundo :smiley: .
JRuby é legal, tem uma linguagem muito boa, mas…, o que é Ruby sem Rails? Até 4 anos atrás, Ruby é e sempre foi bacana, mas se num fosse Rails, seria mais uma. Não conhecia quem desenvolvesse aplicações Web com Ruby, somente admistradores de Linux que preferiam Ruby em vez de outras milhares de linguagem que Linux oferece. JRuby precisa rodar Rails bem, com melhor performance. Eu acho Rails em AS lento. Nem falo no Tomcat pq dá vergonha.
Grails é a salvação pra mim, não por causa do Groovy, nem seria ele o principal mesmo (ele cheira Java), já que Grails não é Groovy em nem 50%. Seria mais por causa do framework, simples e fácil de trabalhar e possui performance melhor que Rails (antes que taquem pedra, testem em suas máquinas e se tiverem um servidor Sun sobrando, testem tb os dois).
Enfim, falei do PHP, onde o Maurício disse não ouvir falar, pq eu conheço mais gente que desenvolve em PHP que Java. Trabalhei antes de usar Java vários anos com Linux, Perl e outras coisas macabras. Todo mundo que trabalha com PHP, está de olho no Rails, por que? É mais fácil que trabalhar do que com PHP. Mesmo com aqueles frameworks que PHP tem.
O pessoal que possui sistemas em java tem uma preocupação diferente, eis o conservacionismo. Afinal, projetos em Java custam qtas vezes mais que um projetinho em PHP? Num acham que um projeto jogado no lixo depois de anos e milhões investidos seria uma tolice?
Bom, de resto, espero que surjam outros como Grails ou melhor. E se puderem usar Scala ou JRuby seria excelente idéia, até que um dia, sabe Deus lá quando, Rails rode decentemente em uma JVM.

[quote=kicolobo]Nâo acredito que o RoR venha a dominar o mercado e “roubar” o espaço do Java.
Na realidade, acredito que RoR venha a ocupar o espaço do “PHP”. Ao participar de um evento sobre Ruby on Rails aqui em Minas, percebi que 90% da platéia era composta por gente que trabalhava com PHP. Se RoR vai “tomar” o lugar de alguém, este alguém será o PHP, isto se conseguirem resolver os problemas atuais de performance e escalabilidade do RoR (o que com certeza vão).[/quote]

Tipo, o Twitter roda em Rails e tal…

E você acha que o JRuby roda aonde se não for na JVM?

Tem “cap deploy” no Grails? Que implanta tudo em infinitos servidores sem você mexer mais do que dois dedos?

Vixe, ele não entra no path sozinho e ainda tem que colocar variáveis de ambiente? (sem contar que você não pode colocar o Grails em diretórios que tenham espaços, acentos, nem no diretório raiz)

Quando você instala o Rails é só “gem install rails”, você não precisa ir a site algum pra fazer nada e ele mesmo se configura na sua máquina, sozinho. O meu Grails aqui não fez nadinha sozinho :slight_smile:

E Rails não roda na plataforma Java com JRuby?

Aiaiai, o cara programa em PHP e é um incompetente? Tipo, o Wordpress é em PHP, o YouTube é em PHP… preconceito faz mal rapaz, muito mal :lol:

Eu, pessoalmente, quase conto nos dedos os “escrevinhadores” Java que eu chamaria de programadores, não é porque o cara enche a boca pra dizer que programa em Java que ele sabe alguma coisa não, o que não falta no mercado é falador que não sabe fazer nada. Pelo menos a galera do PHP resolve os problemas, em vez de ficar discutindo o sexo dos anjos ou inventando compĺicação onde tudo poderia ser simples.

[quote=djemacao]Scala é interessante, e JRuby muito legal, mas a pergunta que fica é:
Scala tem um framework bacana pra Web? Se tiver, há salvação neste mundo :smiley: .[/quote]

Nada tema companheiro, o mundo ainda tem salvação => http://liftweb.net/index.php/Main_Page

:smiley:

[quote=Maurício Linhares][quote=djemacao]Scala é interessante, e JRuby muito legal, mas a pergunta que fica é:
Scala tem um framework bacana pra Web? Se tiver, há salvação neste mundo :smiley: .[/quote]

Nada tema companheiro, o mundo ainda tem salvação => http://liftweb.net/index.php/Main_Page

:smiley: [/quote]

Droga! Eu queria dormir :smiley: . Mas agora Maurício, vou ser obrigado a ver isso.
O pior é o vício. Num deveria ter passado isso. Agora já era. Bom, 4 da matina, lá vou eu.

Valeu :thumbup:

O lift é bem legal mas eu aind não consigo ver Scala como uma opção tão forte. Scala enquanto trabalho científico é fantástica mas a ausência de uma interface mais humana é problemática. Acho que a linguagem deveria seguir o princípio de Lisp. Apesar da problemática sintaxe Lisp tem uma vantagem: você não programa (muito) em lisp, programa em DSLs e por isso consegue lidar com complexidade muito alta de maneira muito simples.

Acho que a próxima grande linguagem vai trazer macros para o average joe. Ainda não vi a sombra dessa no horizonte, entretanto.

O Facebook é feito todo em PHP. E vale 15 bilhões de dólars. 2% foi vendido para a Microsoft por quase 300 milhões de dólares.

[quote=pcalcado]

Acho que a próxima grande linguagem vai trazer macros para o average joe. Ainda não vi a sombra dessa no horizonte, entretanto.[/quote]

Que os anjos digam amém.

Mas você acha mesmo que os average joes vão chegar nesse nível?

Eu não tenho mais tanta fé nisso.

Se a sintaxe for razoável, sim. Não é mais fácil criar um framework caseiro Java (mesmo que um podre) do que lidar com macros, o que ferra tudo é (1) sintaxe arcana e (2) mudar paradigma. O paradigma já está mudando…

Mas eu acho que isso é apenas um estado transitório pré–language workbenches. Quando passar essa fase acotnece o grande cisma de TI ™

[quote=pcalcado]Se a sintaxe for razoável, sim. Não é mais fácil criar um framework caseiro Java (mesmo que um podre) do que lidar com macros, o que ferra tudo é (1) sintaxe arcana e (2) mudar paradigma. O paradigma já está mudando…

Mas eu acho que isso é apenas um estado transitório pré–language workbenches. Quando passar essa fase acotnece o grande cisma de TI ™[/quote]

Mas você acha que o paradigma está mudando pra eles no curso prazo?

Eu ainda vejo tanta gente programando em JavaScript sem saber a diferença entre o nome da função sozinho e o nome da função com parênteses no final que eu não consigo ter fé de que isso mude tão cedo.

Não sei porque mas esse papo todo de macros me lembrou de Fortran :shock:

medo++

É difícil responder sua pergunta, o mundo de TI é assíncrono. O que para alguns e curto prazo para a maioria demora. EJB não demorou muito para ser ‘desmascarado’ mas demorou anos para ‘without EJB’ virar mainstream. Da mesma maneira linguagens para JVM só atingem o maisntream agora e existem há anos. Uma coisa é mais ou menos certa no padrão: o mainstream não saem do padrão nada. Os alpha-geeks criam ou pensam em algo, em algum tempo isso vai para o mainstream ou não. Não consigo lembrar de nada que não siga este padrão e tenha durado mais que uma tentativa frustrada de vender um produto.

Resumindo: os alpha-geeks estão correndo para isso. Mesmo pessoas que nunca se interessaram tanto por alguns conceitos (eu incluso) estão (re-)aprendendo as coisas básicas de linguagens de programação. Fatalmente isso ou chega no mainstream ou continua no mesmo saco de gatos onde se encontra a maioria dos avanços reais na área, como Lisp, Haskell e Smalltalk.

Eu possoe star errado mas pelo que sei macros FORTRAN estão mais para macros C do que macros Lisp. Macros em Lisp são funções din6amicas, não transformações estáticas de código, por isso C não ter nem perto do poder das macros de Lisp.

Então a hora agora é de cruzar os dedos e tentar dar uma empurrada nisso :slight_smile:

E falando em Smalltalk => http://squeakbyexample.org/