Java 8 na prática
com Java EE 7
Michael Nascimento Santos
Agenda
●
●
●
●
●
●
Onde rodar?
Lambda
parallelStream() vs Concurrency Utilities
java.time com JSF / JPA / JAX-RS
Retenção de parâmetros
Default e static methods em interfaces
Onde rodar?
Usamos na maioria dos projetos
servidores open-source
Fizemos um estudo de onde rodar e
características de performance
Onde rodar?
● Suíte de testes
○ JSF (ViewAccessScoped, @PostConstruct,
Stateless e Stateful, com JDBC, com JPA…)
○ JAX-RS, mesmo que acima
○ JAX-WS
○ @Async / @Schedule
○ Ainda tá crescendo! :-)
Servidores
9.2.6
8.2
1.7.1
GlassFish 4.1
Onde rodar?
● TomEE: não tinha release que suportasse
Java EE 7
● Jetty:
○
○
○
○
EJBs com OpenEJB
Que depende de OpenWebBeans
Que carrega o mundo inteiro
E um monte de erros :-S
Onde rodar?
● GlassFish e WildFly
○ Pequenos glitches
○ Performance bastante próxima, com leve vantagem
para o GlassFish em casos de maior carga
○ WildFly ganhou (alegria do Janario)
Faça testes objetivos
para os seus cenários!
Lambda
Lambda
● Não elimina HQL / SQL / Whatever QL
● Cenários:
○ Processamentos massivos dos mesmos dados
○ Lógica complexa de negócios
○ Elementos que naturalmente já estão em RAM
parallelStream()
vs
Concurrency
parallelStream() vs Concurrency
● parallelStream() não foi pensado para Java
EE :-S
○ Falta de isolamento
○ Configuração dos pools
● Só resta usar stream() as is ou Concurrency
Utilities ou reescrever stream (me avisem!)
● Mais referências no fim dos slides
java.time com ...
Retenção de
parâmetros
Default e static
em interfaces
Default e static methods em
interfaces
● Default
○
○
○
○
Evolução de interfaces
Possível de implementar sem estado
Flexibilidade de hierarquia de classes
Uso de lambda
● Static
○ Factories
● No Java 9, private methods!
Conclusão
● Algumas coisas trazem valor imediato
(lambda & streams, default & static methods
em interfaces)
● Outras exigem esforço (java.time + Java EE,
retenção de parâmetros)
● Outras... não dá! (parallelStream())
● Java EE 8 vai melhorar as coisas!
Agradecimentos
● Janario Oliveira
● João Bosco Monteiro
● Rodrigo Santos
Obrigado!
[email protected]
Referências
● A Java™ Parallel Calamity (um pouco
exagerado)
● Think twice before using Java 8 parallel
streams
● Custom thread pool in Java 8 parallel stream
● When to use parallel streams
● Converters JPA (impl, não testei, só achei!)
Referências
● Mais converters JPA (também não testados)
● Issue para suportar java.time no Hibernate
(feita apenas para o 5.0)
● Issue para suportar java.time no JPA em si
● Issue para suporte do CDI ao Java SE 8
● Repeating annotations no Java EE
Download

Michael Nascimento Santos