GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

35
Alternativas ao Desenvolvimento do Back-end Mobile com Java EE Rodrigo Cândido da Silva @rcandidosilva http://about.me/rcandidosilva

Transcript of GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Page 1: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Alternativas ao Desenvolvimento do Back-end Mobile com

Java EE Rodrigo Cândido da Silva

@rcandidosilva http://about.me/rcandidosilva

Page 2: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Agenda

!   Mobile Platform !   Mobile Clients !   RESTful !   WebSocket !   Plataforma Java EE

!   JAX-RS !   Java API for WebSocket

!   iOS !   Android !   DEMO !!!

Page 3: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Mobile Platform

Page 4: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Mobile Clients

Page 5: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Mobile Clients !   Web Apps

! Aplicações server-side que rodam no navegador web do dispositivo !   HTML 5, CSS 3, JavaScript ! jQuery Mobile, Sencha Touch !   Web designs responsivos e adaptativos

!   Hybrid Apps ! Desenvolvida utilizando tecnologias web, mas são executadas como uma aplicação

nativa através de um container nativo (wrapper) ! PhoneGap, ADF Mobile, IBM Worklight, AeroGear, Appcelerator

!   Native Apps ! Desenvolvida para uma plataforma específica ! Aplicação instalada !   Object-C/xCode, Java/Eclipse etc

Page 6: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Conectividade Client/Server

!  RESTful !   Comunicação através do HTTP utilizando REST style !   Leve, stateless e escalável !   Utiliza tipicamente JSON over HTTP.

!   XML também pode ser utilizado

!   Cliente inicia a requisição !   Utiliza verbos HTTP como GET, POST, PUT, DELETE !   Utiliza as tecnologias web existentes

Page 7: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

RESTful

Page 8: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

RESTful

Page 9: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Conectividade Client/Server

!  WebSockets !   Oferece comunicação bi-direcional (full-duplex) através

de uma simples conexão TCP !   Inicia através de um hand-shake através do protocolo

HTTP, mas as conversações utilizam o protocolo WebSockets.

!   Suporte requisições assincronas !   Perfeito para aplicações como chat e jogos !   Utiliza as tecnologias web existentes

Page 10: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

WebSocket

Server Client

Connected !

open open

close

message

message

error

message message

Disconnected

Page 11: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

WebSocket

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 12: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Java Enterprise Edition

Page 13: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com 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

Page 14: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

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 15: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Java EE / Mobile

EJB 3

Servlet

CDI

JPA

JAX-RS

Bean Validation

Java API for WebSocket

Java API for JSON

JMS JTA

Mobile Device

JAXB

JCA

Page 16: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

JAX-RS

!  REST development API for Java !  Server and client !  Programação declarativa com anotações

!  @Path, @GET, @POST, @PUT, @DELETE, @PathParam, @QueryParam, @Produces, @Consumes

!  Plugável e extensível !  Providers, filters, interceptors

Page 17: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Exemplo JAX-RS (1)

@Path("/atm/{cardId}") public class AtmService { @GET @Path("/balance") @Produces("text/plain") public String balance( @PathParam("cardId") String card, @QueryParam("pin") String pin) { return Double.toString(getBalance(card, pin)); } ...

Page 18: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Exemplo JAX-RS (2)

... @POST @Path("/withdrawal") @Consumes("text/plain") @Produces("application/json") public Money withdraw( @PathParam("card") String card, @QueryParam("pin") String pin, String amount) { return getMoney(card, pin, amount); } }

Page 19: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Java API for WebSocket

! Programação declarativa com anotações !  Client and server-side !  Powerful API

!  @ServerEndpoint, @OnOpen, @OnClose, @OnMessage, @OnError, Session, Remote

!  Plugável e extensível !  Encoders, decoders, sub-protocols

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

Page 20: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Exemplo WebSocket (1)

@ServerEndpoint("/chat") public class ChatBean { Set<Session> peers = Collections.synchronizedSet(…); @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } ...

Page 21: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Exemplo WebSocket (2)

... @OnMessage public void message(String message, Session client) { for (Session peer : peers) { peer.getRemote().sendObject(message); } } }

