O documento discute as vantagens e desvantagens de duas tecnologias populares para desenvolvimento web Java: Java EE e Spring Framework. Defensores de ambos os lados fazem argumentos sobre qual tecnologia é melhor ou mais apropriada para diferentes casos de uso. A discussão também aborda preocupações sobre a direção futura e manutenção de cada tecnologia.
História da evolução do Java EE e Spring Framework
1.
2. Era uma vez...
Havia uma tecnoologia
maltida from hell
chamada Java EE 1.4.
Essa tecnologia tinha um
filho chamado EJB 2.1.
E o mundo sofreu em dor
e ranger de dentes. E
ouve morte e desgraça
pelo mundo...
Precisa mesmo continuar?
8. Java EE não significa mais Java Evil Edition
Java EE faz tudo...
◦ Eu disse TUDO
TUDO MESMO (com negrito, itálico e sublinhado)
SIM, TUDO!!!!
...o que o Spring faz!
10. Spring é confuso
Spring é uma stack por si só
Java EE 6 já é bom o suficiente
Desenvolvimento Spring é lento
XML, XML, XML!!!
Chapolin ganha do Thor
12. Spring resolve problemas que Java Eenão
resolve
◦ MVC action based
◦ Processamento em lote
◦ Integração
◦ Acesso a dados não relacionais
◦ Implantado em qualquer servidor Java
◦ Big Data
14. Roo
Security
◦ Security OAuth
Shell
Social
◦ Social Facebook
◦ Social Twitter
Spring Web Flow
Spring Web
Services
Flex
Framework
For Apache
Hadoop
For Android
HATEOAS
Integration
LDAP
Mobile
AMQP
Batch
Spring Data
◦ JPA
◦ Data Commons
◦ JDBC Extensions
◦ MongoDB
◦ Neo4J
◦ Redis
◦ REST
◦ Solr
◦ GemFire
15. Anotações
Java Configuration
Spring Expression
Language
MVC
◦ Parte do Core
REST
Async
Declarative
◦ Validation
◦ Formatting
◦ Caching
◦ Scheduling
CDI – JSR 330
Beans Validation – JSR
303
Servlet 3.0
Spring Data
16. Nova casa: http://spring.io
◦ Documentação
Novos guias e tutoriais
Guias mais focados e rápidos de executar
Código „blank‟ inicial e código pronto para verificação
◦ Fóruns
◦ Blogs
◦ Informações sobre cada projeto
◦ Downloads
◦ ETC.
17.
18. Remoção de pacotes e métodos depreciados
Groovy
◦ BeanBuilder
◦ GenericGroovyApplicationContext
Definição condicional de Beans
◦ @Conditional
Spring Boot
Autowiring com Generics
Hypermedia - HATEOS
Messaging and Websockets
19. Suporte a Java 8
◦ IDE
IntelliJ 12
Spring Tool Suite - em fase de preview
◦ Lambda expressions
◦ Method references
◦ JSR-310 DateTime
◦ Repeatable annotations
◦ Parameter name Discovery
Advanced reflection support
◦ Parameter names on interfaces
21. Maior produtividade com Spring Boot
◦ Plataforma de criação rápida de aplicações
standalone
Basta rodar
Servidor embutido
◦ Pode criar war convencional
◦ Convenção sobre configuração
◦ Visão mais parcial da plataforma Spring
◦ Foco maior na aplicação e não no overhead
Bibliotecas
Configuração de servidores
Configuração da aplicação
22. Dados relacionais e tradicionais
◦ *Template
◦ Suporte a JPA
◦ Suporte a Hibernate
◦ JMS e AMPQ message brokers
◦ Suporte melhorado com Java 8
Lambda Expressions
23. Componente principal: repositório
◦ Repository Design Pattern
◦ Interface implementada em runtime
◦ Convenção sobre Configuração
24. NoSQL, NewSQL e NOSQL
JPA, Redis, MongoDB, Neo4J, ElasticSearch, S
OLR, CouchDB, Riak, ...
Não é uma solução pra tudo
É um guarda chuva
25. // automatically exposes a REST endpoint at /users/*
@RestResource (path = "users", rel = "users")
public interface UserRepository
extends PagingAndSortingRepository {
// select * from users where username = ?
User findByUsername(@Param("username") String username);
// select * from users
// where firstName =? or lastName = ? or username = ?
List findUsersByFirstNameOrLastNameOrUsername(
@Param("firstName") String firstName,
@Param("lastName") String lastName,
@Param("username") String username );
}
26. Ecosistema Hadoop passa, hoje, por
problemas que já enfrentamos antes
◦ Diversos projetos sendo desenvolvidos
independentemente
◦ Integração de frameworks é dolorosa
Spring for Apache Hadoop to the rescue
◦ HBase, Hive, Pig, Cascading e YARN
27.
28. Framework de integração no estilo descrito
em Enterprise Integration Patterns
Sistemas conectados através de channels
◦ Message queues
Diversos adaptadores
◦ FTPS, XMPP, JDBC, SFTP, Hadoop‟s HDFS, Twitter,
Splunk, JDBC, JMS, AMQP, Twitter, GemFire, etc…
29. Processamento de grandes quantidades de
dados sequenciais em lote
Baseado na JSR 352: Batch Applications for
the Java Platform
◦ Contribuição do Spring
Um job é composto de um ou mais passos
Cada passo contém
◦ Um ou mais ItemReader
◦ Um ou mais ItemProcessor
◦ Um ou mais ItemWriter
30.
31. Spring Batch + Spring
Integration + Esteróides
Sistema de
ingestão, processamento, anális
e e exportação de dados
◦ Extensível
◦ Unificado
◦ Distribuído
Vem ni mim, BigData!
32. Spring é uma implementação.
Java EE é uma especificação.
Dependência X Recursos
Contratos e suporte comercial
Skill da equipe
Paixão e fanboismo!
33. Eu só respeito sua opinião porque todo
mundo tem o direito de estar errado
34. O Spring precisa do Java EE assim como Java
EE Precisa do Java
Em projetos meus, prefiro usar Spring
Qual dos dois aprender? OS DOIS.
Após anos e anos, vejo que "padronizado" e
"novo" nem sempre quer dizer "melhor".
35. A comunidade Java já mostrou que manter
retrocompatibilidade faz parte da cultura
Java, que não é uma vantagem oferecida
apenas pelo JCP.
Java EE o padrão de direito, mas Spring ainda
é o Padrão DE FATO
◦ MAMILOS
37. Quanto tempo vai levar até que o Java EE
tenha um projeto de framework web action-
based?
Quanto tempo até o Spring e Java EE
convergirem e Spring se tornar (ou fornecer)
uma implementação Java EE?
Estaria a Oracle dominando o JCP, como a Sun
fez? Se sim, qual a diferença entre usar
Spring e Java EE?
38. A Oracle tem demonstrado um certo
“desrespeito” com os projetos opensource.
◦ Hudson/Jenkins, Open Office, Glasfish...
◦ Será que a longo prazo manterá o Java EE realmente
livre?
Spring é proprietário? As implementações
Java EE são realmente livres?
39. Podem perguntar o que quiserem. Se eu não
responder, existe um motivo pra isso: eu não
sei.