SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Alternativas ao Desenvolvimento
do Back-end Mobile com
Java EE
Rodrigo Cândido da Silva
@rcandidosilva
http://about.me/rcandidosilva
Agenda
!
!
!
!
!

 
 
 
 
 

Mobile Platform
Mobile Clients
RESTful
WebSocket
Plataforma Java EE
!   JAX-RS
!   Java API for WebSocket

!   iOS
!   Android
!   DEMO !!!
Mobile Platform
Mobile Clients
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
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
RESTful
RESTful
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
WebSocket
Connected !

open

open

message

Client

message

error
message

Server
message

close

Disconnected
WebSocket

Client

Remote
Endpoint

Session

Message
Handler

Remote
Endpoint

Internet

Session

Message
Handler

Client

Remote
Endpoint

Session

WebSocket
Endpoint

Client

Message
Handler
Java Enterprise Edition
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
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
	
  
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
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
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));
}
...
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);
}
}
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
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);
}
...
Exemplo WebSocket (2)
...
@OnMessage
public void message(String message, Session client) {
for (Session peer : peers) {
peer.getRemote().sendObject(message);
}
}
}
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
iOS com RestKit
!   RestKit
! http://restkit.org

!
!
!
!
!

  Apache License
  Core Data Support
  Object Mapping
  Pluggable Parser
  MIME types, multi-part requests
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
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;
iOS com SocketRocket
!   Open Connection

!   Close Connection
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
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
);
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.");
}
});
Demonstração
! Github
! http://github.com/rcandidosilva/javaee-mobile
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?
Perguntas e Respostas

?
Iniciativas
!
!
!
!
!
!
!

  Eventos mensais;
  Blog;
  Redes sociais;
  Listas de discussão;
  Organização de eventos;
  Projetos open source;
 …
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

Contenu connexe

Similaire à Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Ramon Durães
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
JavaFX - Uma visão Geral
JavaFX - Uma visão GeralJavaFX - Uma visão Geral
JavaFX - Uma visão GeralEder Nogueira
 
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...iMasters
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoEder Magalhães
 
Apresentação LifeRay
Apresentação LifeRayApresentação LifeRay
Apresentação LifeRayPT.JUG
 

Similaire à Alternativas ao Desenvolvimento do Back-end Mobile com Java EE (20)

Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
 
Phonegap
PhonegapPhonegap
Phonegap
 
Html5
Html5Html5
Html5
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
JavaFX - Uma visão Geral
JavaFX - Uma visão GeralJavaFX - Uma visão Geral
JavaFX - Uma visão Geral
 
Netbeans Slides
Netbeans SlidesNetbeans Slides
Netbeans Slides
 
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Web2.0 e Ajax
Web2.0 e AjaxWeb2.0 e Ajax
Web2.0 e Ajax
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Lab
LabLab
Lab
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
React Native - JSday
React Native - JSdayReact Native - JSday
React Native - JSday
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Apresentação LifeRay
Apresentação LifeRayApresentação LifeRay
Apresentação LifeRay
 

Plus de Rodrigo Cândido da Silva

Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoRodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesRodrigo Cândido da Silva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesRodrigo Cândido da Silva
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSWorkshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSRodrigo Cândido da Silva
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootRodrigo Cândido da Silva
 
Workshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura MicroservicesWorkshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura MicroservicesRodrigo Cândido da Silva
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaTDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaRodrigo Cândido da Silva
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsRodrigo Cândido da Silva
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaRodrigo Cândido da Silva
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EERodrigo Cândido da Silva
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTRodrigo Cândido da Silva
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudRodrigo Cândido da Silva
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...Rodrigo Cândido da Silva
 

Plus de Rodrigo Cândido da Silva (20)

Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Cloud Native Java EE
Cloud Native Java EECloud Native Java EE
Cloud Native Java EE
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and Strategies
 
As novidades da nova versão do Java 9
As novidades da nova versão do Java 9As novidades da nova versão do Java 9
As novidades da nova versão do Java 9
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSWorkshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
 
Workshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura MicroservicesWorkshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura Microservices
 
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaTDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com Java
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com Java
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EE
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
 

Alternativas ao Desenvolvimento do Back-end Mobile com Java EE

  • 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 !!!
  • 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
  • 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
  • 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."); } });
  • 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?
  • 33.
  • 34. Iniciativas ! ! ! ! ! ! !   Eventos mensais;   Blog;   Redes sociais;   Listas de discussão;   Organização de eventos;   Projetos open source;  …
  • 35. 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