Java EE versus Spring: a visão de Bill Burke

51 respostas
P

Bill Burke anuncia uma futura morte do Spring. Bill Burke trabalha no grupo JBoss e sempre teve suas opiniões polêmcias:

Terminando com “For Java EE, it was either evolve or die. They evolved, now its time for Spring to die.”, Burke exprime diversos pontos.

Alguns fazem bastante sentido. O Java EE foi em direção a simplificação, quebrou muitas especificações e agora podemos utilizá-las sem precisar de um container full, colocando apenas o que é realmente necessário. O Spring parece ter indo para um lado um pouco mais complexo.

O que você está utilizando e o que você utilizará em seus próximos projetos Java? O CDI e as anotações realmente tornaram o Spring supérfluo?

51 Respostas

G

Paulo Silveira:
Bill Burke anuncia uma futura morte do Spring. Bill Burke trabalha no grupo JBoss e sempre teve suas opiniões polêmcias:

Terminando com “For Java EE, it was either evolve or die. They evolved, now its time for Spring to die.”, Burke exprime diversos pontos.

Alguns fazem bastante sentido. O Java EE foi em direção a simplificação, quebrou muitas especificações e agora podemos utilizá-las sem precisar de um container full, colocando apenas o que é realmente necessário. O Spring parece ter indo para um lado um pouco mais complexo.

O que você está utilizando e o que você utilizará em seus próximos projetos Java? O CDI e as anotações realmente tornaram o Spring supérfluo?

Eu pulei direto do Struts pro Seam

E agora vou de Seam3 em um novo projeto.

Na minha visão o spring hoje é sim tecnologia do passado.

P

Nos meus ultimos projetos acredito que em todos eu usei Spring. Nao apenas seu container de IoC, mas também pelo controle de transacoes, MVC, e integracao facil com outros frameworks. Atualmente estou terminando um projeto 100% JEE e gostei. Nao perde em nada para o Spring e nao senti falta ainda do mesmo.

T

Se o JavaEE é realmente o futuro do Java, então quem irá morrer será o próprio Java.

F

Não considero Spring morto nem um concorrente direto do Java EE, embora compartilhem muitas funcionalidades. A proposta do Spring é integrar diferentes frameworks em diferentes camadas, sendo a injeção de dependências apenas uma parte da história. Eles checam o que está sendo bem aceito no mercado e criam o gluecode com os frameworks das camadas de cima ou de baixo. Um exemplo é a integração que foi feita com o flex, que permite reaproveitar anotações das camadas de serviço ao invés de fazer configurações manuais.

A

Meu velho, me desculpe ou eu não entendi o que você quis dizer ou esse negócio que você fumou ta estragado, framework vem e vai, a tecnologia base fica.
O Struts 1 não morreu, quanto mais o spring, pode diminuir sua utilização pelos motivos padões (IOC, controle transacional para containers mais simples) no entanto o spring não e só isso.

Isso só foi mais água na minha cerveja de sábado a noite.

A

Respeito todas as opiniões…por mais polêmicas que sejam. Gosto muito de trabalhar com Spring apesar de ser implementação. Acho sim…que cada vez mais as especificações simplificarão a nossa vida no que se refere a desenvolvimento, mas também acredito na alta eficiência. Trabalhar com Spring, principalmente no contexto de iOc ainda, na minha opinião continua sendo predominante na opinião da maioria.

F

Também estou trabalhando em um projeto 100% JavaEE 6 com EJB 3.1, CDI, JPA 2 com Hibernate, JBoss 7 e etc e estou gostando muito. Sempre tinha trabalhado com Spring e não senti nenhuma falta dele até agora. Acho que morrer não vai pois em alguns casos como o de Flex citado, ele se integra muito bem, apesar de que o EJB não fica muito atrás, bastando ao invés de anotar a classe de Serviço, adicioná-la no remoting.config. Pra mim a vantagem do Spring em relação ao JavaEE era simplificar o desenvolvimento, o que hoje em dia não é tão necessário.

L

EJB deve ver forte entaum? pq pennso em implementar o Spring mas dps desse post tenho duvidas…

B

Meu velho, me desculpe ou eu não entendi o que você quis dizer ou esse negócio que você fumou ta estragado, framework vem e vai, a tecnologia base fica.
O Struts 1 não morreu, quanto mais o spring, pode diminuir sua utilização pelos motivos padões (IOC, controle transacional para containers mais simples) no entanto o spring não e só isso.

Isso só foi mais água na minha cerveja de sábado a noite.

O que é mesmo triste é quando a opinião de um blogueiro sobre um assunto é considero notícia na comunidade Java.

M

Muita gente não conhece o CDI e não sabe do que ele capaz. Enquanto solução de DI, é muito superior ao Spring.

