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