Java EE Patterns Dan Bugariu. What is Java EE ? What is a Pattern ?
GUJavaSC - Java EE 7 In Action
-
Upload
rodrigo-candido-da-silva -
Category
Technology
-
view
672 -
download
3
Transcript of GUJavaSC - Java EE 7 In Action
![Page 1: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/1.jpg)
Java EE 7 In Action Rodrigo Cândido da Silva
@rcandidosilva http://about.me/rcandidosilva
![Page 2: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/2.jpg)
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
![Page 3: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/3.jpg)
Plataforma Java
! Java SE ! Java ME ! Java EE
![Page 4: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/4.jpg)
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
![Page 5: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/5.jpg)
Java Enterprise Edition
![Page 6: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/6.jpg)
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...
![Page 7: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/7.jpg)
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
![Page 8: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/8.jpg)
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
![Page 9: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/9.jpg)
Java EE 7 Themes
![Page 10: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/10.jpg)
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)
![Page 11: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/11.jpg)
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
![Page 12: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/12.jpg)
WebSocket 1.0
Server Client
Connected !
open open
close
message
message
error
message message
Disconnected
![Page 13: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/13.jpg)
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
![Page 14: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/14.jpg)
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
![Page 15: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/15.jpg)
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
![Page 16: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/16.jpg)
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
![Page 17: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/17.jpg)
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
![Page 18: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/18.jpg)
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
![Page 19: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/19.jpg)
Concurrency Utilities
! Define uma API simples e padronizada para utilização de concorrência, sem comprometer a integridade do container
![Page 20: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/20.jpg)
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
![Page 21: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/21.jpg)
JSON API 1.0
! API para parser e geração JSON ! Streaming API ! Object Model API ! Realiza o binding de JSON para objetos Java
![Page 22: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/22.jpg)
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)
![Page 23: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/23.jpg)
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)
![Page 24: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/24.jpg)
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)
![Page 25: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/25.jpg)
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
![Page 26: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/26.jpg)
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
![Page 27: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/27.jpg)
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
![Page 28: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/28.jpg)
Java Message Service 2.0 Old Client API
![Page 29: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/29.jpg)
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); }
![Page 30: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/30.jpg)
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
![Page 31: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/31.jpg)
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
![Page 32: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/32.jpg)
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
![Page 33: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/33.jpg)
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
![Page 34: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/34.jpg)
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
![Page 35: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/35.jpg)
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
![Page 36: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/36.jpg)
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
![Page 37: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/37.jpg)
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
![Page 38: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/38.jpg)
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…
![Page 39: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/39.jpg)
Demonstração
![Page 40: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/40.jpg)
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?
![Page 41: GUJavaSC - Java EE 7 In Action](https://reader035.fdocuments.in/reader035/viewer/2022081401/556605fbd8b42a2a4d8b5227/html5/thumbnails/41.jpg)
Perguntas e Respostas
?