gujavasc - java ee 7 in action

Post on 28-May-2015

672 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Java EE 7 In Action Rodrigo Cândido da Silva

@rcandidosilva http://about.me/rcandidosilva

Agenda !   Plataforma Java EE !   Java EE 7

!   Web Socket API 1.0 !   Batch API 1.0 !   Concurrency Utilities !   JSON API 1.0 !   JAX-RS 2.0 !   Java Message Service 2.0 !   JavaServer Faces 2.2 !   Bean Validation 1.1 !   Java Persistence API 2.1 !   Outras APIs

Plataforma Java

!   Java SE !   Java ME !   Java EE

Java Enterprise Edition

!  Suporte ao desenvolvimento de aplicações “enterprise” !  Aplicações distribuídas, seguras, escaláveis, de alta

disponibilidade e com baixo custo de manutenção

!  Plataforma para desenvolvimento de software de pequeno, médio e grande porte em múltiplas camadas de componentes !  Componentes “rodam” em um servidor Java EE

Java Enterprise Edition

Java Enterprise Edition

!  Serviços oferecidos pelos containeres Java EE: !  Gestão de memória, ciclo de vida de objetos !  Conexões, Transações, Serviço de nomes !  Segurança !  Tolerância a falhas !   Integração !  WebServices !  Clustering !  Alta disponibilidade !  Confiabilidade...

Java EE History

J2EE 1.3 CMP, Connector Architecture

J2EE 1.4 Web Services Mgmt, Deployment, Async Connector

Java EE 5 Ease of Development, EJB 3, JPA, JSF, JAXB, JAX-WS, StAX, SAAJ

Java EE 6 Pruning, Extensibility Ease of Dev, CDI, JAX-RS

Web  Profile    Servlet 3, EJB 3.1 Lite  

Java EE 7  JMS 2, Batch, TX, Concurrency, Interceptor, WebSocket, JSON  

Web  Profile    JAX-RS 2  

JAX-RPC, CMP/ BMP, JSR 88

Top 10 no Java EE 6

!   EJB packaging no WAR !   Type-safe deployment injection !   Deployment descriptors opcionais (web.xml, etc) !   Padronização do Facelets no JSF !   EJB em apenas uma classe !   Extensibilidade para Servlets e CDI !   CDI events !   EJBContainer API !   @Schedule baseado no modelo Cron !   Web Profile

Java EE 7 Themes

Java EE 7 Overview

Connector 1.6

Managed Beans 1.0 EJB 3.2

Servlet 3.1

Portable Extensions

JSF 2.2 JAX-RS 2.0

Bea

n Va

lidat

ion

1.1

JMS 2.0 JPA 2.1

EL 3.0

JTA 1.2

JSP 2.2

Interceptors 1.1 CDI 1.1 Common

Annotations 1.1

Updated Major Release

New

Concurrency Utilities (JSR 236)

Batch Applications (JSR 352)

Java API for JSON (JSR 353)

Java API for WebSocket (JSR 356)

WebSocket 1.0

!  Web Socket !  Modelo de mensagem bi-direcional, full-duplex, TCP !  Definido pelo W3C

!  Web Socket API 1.0 !  Modelo de programação para Web Sockets da

plataforma Java !  Anotações (@ServerEndpoint, @ClientEndpoint)

!  Lifecycle callback handlers !  Permite empactá-los em aplicações Java EE

WebSocket 1.0

Server Client

Connected !

open open

close

message

message

error

message message

Disconnected

WebSocket 1.0

Web

Soc

ket

End

poin

t

Client

Client

Client

Remote Endpoint

Remote Endpoint

Remote Endpoint

Session

Message Handler

Session

Message Handler

Session

Message Handler

Internet

WebSocket 1.0

@ServerEndpoint(”/chat”) public class ChatServer { Set<Session> peers = ... @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } ...

Connection Lifecycle

WebSocket 1.0

... @OnMessage public void message(String message, Session client) throws IOException { for (Session session : peers) { if (!session.equals(client)) { session.getRemote().sendObject(message); } } } }

WebSocket Communication

Batch API 1.0

!  Serve para executar tarefas não-iterativas e processos longos

!  Processamento computacional intensivo !  Pode ser executado em sequencial ou paralelo !  Pode ser inicializado com:

!  Chamada adhoc !  Agendado

!  Não há uma API de agendamento incluída

Batch API 1.0

!  Job: um processo a ser executado !  Step: uma fase do job a ser executada !  JobOperator: gerencia o ciclo do processamento !  JobRepository: metadados dos jobs

Batch API 1.0

<step id=”sendStatements”> <chunk reader=”accountReader” processor=”accountProcessor” writer=”emailWriter” item-count=”10” /> </step>

