gujavasc - alternativas ao desenvolvimento do back-end mobile com java ee
TRANSCRIPT
![Page 1: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/3.jpg)
Mobile Platform
![Page 4: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/4.jpg)
Mobile Clients
![Page 5: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/7.jpg)
RESTful
![Page 8: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/8.jpg)
RESTful
![Page 9: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/12.jpg)
Java Enterprise Edition
![Page 13: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/13.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 14: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/14.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 15: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/26.jpg)
iOS com SocketRocket
! Open Connection
! Close Connection
![Page 27: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/30.jpg)
Demonstração
! Github
! http://github.com/rcandidosilva/javaee-mobile
![Page 31: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/32.jpg)
Perguntas e Respostas
?
![Page 33: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/33.jpg)
![Page 34: GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022060108/554f6d34b4c9058a148b5032/html5/thumbnails/35.jpg)
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