O documento discute alternativas para desenvolvimento de back-end mobile com Java EE, incluindo clientes móveis como aplicativos web, híbridos e nativos, e conectividade RESTful e WebSocket. Ele também descreve as APIs JAX-RS e Java API for WebSocket para desenvolvimento back-end com Java EE, além de abordar implementações em iOS e Android.
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));
}
...
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);
}
...
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
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?