Your SlideShare is downloading. ×
GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

911
views

Published on

Published in: Technology, Education

1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
911
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Alternativas ao Desenvolvimento do Back-end Mobile com Java EE Rodrigo Cândido da Silva @rcandidosilva http://about.me/rcandidosilva
  • 2. Agenda ! ! ! ! !           Mobile Platform Mobile Clients RESTful WebSocket Plataforma Java EE !   JAX-RS !   Java API for WebSocket !   iOS !   Android !   DEMO !!!
  • 3. Mobile Platform
  • 4. Mobile Clients
  • 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. 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. RESTful
  • 8. RESTful
  • 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. WebSocket Connected ! open open message Client message error message Server message close Disconnected
  • 11. WebSocket Client Remote Endpoint Session Message Handler Remote Endpoint Internet Session Message Handler Client Remote Endpoint Session WebSocket Endpoint Client Message Handler
  • 12. Java Enterprise Edition
  • 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. 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. 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. 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. 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. 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. 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. 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. Exemplo WebSocket (2) ... @OnMessage public void message(String message, Session client) { for (Session peer : peers) { peer.getRemote().sendObject(message); } } }
  • 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. iOS com RestKit !   RestKit ! http://restkit.org ! ! ! ! !   Apache License   Core Data Support   Object Mapping   Pluggable Parser   MIME types, multi-part requests
  • 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. 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. iOS com SocketRocket !   Open Connection !   Close Connection
  • 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. 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. 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. Demonstração ! Github ! http://github.com/rcandidosilva/javaee-mobile
  • 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. Perguntas e Respostas ?
  • 33. Iniciativas ! ! ! ! ! ! !   Eventos mensais;   Blog;   Redes sociais;   Listas de discussão;   Organização de eventos;   Projetos open source;  …
  • 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

×