Fabio Velloso
Agenda Introdução e objetivos Java EE 7 WildFly 8 Conclusão
Agenda Introdução e objetivos Java EE 7 WildFly 8 Conclusão
Fabio Velloso Bio Bacharel em Ciência da Computação - UFSCar MBA FGV Desenvolvedor Java desde 1996 Fundador do SouJava Professor de SOA e Web Services do curso de Pós- Graduação "Lato-Sensu" em Desenvolvimento de Software para Web da UFSCar Atualmente desenvolve projetos pessoais com Big Data, Cloud Computing, Design Thinking, Service Design e Economia Criativa
Objetivos Apresentar novidades do Wildfly 8, funcionalidades evoluídas do JBoss AS 7 e novidades do Java EE 7 com exemplos executando no WildFly 8
O que é? Servidor Java EE da Red Hat Versão final lançada em 11 de fevereiro Em versões anteriores chamamos de JBoss Application Server Java EE 7 Compatible Full e Web profile Open Source JBoss EAP
Funcionalidades Java EE 7 Compatible Full e Web profile Novo servidor Web Redução de portas administrativas Avanços no jboss-cli Maior granularidade no controle de acesso Log de auditoria e papel de auditor Novo admin console Poliglota Suporte Java 8
Agenda Introdução e objetivos Java EE 7 WildFly 8 Conclusão
Java EE 7 API s
Java EE 7 API s RED Hat Web JSF 2.2 Fragments JSP 2.3 EL 3.0 JAX-RS 2.0 JAX-WS 2.2 JSON 1.0 WebSocket 1.0 CDI Extensions CDI 1.1 Interceptors 1.2, JTA 1.2 Servlet 3.1 Commons Annotations 1.1 Managed Bean 1.0 EJB 3.2 Concurrency 1.0 Bean Validation 1.1 JPA 2.1 JMS 2.0 JCA 1.7 Batch 1.0
Java EE 7 Novas APIs e funcionalidades Web modernas WebSockets Processamento assíncrono e listeners não bloqueantes (Servlets 3.1) JSON REST Processamento Batch Concurency Utilities JMS 2.0 CDI
Java EE 7 WebSocket - JSR 356 Full duplex e bidirecional comunicação sobre uma conexão TCP Chats, jogos RFC 6455 HTML 5 e JavaScript no client Não necessita uma nova conexão TCP a cada troca de mensagem entre server e client Faz o handshake via HTTP Upgrade Cliente inicia conexão através de uma URI Server aguarda conexão WebSocket que suporta multiplas conexões
Java EE 7 WebSocket - JSR 356 Cria o EndPoint e define a URL Payload da mensagem WebSocket Marca método para receber a mensagem WebSocket
Java EE 7 Batch API - JSR 352 API para processamento batch em Java EE Define modelo de programação e um runtime para tarefas a serem executadas Descrito em XML (Job XML) Job é a entidade que encapsula o processo batch Abstrações: job, step, reader, processor, writer Pode-se definir a sequência, tarefas concorrentes e particionar job em múltiplas threads
Java EE 7 Batch API Define o job fase de um job, independente e sequencial Bloco onde se define reader, processor e writer Item oriented processing, numero de itens no bloco JobOperator joboperator = BatchRuntime.getJobOperator(); long jobid = joboperato.start("slmplewildflyjob", new Properties());
Java EE 7 Batch API Valores de reader, processor e writer são nomes CDI de classes que implementam: ItemReader, ItemProcessor ou ItemWriter ou estendem classes abstratas (Reader e Writter)
Java EE 7 JSON Processing - JSR 353 Parser e geração de texto JSON Stream API Consumir forward read-only pull parsing Geração Par nome, valor JSON Objects JSON Arrays
Java EE 7 JSON Processing - JSR 353
Java EE 7 Concurrency - JSR 236 API para executar tarefas concorrentes em Java EE com segurança, garantindo a integridade do container Estende Java Concurrency Utilities para Java EE ManagedExecutorService é a versão Java EE de java.util.concurrent.executorservice Unidade a ser executada concorrentemente é chamada de task ManagedExecutorService pode implementar Runnable ou Callable Callable Task pode retornar valor e lançar checked exception
Java EE 7 Concurrency - JSR 236 Runnable ou Callable para definir a tarefa Injeção do ManageExecutor Submetendo a tarefa
Java EE 7 JMS 2.0 - JSR 343 Simplificação da API JMSContext combina em funcionalidades os objetos Connection e Session da JMS 1.1 JMSContext pode ser injetado via CDI JMS 1.1 necessita de um connection factory Java EE 7 tem factory padrão JMS 2.0
Java EE 7 JMS 2.0 - JSR 343 Cria recurso durante deploy Uso opcional Java EE 7 fornece connection factory padrão já configurada Interface simplificada Nome JNDI Mapeado
Java EE 7 JAX-RS 2.0 - JSR 339 Filters e Interceptors Processamento assíncrono Client API Validação Outras melhorias ResourceTemplate Link
JAX-RS 2.0 Client API Client API com todos objetos ClientBuilder gera objeto Client para processamento WebTarget define o path Define o media type Chamada HTTP GET Fluent API
JAX-RS 2.0 Asynchronous Processing @Suspended método assíncrono retorna void Nova thread retorna o resultado Executa na nova thread
Java EE 7 JAX-RS 2.0 e JSON Processing
Agenda Introdução e objetivos Java EE 7 WildFly 8 Conclusão
Redução de portas Uso de HTTP Upgrade Função Porta Protocolos Gerenciamento 9990 HTTP/JSON Management, HTTP Upgraded Remoting - Configuração mais simples de firewall Importante para Cloud (Native Management & JMX), Web Administration Console Aplicação 8080 HTTP (Servlet, JAX-RS, JAX-WS), Web Sockets, HTTP Upgraded Remoting (EJB Invocation, Remote JNDI) Múltiplas instâncias em um único server Overhead apenas no request/response HTTP Upgrade inicial
Undertow Novo Servidor Web integrado no WildFly 8 Servlet 3.1 container Suporte a Web Sockets Suporte a HTTP Upgrade Leve e flexível Alta performance APIs bloqueantes e não bloqueantes com NIO jar de aproximadamente 1MB utiliza menos de 4Mb de heap
Undertow mod_cluster HTTP load balancer MCMP (Mod Cluster Managed Protocol) Conexão adicional entre load balancer e back-end nodes se comparado com mod_jk e mod-proxy Recebe informações sobre undeploy e redeploy de aplicações Recalcula e gerencia melhor a carga Java fluent API
Undertow Criação de vários handlers ClientBuilder gera objeto Client para processamento Inicia a execução do processo em uma JVM
Server mode Dois server mode a partir do JBoss 7 Standalone e Domain Standalone Cada Application Server é uma instância independente Similar as versões do JBoss 4, 5 e 6 JBOSS_HOME/bin/standalone.sh JBOSS_HOME/standalone/configuration
Server mode Domain Múltiplos servidores gerenciados em um ponto central Físicos ou virtuais Cada servidor pode ter várias instancias de application servers sob controle de um processo Host Controller Host Controller é responsável por gerenciar o ciclo de vida dos servers Start - JBOSS_HOME/bin/domain.sh Configuração - JBOSS_HOME/domain/configuration
Domain mode Master Host Controller Fonte: http://blog.akquinet.de/2012/06/29/managing-cluster-nodes-in-domain-mode-of-jboss-as-7-eap-6/
jboss-cli Command line interface Disponível a partir do JBoss 7 Tarefas administrativas Domain e standalone Conectar com controller de um domínio ou domínio especifico Habilitar níveis de segurança (RBAC) Registrar módulos Deploy de aplicações, undeploy, status do deploy
Controle de acesso Dois modelos para controle de acesso Simples Padrão Usado no JBoss 7 Autentica e tem todos privilégios RBAC (Role Based Access Control) mais granular baseado em roles
Controle de acesso RBAC (Role Based Access Control) 7 roles pré-definidos Roles são conjuntos de permissões Permissões definem as ações que podem ser executadas lookup, read, write, start, shutdown Users e groups são definidos em roles Alteração de perfil utilizando jboss-cli editando o domain.xml Perfis armazenados em LDAP
Controle de acesso Perfis padrão Monitor: leitura de configurações e estado do servidor. Não pode acessar dados sensíveis. Deployer: Mesmas permissões do Monitor, porém pode efetuar deploy e undeploy. Operator: Estende o papel monitor. Permissões: Capaz de iniciar/parar um servidor. Maintainer: Capaz de modificar as configurações, exceto as informações sensíveis
Controle de acesso Perfis padrão Administrator: Capaz de modificar configurações, incluindo as informações sensíveis. Acesso irrestrito, exceto logs de auditoria. Auditor: Mesmas permissões do Monitor, pode ler dados sensíveis e logs de auditoria. SuperUser: Acesso irrestrito, equivalente o AS7 sem o RBAC.
Admin Console
Admin Console Adicionar usuário Habilitar RBAC Outra opção é editar o domain.xml e standalone.xml
Admin Console
Admin Console
Admin Console
Admin Console
Admin Console Simples Rapido Única instancia para vários domínios Grande evolução visual e funcional em comparação com outras versões API para estender as funcionalidades criar subsitemas dentro do JBoss Modules estender a console WEB
Logging Log de auditoria disponível a partir do AS 7 Log de acesso, autenticação e de operações administrativas Formatado em JSON Não é habilitado por padrão Habilitar log de auditoria com jboss-cli para o host controller Habilitar para todos servidores de um host controller
Logging Usuário admin criou um log Profile em que o log foi criado Operação add de criação do log
Automated Patching Mecanismo de Update Arquivos zip com update e metadado Uso do ClassLoader Modular Pode-se aplicar múltiplos patches Single Server ou múltiplas instâncias Standalone ou managed domain host Local ou remoto Servidor em execução, mas precisa restart Ferramenta atual é jboss-cli admin console não tem a funcionalidade
Suporte Cloud Wildfly quickckstart Criação de instância do WildFly via interface Web Métricas, Banco de dados e integração continua com Jenkins podem ser adicionados Criar a aplicação por linha de comando Acesso jboss-cli por SSH
Suporte Cloud
Suporte Cloud REST API BROKER
Suporte Cloud Wildfly clickstart Configura um build service, repository e uma aplicação de exemplo a basic Wildfly com continuous deployment e Maven Deploy manual Nomes JNDI JDBC Realm Maven e Jenkins
Outras novidades Compatibilidade com JDK 8 Hibernate Search Indexação para objetos com full text searching Múltiplos data sources, Infinispan e entidades de banco RESTEasy JAX-RS 2.0, JSON Web Encryption, Jackson, Yaml, JSON-P e Jettison Removido suporte a: CMP,JAX-RPC (JSR 101) e JavaTM EE Application Deployment (JSR-88)
IDEs Integrado com IDE s NetBeans 7 e 8 IDEA 13 JBoss Tools NetBeans 8, OpenJDK 8 e WildFly 8 Lambdas Plugin 1.0.7 funcional Plugin 1.0.4 com erros Stop e Restart
Agenda Introdução e objetivos Java EE 7 WildFly 8 Conclusão
Conclusão Suporte a Java EE 7 Rápido e leve Novo servidor Web HTTP Upgrade mod_cluster Melhor controle de acesso Interface administrativa melhorada Evoluções na administração por linha de comando Open Source
Referências WildFly - http://wildfly.org/8/ Permissões no WildFly - http://claudius.com.br/ 2014/02/permissoes-rbac-no-console-wildfly-8/ WildFly no OpenShift - https://www.openshift.com/ quickstarts/wildfly-8 WildFly na CloudBees - https://github.com/ CloudBees-community/wildfly8-clickstart Java EE samples - https://github.com/javaeesamples/javaee7-samples
OBRIGADO @fabiovelloso fabio@soujava.org.br fabiovelloso soujava.org.br facebook.com/soujava @soujava