@Named(“accountReader") ...implements ItemReader... { public Account readItem() { // read account using JPA

@Named(“accountProcessor") ...implements ItemProcessor... { Public Statement processItems(Account account) { // read Account, return Statement

@Named(“emailWriter") ...implements ItemWriter... { public void writeItems(List<Statements> statements) { // use JavaMail to send email

Step Example

Concurrency Utilities

!  Define uma API simples e padronizada para utilização de concorrência, sem comprometer a integridade do container

Concurrency Utilities

public class TestServlet extends HTTPServlet { @Resource(name=“concurrent/MyExecutorService”) ManagedExecutorService executor; Future future = executor.submit(new MyTask()); class MyTask implements Runnable { public void run() { ... // Task logic } } }

Managed Task Executor

JSON API 1.0

!  API para parser e geração JSON !  Streaming API !  Object Model API !  Realiza o binding de JSON para objetos Java

JSON API 1.0

[

{

"type": "home”, "number": "212 555-1234"

},

{

"type": "fax”, "number": "646 555-4567"

}

]

JsonArray value =

Json.createArrayBuilder()

.add(Json.createObjectBuilder()

.add("type", "home")

.add("number", "212 555-1234")

)

.add(Json.createObjectBuilder()

.add("type", "fax")

.add("number", "646 555-4567")

)

.build();

Writing JSON (Object Model API)

JSON API 1.0

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

Event event = parser.next(); // START_OBJECT

event = parser.next(); // KEY_NAME

event = parser.next(); // VALUE_STRING

String name = parser.getString(); // "John”

Reading JSON (Streaming API)

JAX-RS 2.0

!  Definição de APIs para cliente !  Validar parâmetros via Bean Validation !  Processamento assíncrono (server-side) !  Possível definir filtros e interceptadores !  Content negociation (server-side) !  Suporte a Hypermedia (processar links)

JAX-RS 2.0

// Get instance of Client Client client = ClientBuilder.newClient(); // Get customer name for the shipped products String name = client.target(“../orders/{orderId}/customer”) .pathParam(”orderId", ”10”) .queryParam(”shipped", ”true”) .request() .get(String.class);

Client API

JAX-RS 2.0

public class RequestLoggingFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { log(requestContext); // Non-wrapping => returns without invoking next filter } ... }

Logging Filter

Java Message Service 2.0

!  Menos verboso !  Redução de “boilerplate code” !  Suporte a injeção de dependência !  Connection, Session e outros objetos são

automaticamente finalizados (obj.close()) !  Simplificação na API do Java SE e EE

Java Message Service 2.0 Old Client API

Java Message Service 2.0 Simplified API

@Inject private JMSContext context; @Resource(mappedName = "jms/inboundQueue") private Queue inboundQueue; public void sendMessage (String payload) { context.createProducer().send(inboundQueue, payload); }

JavaServer Faces 2.2

!  Suporte ao Flow Faces !   Integração com HTML 5 !  Utilização filas para múltiplas requisições Ajax !   Injeção em todos os artefatos JSF (lifecycle +

converters + validators) !  Novos componentes: FileUpload & BackButton !  Mais simples:

!  Tag Handler não é mais necessário !  URLs compactas para mapear TagLibraries

JavaServer Faces 2.2

<html> ... <input type=“color” jsf:value=“#{colorBean.color2}” /> <input type=“date” jsf:value=“#{calendarBean.date1}” /> ... </html>

Pass-Through HTML 5 Components

JavaServer Faces 2.2 @Named @FlowScoped(id="flow-a") public class FlowABean implements Serializable { public String getName() { return "FlowABean"; } public String getReturnValue() { return "/return1"; } @Produces public Flow getFlow(FlowBuilder builder) { builder.startNode("router1"); builder.flowReturn("success").fromOutcome("/complete"); builder.flowReturn("errorOccurred").fromOutcome("error"); builder.switchNode("router1") .navigationCase().condition("#{facesFlowScope.customerId == null}") .fromOutcome("create-customer") .defaultOutcome("view-customer"); builder.viewNode("create-customer"); builder.viewNode("maintain-customer-record"); builder.methodCall("upgrade-customer") .method("#{maintainCustomerBean.upgradeCustomer}").defaultOutcome("view-customer"); builder.initializer("#{maintainCustomerBean.initializeFlow}"); builder.finalizer("#{maintainCustomerBean.cleanUpFlow}"); return builder.getFlow(); } }

Faces Flow

Bean Validation 1.1

!   Integração com outras especificações !  Validação em parâmetros e/ou retorn de métodos !  Validação elementos de uma coleção !  Constraint composition com OR

Bean Validation 1.1

public void placeOrder( @NotNull String productName, @NotNull @Max(“10”) Integer quantity, @Customer String customer) { . . . } @Future public Date getAppointment() { . . . }

Method Level Constraints

Java Persistence API 2.1

!  Schema generation !  Persistence Contexts não sincronizados !  Bulk update/delete using Criteria API !  User-defined functions using FUNCTION !  Stored Procedure Query

Java Persistence API 2.1

!   javax.persistence.schema-generation.[database|scripts].action !   “none”, “create”, “drop-and-create”, “drop”

!   javax.persistence.schema-generation.scripts.[create|drop]-target !   javax.persistence.schema-generation.[create|drop]-script-source !   javax.persistence.sql-load-script-source !   javax.persistence.schema-generation.[create|drop]-source

!   “metadata”, “script”, “metadata-then-script”, “script-then-metadata”

Schema Generation Properties

Java Persistence API 2.1

@Entity @NamedStoredProcedureQuery(name="topGiftsStoredProcedure”, procedureName="Top10Gifts") public class Product { StoredProcedreQuery query = EntityManager.createNamedStoredProcedureQuery( "topGiftsStoredProcedure"); query.registerStoredProcedureParameter(1, String.class, ParameterMode.INOUT); query.setParameter(1, "top10"); query.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN); query.setParameter(2, 100); . . . query.execute(); String response = query.getOutputParameterValue(1);

Stored Procedures

Outros APIs

!  Servlet 3.1 !   Non-blocking I/O, upgrade to WebSocket, security…

!  CDI 1.1 !   Global enablement, @AroundConstruct, @Vetoed…

!  EL 3.0 !   Lambda expressions, collections, operators, standalone API

!  EJB 3.2 !   Truncating CMP/BMP…

Demonstração

Java EE 8 !   JSON-B !   JCache !   More CDI/EJB alignment !   CDI.next() !   Cloud, PaaS, multitenancy/SaaS !   JMS.next()? !   JAX-RS.next()? !   Security? !   Modularity? !   NoSQL? !   Action-oriented Web framework/HTML 5?

Perguntas e Respostas

?

top related