Page 22: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

iOS

!  Fornece suporte nativo para REST e JSON !  Existem bibliotecas externas como RestKit

!  Não possui suporte nativo à WebSocket !  Pode-se utilizar bibliotecas externas como

SocketRocket !  SSL é suportado para conexões REST e

WebSocket

Page 23: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

iOS com RestKit

!  RestKit ! http://restkit.org

!  Apache License !  Core Data Support !  Object Mapping !  Pluggable Parser !  MIME types, multi-part requests

Page 24: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

iOS com SocketRocket

!  OpenSource library para WebSocket ! http://github.com/square/socketrocket

!  Apache 2.0 License !  Suite para testes de regressão !  Suporte WebSockets seguros !   Implementação através de proxy

!  SRWebSocketDelegate

!  Simples integração para com os projetos

Page 25: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

iOS com SocketRocket

!  Delegate Methods !   Message Message Callback

!  (void)webSocket:(SRWebSocket*)webSocket didReceiveMessage:(id)message;

!   WebSocket Open Operation !  (void)webSocketDidOpen:(SRWebSocket*)webSocket;

!   WebSocket Connection Failed !  (void)webSocket:(SRWebSocket*)webSocket didFailWithError:(NSError*)error;

!   WebSocket Failed !  (void)webSocket:(SRWebSocket*)webSocket didCloseWithCode:(NSInteger)codereason:(NSString*)reason wasClean:(BOOL)wasClean;

Page 26: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

iOS com SocketRocket

!  Open Connection

!  Close Connection

Page 27: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Android !   Suporte nativo Apache HTTPClient !   Suporte nativo JSON libraries

!   Jackson !   GSON

!   Bibliotecas externas para suporte REST !   Spring Android RestTemplate !   RESTDroid !   JAX-RS/Jersey Client APIs on Android

!   Bibliotecas externas para WebSocket !   Autobahn Android !   Android WebSockets from CodeButler !   WebSocket/Tyrus Client APIs on Android

Page 28: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Spring Android RestTemplate

RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new

MappingJacksonHttpMessageConverter()); restTemplate.getMessageConverters().add(new

StringHttpMessageConverter());

ResponseEntity<ToDoResponse> response = ResponseEntityrestTemplate.exchange( urlStr, HttpMethod.POST,

new HttpEntity<ToDoItem>(todoItem, httpHeaders), ToDoResponse.class );

Page 29: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Autobahn WebSockets Client private final WebSocketConnection mConnection = new WebSocketConnection(); ... mConnection.connect(wsuri, new WebSocketHandler() {

@Override public void onOpen() { mConnection.sendTextMessage("Hello, world!"); } @Override public void onTextMessage(String payload) { Log.d(TAG, "Got echo: " + payload); } @Override public void onClose(int code, String reason) { Log.d(TAG, "Connection lost."); } });

Page 30: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Demonstração

! Github

! http://github.com/rcandidosilva/javaee-mobile

Page 31: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Boas Práticas !   REST vs. WebSocket

!   REST para maioria das situações, WebSocket apenas para comunicações full-duplex, bidirecionais

!   JSON vs. XML !   JSON é a melhor opção

!   Aonde deve-se armazenar os dados !   Geralmente no client-side, sincronizando/persistindo no server-side

!   API design !   Coarse grained, stateless, general purpose

!   Security !   TLS, federated (OAuth), evite dados confidenciais no client-side

!   Development model !   Native -> Hybrid -> HTML 5?

Page 32: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Perguntas e Respostas

?

Page 33: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
Page 34: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Iniciativas

!  Eventos mensais; !  Blog; !  Redes sociais; !  Listas de discussão; !  Organização de eventos; !  Projetos open source; !  …

Page 35: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Como Colaborar

!   Blog: ! http://www.gujavasc.org

!   Facebok: ! https://www.facebook.com/groups/gujavasc

!   Twitter ! https://twitter.com/gujavasc

!   Google+ ! https://plus.google.com/communities/102439827020596326242

!   Github ! https://github.com/gujavasc