A questão é que o Spring não é apenas DI e tem muitas APIs baseadas nele - e, diferentemente do que se vende, amarradas com ele. Se fosse feito um esforço para torná-las independentes do Spring, realmente o Java EE 6 enterraria o Spring.

Trolls em 3, 2… :slight_smile:

G

mister__m:
Muita gente não conhece o CDI e não sabe do que ele capaz. Enquanto solução de DI, é muito superior ao Spring.

A questão é que o Spring não é apenas DI e tem muitas APIs baseadas nele - e, diferentemente do que se vende, amarradas com ele. Se fosse feito um esforço para torná-las independentes do Spring, realmente o Java EE 6 enterraria o Spring.

Trolls em 3, 2… :slight_smile:

Eu concordo.

Eu penso que existem tecnologias que são referências e ficam como base para muitos e muitos sistemas, como foi o struts e claro o legado desses sistemas vai levar a muita gente ainda trabalhar com esse framework

Assim como Spring tem muitos e muitos sistemas, mas ficou no passado.

Os frameworks atuais aprenderam com os frames do passado e ficaram melhores, e assim vamos evoluindo.

Um exemplo pode ser o log4j e o slf4j.

Sistemas de ponta, ou de inovação irão usar novos frameworks até para testar se eles dão realmente conta e servirem como benchmark

Então naturalmente as tecnologias vão se sobrepondo.

V

Bill Burke blogueiro ?

Acredito que antes de categorizar o mesmo como um simples blogueiro, uma “googleada” em seu nome lhe traria alguns resultados que ilustrariam a importancia de pessoas como ele no cenário JAVA atual:

http://www.java.net/pub/au/10

