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

1,341 views
1,195 views

Published on

Published in: Technology, Education
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total views
1,341
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
12
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. Alternativas ao Desenvolvimento do Back-end Mobile com Java EE Rodrigo Cândido da Silva @rcandidosilva http://about.me/rcandidosilva
  2. 2. Agenda ! ! ! ! !           Mobile Platform Mobile Clients RESTful WebSocket Plataforma Java EE !   JAX-RS !   Java API for WebSocket !   iOS !   Android !   DEMO !!!
  3. 3. Mobile Platform
  4. 4. Mobile Clients
  5. 5. 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
  6. 6. 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
  7. 7. RESTful
  8. 8. RESTful
  9. 9. 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
  10. 10. WebSocket Connected ! open open message Client message error message Server message close Disconnected
  11. 11. WebSocket Client Remote Endpoint Session Message Handler Remote Endpoint Internet Session Message Handler Client Remote Endpoint Session WebSocket Endpoint Client Message Handler
  12. 12. Java Enterprise Edition
  13. 13. 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
  14. 14. Java EE History Java EE 7   Java EE 6 Java EE 5 J2EE 1.4 J2EE 1.3 CMP, Connector Architecture Web Services Mgmt, Deployment, Async Connector Ease of Development, EJB 3, JPA, JSF, JAXB, JAX-WS, StAX, SAAJ Pruning, Extensibility Ease of Dev, CDI, JAX-RS JMS 2, Batch, TX, Concurrency, Interceptor, WebSocket, JSON   JAX-RPC, CMP/ BMP, JSR 88 Web  Profile     Servlet 3, EJB 3.1 Lite   Web  Profile     JAX-RS 2  
  15. 15. Java EE / Mobile Mobile Device Java API for WebSocket JAX-RS Java API for JSON JAXB Bean Validation Servlet EJB 3 JPA CDI JMS JTA JCA
  16. 16. 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
  17. 17. 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)); } ...
  18. 18. 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); } }
  19. 19. 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
  20. 20. 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); } ...
  21. 21. Exemplo WebSocket (2) ... @OnMessage public void message(String message, Session client) { for (Session peer : peers) { peer.getRemote().sendObject(message); } } }
  22. 22. 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
  23. 23. iOS com RestKit !   RestKit ! http://restkit.org ! ! ! ! !   Apache License   Core Data Support   Object Mapping   Pluggable Parser   MIME types, multi-part requests
  24. 24. 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
  25. 25. 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;
  26. 26. iOS com SocketRocket !   Open Connection !   Close Connection
  27. 27. 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
  28. 28. 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 );
  29. 29. 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."); } });
  30. 30. Demonstração ! Github ! http://github.com/rcandidosilva/javaee-mobile
  31. 31. 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?
  32. 32. Perguntas e Respostas ?
  33. 33. Iniciativas ! ! ! ! ! ! !   Eventos mensais;   Blog;   Redes sociais;   Listas de discussão;   Organização de eventos;   Projetos open source;  …
  34. 34. 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

×