Bill Burke is Chief Architect of JBossGroup, LLC. He is co-author of
O’Reilly’s “JBoss 3.0 Workbook” (
http://www.oreilly.com/catalog/entjbeans3/workbooks/index.html ) and
numerous other articles at www.onjava.com. His career has followed the
evolutionary path of distribued computing. He implemented parts of DCE
while at the parent company of Open Environment Corporation, CORBA as a
core-developer of Iona’s Orbix 2000 product, and J2EE as the lead of JBoss
4.0. Currently he is expanding JBoss to apply Aspect Oriented Programming
to distributed infrastructures.

Java Champion

Além disso, hoje ele é o principal responsável pelo RestEasy , umas das principais implementações da especificação REST para Java.

Por fim, vale ressaltar que como muito bem citado pelo Paulo Silveira, Bill Burke é uma pessoa de opiniões controversas e de personalidade forte, logo, o mais interessante sobre esse tópico/notícia não seria apenas aceitar isso como verdade única, mas sim, fomentar uma discussão baseada em argumentos técnicos sobre o tema proposto. Acho que todos ganhariam muito mais se escolhessemos esse caminho em nossas argumentações e opiniões.

mister__m:
Muita gente não conhece o CDI e não sabe do que ele capaz. Enquanto solução de DI, é muito superior ao Spring.

A questão é que o Spring não é apenas DI e tem muitas APIs baseadas nele - e, diferentemente do que se vende, amarradas com ele. Se fosse feito um esforço para torná-las independentes do Spring, realmente o Java EE 6 enterraria o Spring.

Acredito que o pessoal da Spring Source tenha tentado fazer isso separando o “Spring” em vários pequenos módulos (Spring Core, transactions, flow, etc…) mas na minha opinião esses módulos ainda são muito interdependentes, logo, não sei se valeu a pena em quebrar em tantos pequenos componentes.

Acho que grande vantagem do JBoss SEAM sobre o Spring além do suporte realmente a CDI, é que o mesmo agora se tornou parte da especificação, logo, de certa forma isso força a outros grandes players como IBM, Oracle, etc… a suportar essas features, ou seja, o Spring por acabaria ficando “sozinho” para brigar com esses caras.

Não conheço muito bem o JBoss Seam mas trabalhei bastante com Spring, gostei muito, porém acredito que o frameworks que suportem CDI tenham mais vantagens, recursos e facilidades a oferecer para propagação e gerenciamento de contextos do que propriamente Spring com seu “simples” DI.

F

Paulo Silveira:
Bill Burke anuncia uma futura morte do Spring. Bill Burke trabalha no grupo JBoss e sempre teve suas opiniões polêmcias:

Terminando com “For Java EE, it was either evolve or die. They evolved, now its time for Spring to die.”, Burke exprime diversos pontos.

Alguns fazem bastante sentido. O Java EE foi em direção a simplificação, quebrou muitas especificações e agora podemos utilizá-las sem precisar de um container full, colocando apenas o que é realmente necessário. O Spring parece ter indo para um lado um pouco mais complexo.

O que você está utilizando e o que você utilizará em seus próximos projetos Java? O CDI e as anotações realmente tornaram o Spring supérfluo?

Esse Bill Burke anuncio bobagem!

B

Posso ter visto poucos projetos utilizando Spring mas a grande maioria só o utilizava por conta de DI, ai fica o ponto, vale realmente a pena ter todas aquelas dependencias so por conta de DI/IoC ? sera que o pessoal ta realmente utilizando essa ferramenta de forma adequada ou o que ta rolando mesmo é muito modismo e arquitetura de caixinha ?

Um monte de CRUDS com implementações unicas e expecificas, ou em alguns casos até “generica” sendo injetada como implementação. Estamos fazendo isso de forma correta ?

F

benflodin:
Posso ter visto poucos projetos utilizando Spring mas a grande maioria só o utilizava por conta de DI, ai fica o ponto, vale realmente a pena ter todas aquelas dependencias so por conta de DI/IoC ? sera que o pessoal ta realmente utilizando essa ferramenta de forma adequada ou o que ta rolando mesmo é muito modismo e arquitetura de caixinha ?

Um monte de CRUDS com implementações unicas e expecificas, ou em alguns casos até “generica” sendo injetada como implementação. Estamos fazendo isso de forma correta ?


Com certeza, o que acontece é a modinha! Também acho que o que interessa do Spring é o IoC o resto pode ser resolvido com padrões de projeto.

F

Me Perdoem a ignorância, mas pq esse título Java EE versus Spring? Java EE é uma plataforma para servidores e Spring um framework o que o faz competir um contra o outro? :shock:

P

Bem, já te deram a resposta não é? O Bill Burke, para quem conhece bem Java EE e está por dentro do desenvolvimento dos servidores, dispensa apresentações. É um dos grandes nomes do Java.

P

Muitos dos objetivos dos dois se cruzaram há algum tempo: facilitar o desenvolvimento de aplicações “enterprise”

L

Eu sempre fui spring fanboy, mas honestamente, não tenho utilizado as últimas versões do JavaEE e pra ser sincero nem o Java 7. Então hoje em dia estou um pouco enferrujado.

Sinceramente, estou muito interessado em ver todas as novas features do Java mas antes disso, alguém poderia responder as seguintes perguntas pra mim por favor?

1- A inversão de controle é somente aquelas injeções de dependência utilizadas no EJB3 com @Resource e afins?
2- Como fica a questão de IoC em aplicações stand alone?
3- Sabemos que JBoss Seam é tri legal, desde a primeira versão. Entretanto, hoje em dia, as aplicações Seam continuam mega pesadas? Digo isso porque uma coisa é ter uma plataforma bonita e mega integrada com tudo, outra coisa é você alterar uma classe, dar publish e esperar 1 minuto pro servidor subir.
4- Como fica a questão de AOP estático no Java/JavaEE?
5- É complicado dizermos que Spring irá morrer porque, na minha opinião, as pessoas “tem uma visão muito superficial” do Spring. Qual parte do Spring que o JEE irá suprir?
6- Uma das coisas que eu mais gosto do Spring é a facilidade de criação de testes. Atualmente, como estão essas questões no JavaEE?
7- Existe algo hoje que substitua o Spring Security?

Uma constatação: O Spring está virando uma mega plataforma gigante, com N módulos, Cloud-computing etc. Parece que o grau de complexidade está ficando bastante alto e, pelos comentários dos users, parece que o JEE está indo exatamente para o lado contrário: simplicidade e “powerful”. Isso é ótimo! Parece que a Oracle e a comunidade estão andando bastante juntas para a evolução da plataforma. Gostei muito da notícia.

A

Só para colocar mais lenha na fogueira.

L

Olá

mister__m:
Muita gente não conhece o CDI e não sabe do que ele capaz. Enquanto solução de DI, é muito superior ao Spring.

A questão é que o Spring não é apenas DI e tem muitas APIs baseadas nele - e, diferentemente do que se vende, amarradas com ele. Se fosse feito um esforço para torná-las independentes do Spring, realmente o Java EE 6 enterraria o Spring.

Concordo 100%

O Spring ainda tem serventia em coisas que a ele foram acrescentadas. Concordo que a razão de existir o Spring tal como foi criado não existe mais. O Spring nasceu para facilitar coisas que hoje são fáceis.

Mas se for para usar o Seam ou JSF… me poupem…

Abraços
Luca Bastos

M

1 - Eu sou sempre a favor de usar a especificação padrão à ter que adicionar dependências externas, então, no caso da DI eu prefiro usar o J2EE puro a ter que adicionar o Spring no meu projeto, até porque a DI no J2EE 6 está muito simples de usar e fácil de entender.

2 - Como já falaram o Spring não é só DI

3 - Acredito que o J2EE vai está sempre atrás dos frameworks do mercado. O Spring já tinha DI bem antes do J2EE 6 ser lançado, então o JCP criou alguma JSR para atender esse requisito que ficou em discussão durante um tempo e enfim, foi implementado. Provavelmente será assim com outras boas tecnologias já existentes em frameworks externos a especificação padrão.

Então, minha conclusão é que, o J2EE 6 com certeza enterra o Spring em algumas funcionalidades, como é o caso da injeção de dependência, mas, existem outros módulos do Spring que o J2EE ainda não tem e portanto, não vai enterrar.

L

Também sempre usei Spring, mesmo porque na época dos EJB 2.x era inviável usar J2EE.

Mas com a chegada do JEE5 e principalmente do JEE6, as coisas ficaram muito melhor e a necessidade de se usar Spring (principalmente seu módulo core de DI/IOC) parece não existir mais.

Mas como já foi dito acima, o Spring é mais do que simplesmente DI/IOC/Aspectos.

M

ele não só tem grande importância pela responsabilidade dele em um dos servidores mais utilizados no mercado como também por ter escrito o livro mais usado para uma das certificações mais respeitadas desse universo java…

mas eu diria que o spring “como é hoje” não vai sobreviver no que se refere a projetos novos, sobrando legado… mas acredito também que novas versões virão… tem a história do container leve, o que é uma vantagem. Eu tenho a impressão que vai ter bastante gente que vai continuar usando spring com frameworks MVC que são baseados em actions… só um palpite… (eu mesmo gostei de CDI, JSF 2, do pacote em si eu gostei bastante, mas eu ainda acredito que o spring ainda vai sobreviver como concorrente).

K

Bom, li o artigo e discordo de alguns pontos.

“Spring Always Depended on Java EE” - discordo devido a minha própria experiência profissional com Spring. Sim, há vários wrappers no Spring que envolvem componentes do Java EE como JMS, JPA, Transações, etc, mas é importante lembrar um ponto aqui: estes wrappers nunca foram o core do Spring ou a razão de adoção principal do framework, mas sim o seu excelente container de injeção de dependências E o fato de podermos usar AOP sem muita dificuldade (AOP ainda não está no Java EE até aonde pude observar com tamanha facilidade quanto a que encontramos no Spring).

Na realidade, eu usava o Spring sem Java EE desenvolvendo aplicações desktop. Como meu cliente possuia inúmeros ambientes de deploy, o Spring caia como uma luva, porque bastava eu alterar o xml de configuração de beans, sem a necessidade de recompilação e voilá, configuração nova prontinha para o “ambiente hostil”. Até tentei simplificar o Spring em um experimento chamado miocc (http://miocc.itexto.com.br), mas no final das contas, me rendi ao container do Spring que era anos luz superior e sempre muito, MUITO leve. Sendo assim, discordo: o foco do Spring é o seu container DI E AOP, que ainda são excelentes E, mais interessante, oferecem uma flexibilidade de opções de configuração (XML, Anotações ou Java) que o Java EE ainda não oferece.

“Annotations were a game changer” - Se for pra pensar numa evolução do Java que mudou tudo, sem dúvida foi a introdução das anotações. Com elas se tornou possível incluir metadados nas nossas classes Java e uma gama monstro de soluções surgiu via reflexão. Infelizmente, dentre as novidades que vieram com as anotações foram os “xiitas anti-XML”. Enquanto há documentos XML monstruosos cuja manutenção é um inferno, muitos vendam os olhos para o fato de que também há monstruosidades usando anotações e com um “probleminha” a mais: ao contrário do XML, você não consegue externalizar anotações sem a necessidade de recompilação. No meu caso, em que era feito desenvolvimento de um produto para diversos ambientes, adivinha quem ganhava: anotações ou XML? XML NA VEIA.

(Outro ponto importante em prol do XML. No ambiente de produção, o analista de sistemas não pode contar com a recompilação do sistema, mas sim com alteração de configurações externalizáveis. Imaginem como seria um ambiente sem estes arquivos.)

“CDI closed API hole” - De novo discordo porque no caso do CDI, este está muito mais focado em aplicações Java EE do que “não EE”. Além disto, é interessante observar alguns fatos: o primeiro deles é que CDI é uma abstração em cima do conceito de injeção de dependências, assim como o JPA para ORM. Consequentemente, temos aqui o menor denominador comum. Sim, o Weld é lindo e tal, mas baseia-se em dois pontos que não são a última bolacha do pacote: auto wiring e anotações apenas. Quem já trabalhou com auto wiring sabe dos problemas que costumam acontecer quando o sistema cresce, e com relação ao uso exclusivo de anotações, como mencionei acima, há o problema de não serem fácilmente externalizáveis. (tenho 25 páginas de argumentação a este respeito http://www.itexto.net/devkico/?p=859 :smiley: )

“App Servers got their act together” - as pessoas não usavam Spring por causa do tempo de boot dos servidores, mas porque o modelo de desenvolvimento era superior por ser baseado em POJOs ao invés da implementação daquelas interfaces melequentas. Sim, havia o ganho do tempo de boot, é claro, mas convém lembrar que mesmo hoje, com servidores que startam em segundos, desenvolver e testar contra estes servidores, versus desenvolver e testar versus POJOs não é só mais eficiente na questão tempo, mas performance também.

“Arquillian made a mock of mocks” - ai há um problema na argumentação sério também. Bill Burke diz que um dos fatores da “derrota” do Spring é que um outro projeto, fora da especificação Java EE surgiu??? E outra: quem aqui adotou o Spring ao invés da especificação padrão Java EE por causa das suas funcionalidades de teste que atire a primeira pedra. Nunca encontrei ninguém.

F

Bom gente…o carro chefe do spring foi sempre fazer o “ligthware” container sempre justificando o uso no lugar dos container pesados JEE.
E para quem já viu…o “web profile” realmente é um completo “ligthware” que se encaixa da mesma forma…
Mas o spring tem varios outros produtos e motivações para existir…é leque de coisas bem extenso.
Acho que ele sofrer uma queda de preferencia por causa do web profile…mas morrer eu acredito que não.

L

Olá

kicolobo:

“Annotations were a game changer” - Se for pra pensar numa evolução do Java que mudou tudo, sem dúvida foi a introdução das anotações. Com elas se tornou possível incluir metadados nas nossas classes Java e uma gama monstro de soluções surgiu via reflexão. Infelizmente, dentre as novidades que vieram com as anotações foram os “xiitas anti-XML”. Enquanto há documentos XML monstruosos cuja manutenção é um inferno, muitos vendam os olhos para o fato de que também há monstruosidades usando anotações e com um “probleminha” a mais: ao contrário do XML, você não consegue externalizar anotações sem a necessidade de recompilação. No meu caso, em que era feito desenvolvimento de um produto para diversos ambientes, adivinha quem ganhava: anotações ou XML? XML NA VEIA.

Sempre lembrei disso quando alguém tentava provar de que configuração prográmatica só tem vantagens. Já passei por caso bem semelhante ao seu. A gente mudava coisas sem fazer novo deploy (e sem JMX). Basta fazer o sistema reler o arquivo quando percebe mudança.

Resumindo… não há bala de prata. Mas infelizmente tem framework que não aceita configuração se não for dentro do código.

Abraços
Luca Bastos

K

Existe um outro ponto que ainda justifica o Spring como solução “light weight”. As pessoas costumam achar que “light weight” é igual a “consumir menos recursos computacionais”.
Não é nada disto. Um framework “light weight” é aquele que é mínimamente intrusivo, ou seja, que não requer que você altere o código fonte de suas classes para que funcionem com ele.

No caso do Java EE, não temos um framework tão “leve” assim, porque o simples fato de você incluir uma anotação em uma classe já adiciona acoplamento (mesmo que apenas estático) entre esta e o framework em questão. No caso do Spring, usando XML você pode reaproveitar o seu código legado sem precisar “tocar” no mesmo. Sendo assim, pra manter código legado (e código legado não quer dizer código ruim, mas aquele que simplesmente FUNCIONA), Spring ainda é uma das soluções mais “leves” que existem hoje.

A

Acho que falta um tom de imparcialidade aí. Até porque, não sei se todos aqui do fórum sabem, mas o Bill Burke é muito parcial nesse ponto por diversos motivos:

  1. Ele esteve bastante envolvido no desenvolvimento do mecanismo de EJB como um todo (não me lembro até que ponto, só lembro que foi bastante!)
  2. Ele é bastante passional quando se trata do Rod Johnson (como visto em parágrafos como:

Além disso, tem um post daqui que mostra a ‘guerrinha’ entre os dois: http://www.guj.com.br/java/82044-bill-burke-ejb-x-rod-johnson-spring

  1. Ele trabalha na JBoss, que tem um dos AS’s mais famosos e, obviamente, depende do sucesso da especificação padrão de JavaEE.
  2. A mesma JBoss desenvolveu o Seam, que por sua vez, conteve as primeiras versões de injeção de dependências em JavaEE como conhecidas hoje.

Ou seja… torço para ver a resposta do Rod Johnson logo. Mas também, torço para que isso não se torne simplesmente uma guerrinha de egos (como, aliás, já houve entre os dois antes).

D

Acho a discussão bastante saudável mas não gosto da postura do Bill e algumas respostas do tipo "Good luck with that"
Queria ver mais argumentos técnicos do que este tipo de resposta… Essa guerrinha de egos não leva a nada, é patético.
Eu uso muito Spring porque o container que uso é bem lento em acompanhar as especificações e por restrições do negócio utilizar containers recem saidos do forno é um risco muito grande… Claro que gostaria de usar a versão mais nova do container assim que liberada mas não dá pra pesar só o fator tecnológico em uma base muita grande de aplicações instaladas… Com o Spring consigo moldar as aplicações para técnicas recentes sem ter que atualizar meu container e assim na hora que puder usar o que o jee me fornece como padrão o trabalho de migração é bem menos traumático.

L

até porque, vendo esse Bill Burke, podemos ver que toda a empresa tem o seu Steve Balmer que merece

D

Na realidade, eu usava o Spring sem Java EE desenvolvendo aplicações desktop. Como meu cliente possuia inúmeros ambientes de deploy, o Spring caia como uma luva, porque bastava eu alterar o xml de configuração de beans, sem a necessidade de recompilação e voilá, configuração nova prontinha para o “ambiente hostil”.

“Annotations were a game changer” - Se for pra pensar numa evolução do Java que mudou tudo, sem dúvida foi a introdução das anotações. Com elas se tornou possível incluir metadados nas nossas classes Java e uma gama monstro de soluções surgiu via reflexão. Infelizmente, dentre as novidades que vieram com as anotações foram os “xiitas anti-XML”. Enquanto há documentos XML monstruosos cuja manutenção é um inferno, muitos vendam os olhos para o fato de que também há monstruosidades usando anotações e com um “probleminha” a mais: ao contrário do XML, você não consegue externalizar anotações sem a necessidade de recompilação. No meu caso, em que era feito desenvolvimento de um produto para diversos ambientes, adivinha quem ganhava: anotações ou XML? XML NA VEIA.

Não sei se entendi o que você disse de maneira correta, mas felizmente, no cenário JEE6 a parte de diversas regras de negocio para ambientes diferentes de deploy é uma tarefa extremamente simples e configurável por XML. Não que eu seja contra o spring, acho uma ferramenta extramente válida, assim como o CDI do JEE… mas nesse ponto… não consigo encontrar uma diferença que me faria optar pelo Spring.

B

Quanto diferente eram esses ambientes ? se eram apenas application servers tem algo errado não ?

K

Quanto diferente eram esses ambientes ? se eram apenas application servers tem algo errado não ?

Cara, eram extremos. No caso, precisavamos reaproveitar a nossa lógica de negócio não só entre servidores de aplicação diferentes, mas em versões do sistema que eram desktop. (yeap, estas coisas acontecem)

J

FernandoFranzini:
Bom gente…o carro chefe do spring foi sempre fazer o “ligthware” container sempre justificando o uso no lugar dos container pesados JEE.
E para quem já viu…o “web profile” realmente é um completo “ligthware” que se encaixa da mesma forma…
Mas o spring tem varios outros produtos e motivações para existir…é leque de coisas bem extenso.
Acho que ele sofrer uma queda de preferencia por causa do web profile…mas morrer eu acredito que não.

Concordo. Os “Web Profile” sao realmente lightweight. Passei a usar o Java EE 6 com CDI, EJB3.1, JPA e etc…e ate hoje nao senti mais falta do Spring.
Acho que o Bill falou uma das coisas mais importantes. Mesmo com a demora da saida do Java 7, o Java e as especificações evoluiram MUITO, ao contrario do Spring. Para aqueles que ja viram ate o roadmap do java EE 7, vai encontrar ideias promisoras.
Tambem nao acho que vai morrer, afinal tem sempre alguem que continua usando.

E isso é assim mesmo, vale lembrar que o hibernate ja foi um dia unico e exclusivo. Hoje JPA 2 virou referencia e Hibernate apenas uma implementação. Spring é a mesma coisa.

D

Cara, mas é só anotar suas classes com @Alternative, implementar a mesma interface e voila… Depois é só mudar no beans.xml e mudar a regra de negocio em tempo de execução…

K

Cara, mas é só anotar suas classes com @Alternative, implementar a mesma interface e voila… Depois é só mudar no beans.xml e mudar a regra de negocio em tempo de execução…

Yeap, hoje. Mas naquela época não tinhamos isto.
Além do que, eram ambientes muito variados, por exemplo: tinham implantações que só podiam executar no notebook de um sujeito sem conexão a rede (monstruosidades deste tipo).

No caso do CDI, temos esta possibilidade hoje, mas mesmo assim, quando você vai ler a especificação, percebe que é um negócio muito preso ao servidor de aplicações ainda (eu sei que você pode usar o Weld fora de um servidor).

A

Mas eu penso que é até “natural” esse tipo de atitude do Bill Burke pelo seu envolvimento com o EJB e, como disse o colega asaudate, ele é da Jboss, que depende diretamente
da adoção e do sucesso das especificações. Um outro exemplo é a própria documentação do Seam (que é um framework que gosto muito), fica claro que é um framework que “encoraja” e “incentiva” o uso de EJBs. Apesar disso, achei um pouco triste esse texto, pois me pareceu que a postura do Burke foi algo como “agora o JEE está foda, vou fazer um post descascando aquela merda do Spring, harn harn harn”. Gosto muito do Spring, é uma ferramenta que a meu ver agrega muito valor ao Java. Particularmente, não vejo o que a comunidade teria a ganhar com a “morte” do Spring; Bill Burke, ao contrário, parece estar comemorando. Lamentável.

Sobre a adoção das especificações, eu penso que é uma coisa boa para o Java, de qualquer forma. Quando eu programava em C#, que Deus me perdoe hehe, eu aprendia como mexer com o .NET Framework e a API disponível, e eu sabia que aquele era o jeito de se fazer as coisas com C#. Uma das coisas que me atraiu pro Java foi a grande gama de frameworks que temos disponíveis, mas penso que isso eleva a curva de aprendizado da plataforma, no sentido de que se alguém novato posta aqui no GUJ “como eu faço isso em Java?”, as respostas provavelmente serão “no framework X é assim, no framework Y é assado”. Apesar das várias opções de frameworks que temos disponíveis acredito que há esse outro lado, onde essa mesma variedade de escolha pode “atrapalhar”. Nesse ponto de vista acho que as padronizações e especs são importantes sim.

B

Fora que dá para usar Spring no Java SE, há de se apontar que só muito recentemente que os todos principais application servers enterprise, Oracle WebLogic 12c, IBM WebSphere 8, JBoss AS 7.1 e Apache Geronimo 3.0-beta-1 foram certificados em Java EE 6 Full Profile, 2 anos após a aprovação da especificação do Java EE 6 (sob vários protestos e a saída da Apache da JCP).

Nesse meio tempo, e também das vezes passadas com as outras versões, o Spring estava lá segurando muito bem as pontas.

R

asaudate:
Acho que falta um tom de imparcialidade aí. Até porque, não sei se todos aqui do fórum sabem, mas o Bill Burke é muito parcial nesse ponto por diversos motivos:

Parcial ou não, penso que suas opiniões estão virando, cada dia mais, um lugar comum.


Rei

A

ReinaldoVale:
asaudate:
Acho que falta um tom de imparcialidade aí. Até porque, não sei se todos aqui do fórum sabem, mas o Bill Burke é muito parcial nesse ponto por diversos motivos:

Parcial ou não, penso que suas opiniões estão virando, cada dia mais, um lugar comum.


Rei

S

Trabalhei com as 2 tecnologias, de uns 4 anos para cá muito mais com Spring, apesar de em alguns momentos ter utilizado alguns produtos como RestEasy e RichFaces da JBoss.

Bil Burke é um dos monstros do mundo Java, com certeza muito do que ele disse no post realmente faz muito sentido. Só achei que a “porrada” que ele deu no Spring mostra o quanto estavam preocupados e incomodados com o sucesso do Framework.

O legado EJB 2 e App Servers “inchados e lentos” deixaram muita gente com pé atrás quanto a sua utlização. Quem aqui por muitas vezes não teve sucesso com Spring x Jetty rodando leve leve…

É o tal negócio, antes um rival por perto, te fazendo sempre buscar a excelência, do que sozinho. Ex: “Na cidade que moro, temos apenas uma opção para Telefonia e Internet. O que acontece? Preços abusivos, serviços horríveis”. Concorrência é tudo…

R

O Bill Burke poderia até ser o maior arquiteto da história da computação.

Porém, seu post é cheio de opiniões e não possui argumentos para validar suas afirmações.

Não é um post técnico, como mencionado pelo colega, e por isso não é uma notícia Java.

Mesmo considerando a importância do autor, o post foi digno de “blogueiro”.

Tem muito mais apelo passional e político do que técnico no artigo.

Uso Spring e continuarei usando. Ainda existe uma diferença arquitetural entre o Spring e o uso de CDI + Annotations que podem levar a preferência de arquitetos por uma ou outra tecnologia. O JEE não tornou o Spring supérfluo, apenas chegou no ponto onde o Spring já está. Vamos dizer que agora os dois são concorrentes em pé de igualdade.

M

Alguns pontos:

[list]CDI roda tranquilamente no Java SE com o Weld, por exemplo. Este tipo de uso será padronizado na versão 1.1[/list]
[list]Não usar versões novas de servidor de aplicação por medo de incompatibilidades, mas usar Spring por poder migrar a qualquer momento mostra apenas que a gestão do seu ambiente de produção foi muito mal definida, já que o objetivo era ter um stack estável e testado. E engraçado que é um argumento recorrente de quem usa Spring[/list]
[list]O CDI permite que seus metadados sejam definidos por qualquer mecanismo, uma vez que possui o conceito de extensions. O Seam Solder Config, por exemplo, permite, via xml, adicionar ou remover anotações de beans declarativamente ou criar instâncias configuradas de forma diferente de um mesmo bean. Qualquer outro mecanismo de configuração poderia ser implementado via extension. Configurações dinâmicas podem ser feitas combinando JMX com producers[/list]
[list]Quem acha que o Spring e o CDI estão em igualdade enquanto container DI precisa ler a spec do CDI direito. Apenas como exemplo trivial, comparem a facilidade de se fazer injeção de dependências com base no contexto em que a dependência aparece (ex: injetar um Logger com base na classe que contém a declaração dele) usando ambos[/list]

B

Sobre a morte do Spring eu duvido bastante. Pelo historico das versoes, o Spring vem dando soluções muito mais elegantes do que o EJB.
Foi assim na maior parte do tempo.

E sobre testes, o EJB ainda tem que evoluir um bocado, não acham? Ter features como CDI para justificar o uso de EJB é pouca vantagem.
O Spring sempre fez isso e muito bem. Outra vantagem são as abstrações que ele faz sobre a especificação, sempre tornando as coisas mais fáceis.
Além de ser muito mais leve.

Sobre testes, o SpringTest sempre foi fácil de usar e vou dizer, é uma complicação testar componentes do EJB.

Fico pensando que componentes ‘de servidor’ como EJB não são testaveis. rsrs

L

blackthorne,

O arquillian (http://www.jboss.org/arquillian) ajuda bastante em testes de EJB diretamente no container.

B

tudo bem LucianoM86, mas voce usa ele em todos os seus projetos com EJB?
Eu uso o spring-test sim, em todos.

L

Nos que tenho participado tenho usado sim, afinal preciso fazer os testes de alguma forma.

Assim como testo aplicações Spring também (com Spring-test ou diretamente), que aliás gosto bastante.

H

Eu acredito que o Spring não vai morrer…

O que acontece é que todos os frameworks e implentações evoluem.
O que está acontecendo com o JEE atualmente é a simplificação. Simplificação essa que absorveu muitas das idéias do Spring. JEE está evoluindo, melhorando.

O Spring também vai continuar evoluindo e simplificando.

Ambos vão evoluir buscando as melhores funcionalidades de cada um. É isso que motiva as mudanças.

P

Spring morrer difícil heim, na maioria dos projetos sérios que trabalhei era adotado o Spring.
O que eu vejo é que tentam fazer com que a comunidade engula JEE 6 com opiniões tendenciosas, na minha opinião o Spriing suportara as features do JAVA EE, Não gosto do JSF 2 vai fazer telas complexas de verdade, preterir JPA a Hibernate acho muito complicado, será que preciso mesmo usar EJB?
Integrações com legados?
Testes?
Produtividade?
Suporte a Rest transparente?
Suporte a Hibernate 4 ?
Suporte a tecnologias RIA?

L

Luca:
Olá

kicolobo:

“Annotations were a game changer” - Se for pra pensar numa evolução do Java que mudou tudo, sem dúvida foi a introdução das anotações. Com elas se tornou possível incluir metadados nas nossas classes Java e uma gama monstro de soluções surgiu via reflexão. Infelizmente, dentre as novidades que vieram com as anotações foram os “xiitas anti-XML”. Enquanto há documentos XML monstruosos cuja manutenção é um inferno, muitos vendam os olhos para o fato de que também há monstruosidades usando anotações e com um “probleminha” a mais: ao contrário do XML, você não consegue externalizar anotações sem a necessidade de recompilação. No meu caso, em que era feito desenvolvimento de um produto para diversos ambientes, adivinha quem ganhava: anotações ou XML? XML NA VEIA.

Sempre lembrei disso quando alguém tentava provar de que configuração prográmatica só tem vantagens. Já passei por caso bem semelhante ao seu. A gente mudava coisas sem fazer novo deploy (e sem JMX). Basta fazer o sistema reler o arquivo quando percebe mudança.

Resumindo… não há bala de prata. Mas infelizmente tem framework que não aceita configuração se não for dentro do código.

Abraços
Luca Bastos

Normalmente não se tem acesso direto ao ambiente de produção. Toda alteração precisará ser testada e agendada para deploy em uma determinada janela. Por causa disso XML é um problema, pois apenas complica o desenvolvimento.

Sempre busquei evitar o uso de XML por causa disso, mas já fui obrigado a trabalhar em aplicações enormes (que usavam Spring) com arquivos XML de milhares de linhas. É um horror para dar manutenção, pois perde-se a verificação em tempo de compilação.

Spring sempre foi ruim, mesmo antes do advento dos Annotations.

Sobre Java EE vs. Spring só tenho a dizer: Graças a Deus. Agora sim poderemos trabalhar de uma forma sã.

Criado 17 de março de 2012
Ultima resposta 3 de abr. de 2012
Respostas 51
Participantes 34