jsf & rest

71
Monday, July 27, 2009

Upload: eduardo-bregaida

Post on 25-Dec-2014

3.506 views

Category:

Technology


5 download

DESCRIPTION

Apresentação realizada na IT Training Sábado dia 25/07.

TRANSCRIPT

Page 1: JSF & REST

Monday, July 27, 2009

Page 2: JSF & REST

JavaServer Faces &

RESTEduardo Bregaida

Monday, July 27, 2009

Page 3: JSF & REST

Monday, July 27, 2009

Page 4: JSF & REST

Você vai gostar

Monday, July 27, 2009

Page 5: JSF & REST

Quem Sou?• Desenvolvedor Java há 5 anos;

• Possui experiência com J2SE, J2EE nas empresas:

• Saargummi do Brasil LTDA, 3º Quadrante Informática, G&P, JAPI Informática LTDA, SOS Computadores, Tata Consultancy Services - TCS (ABNAMRO Bank, VisaNet, Cardif), IT Training, Masterdom (PRODESP), Possege (Co-Fundador) como Analista de Sistemas Java;

• Agente certificador do Projeto de ensino a distância JEDI no grande ABC em São Paulo:

• Membro do JCP - Java Community Process;

• Certificado IBM em Message Broker Developer Solution;

• Certificado Scrum Master;

• Criador do Blog Java Anywhere - www.javawora.blogspot.com

• Coordenador e palestrante em diversos eventos de Java.

Monday, July 27, 2009

Page 6: JSF & REST

Monday, July 27, 2009

Page 7: JSF & REST

CQ Teste

Primeira Pergunta:O que é JSF?

Monday, July 27, 2009

Page 8: JSF & REST

Monday, July 27, 2009

Page 9: JSF & REST

JSF?

Monday, July 27, 2009

Page 10: JSF & REST

Monday, July 27, 2009

Page 11: JSF & REST

JSF?

Monday, July 27, 2009

Page 12: JSF & REST

Monday, July 27, 2009

Page 13: JSF & REST

JSF?

Monday, July 27, 2009

Page 14: JSF & REST

Monday, July 27, 2009

Page 15: JSF & REST

Não é nada disso, a resposta certa

É:

Monday, July 27, 2009

Page 16: JSF & REST

JSF - Java Server Faces

Monday, July 27, 2009

Page 17: JSF & REST

O que é JSF?

•É mais do que um framework, é uma especificação baseada em MVC;•Suporte a internacionalização;•Facilita criação de telas;•Facilita a transferência dos dados entre telas e camadas de negócio através da EL.•Produtividade para conversores recebidos do formulário para os tipos nas classes;•Flexibilidade para renderização.•Criar modelos simples de eventos entre interfaces gráficas e as classes no servidor.•Mecanismos produtivos para validação de campos na tela.•Facilidade para criação de componentes;

Monday, July 27, 2009

Page 18: JSF & REST

Especificações• JSF 1.0 e 1.1 – JSR 127

– Problemas com renderização– ELs diferentes entre JSP e JSF– Não portava a tag JSTL <c:forEach>

• JSF 1.2 – JSR 252– Resolveram todos os problemas de incompatibilidade, pois o JSF 1.2 e o JSP 2.1 tiveram muitas

uniões e estão dentro do JEE.

• JSF 2.0 – JSR 314– Novo ciclo de vida na parte do cliente (Browser);– Escopo de navegação, antes utilizado através do MyFaces Tomahawk, JBoss Seam e Spring

Annotation;– Adeus XML, configurações via Annotations;– Exception Handler, quando ocorrer um erro direcionamos para uma página de erro;– Templating;– Subimissão Via GET, antes só podia via POST;– AJAX nativo;– Serviços JSF sendo acessador via REST;– E muito mais, acompanhe pelo JCP a especificação.

Monday, July 27, 2009

Page 19: JSF & REST

Managed Beans•É uma classe que expões objetos de negócio para camada de apresentação;

•São Registrados no faces-config.xml;

•Objetos que sofrerão alterações em seus atributos durante uma requisição, assim como seus métodos podem ser chamados a partir de um command;

•São como as Actions do Struts, porém os form beans são injetados por setters dentro do seu próprio bean;

•Os ManagedBeans serão usados na EL das páginas.

Monday, July 27, 2009

Page 20: JSF & REST

EL - Expression Language

•É uma poderosa linguagem de expressão (Linguagem de navegação) para acessar propriedades de beans e coleções.

•Quando ocorrer uma requisição pelo browser é preenchido dinamicamente os elementos da página pela camada de negócios.

•Quando ocorre um Submit ocorre a modificação no estado da camada de negócio.

Monday, July 27, 2009

Page 21: JSF & REST

Roteiro de Uso

Monday, July 27, 2009

Page 22: JSF & REST

Roteiro Básico

1.Criar um bean que represente o formulário;2.Criar os DAOs;3.Criar um controlador (Handler) que leia os dados do formulário, chame a

lógica de negócio, guarde os resultados em beans e tenha um retorno;4.Criar os JSP´s responsáveis por cada retorno declarado;5.NUNCA Esqueça: <f:view> e <h:form> para formulários;6.Especificar o Action Controller com o atributo de ação

<h:commandButton>;7.O faces-config é usado para declarar o form bean e as regras de

navegação.

Monday, July 27, 2009

Page 23: JSF & REST

Exemplo de Código

Monday, July 27, 2009

Page 24: JSF & REST

Bean

• @Entity

public class Ponto { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private Double latitude; private Double longitude; private Double raio; private boolean status; private String descricao;

//getters and setters}

Monday, July 27, 2009

Page 25: JSF & REST

DAOpublic class pontoDAO {

private Session session;

private Logger logger = Logger.getLogger(Ponto.class);

public pontoDAO(Session session) { logger.info("Construtor" + session); this.session = session;

}

public void salvar(Ponto ponto) { session.saveOrUpdate(ponto); }

public void excluir(Ponto ponto) { session.delete(ponto); }

public Ponto selecionar(Ponto ponto) { return (Ponto) session.load(Ponto.class, ponto.getId()); }

}

Monday, July 27, 2009

Page 26: JSF & REST

Managed Beanpublic class PontoHandler { private Ponto ponto = new Ponto(); public void selecionaDados() { Session session = HibernateUtil.getCurrentSession(); DAO<Ponto> dao = new DAO<Ponto>(session, Ponto.class); dao.load((long) ponto.getId()); }

public Ponto getPonto() { return ponto; }

public void setPonto(Ponto ponto) { this.ponto = ponto; }

public List<Ponto> getAllPonto() { Session session = HibernateUtil.getCurrentSession(); DAO<Ponto> dao = new DAO<Ponto>(session, Ponto.class); return dao.list(); }

public void carregar(ActionEvent event) { UIComponent comandLink = event.getComponent(); UIParameter parameter = (UIParameter) comandLink .findComponent("editId"); Long id = (Long) parameter.getValue(); Session session = HibernateUtil.getCurrentSession(); DAO<Ponto> dao = new DAO<Ponto>(session, Ponto.class); this.ponto = dao.load(id);

}

public void excluir(ActionEvent event) { UIComponent comandLink = event.getComponent(); UIParameter parameter = (UIParameter) comandLink .findComponent("editId"); Long id = (Long) parameter.getValue(); Session session = HibernateUtil.getCurrentSession(); DAO<Ponto> dao = new DAO<Ponto>(session, Ponto.class); this.ponto = dao.load(id); dao.deleta(ponto); this.ponto = new Ponto();

}

}

Monday, July 27, 2009

Page 27: JSF & REST

JSP<f:view> <h:form id="menuId"> <t:panelGrid align="center"> <h:selectOneMenu title="Linha" value="#{pontoHandler.ponto.linha}" converter="simpleIndexConverter"> <t:selectItems value="#{horarioHandler.allLinhas}" var="c" itemLabel="#{c.nome}" itemValue="#{c}" /> </h:selectOneMenu> <h:outputText value="Latitude:" styleClass="titulo_campos" /> <h:inputText value="#{pontoHandler.ponto.latitude}" required="true" validator="#{validadorHandler.validaNumeroReal}" /> <h:commandButton styleClass="BUTTON_imagem" value="Gravar" action="#{pontoHandler.salvar}" /> </t:panelGrid> </h:form> <h:form> <!-- Mostra as msgs de erro--> <h:messages style="color:red" /> </h:form> <h:form> <t:panelGrid align="center"> <h:dataTable value="#{pontoHandler.allPonto}" id="tabelaDados" rows="5" var="p" border="1" rendered="#{not empty pontoHandler.allPonto}" styleClass="EDIT_BACKGROUND" headerClass="cabecalho" rowClasses="linha1,linha2"> <h:column> <f:facet name="header"> <h:outputText value="ID" /> </f:facet> <h:outputText value="#{p.id}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Latitude" /> </f:facet> <h:outputText value="#{p.latitude}" /> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Exclus‹o" /> </f:facet> <h:commandLink actionListener="#{pontoHandler.excluir}"> <h:outputText value="Excluir" /> <f:param id="excluirId" name="id" value="#{p.id}" /> </h:commandLink> </h:column> </h:dataTable> <t:dataScroller for="tabelaDados" paginator="true" paginatorMaxPages="10"></t:dataScroller> </t:panelGrid> </h:form></f:view>

Monday, July 27, 2009

Page 28: JSF & REST

Faces Config<?xml version="1.0"?>

<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>

<application> <message-bundle> messages </message-bundle> </application><managed-bean> <managed-bean-name>pontoHandler</managed-bean-name> <managed-bean-class>br.com.possege.nx.handler.ponto.PontoHandler</managed-bean-class> <managed-bean-scope>session</managed-bean-scope></managed-bean>

<navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>menuCadastroPonto</from-outcome> <to-view-id>/ponto.jsp</to-view-id> </navigation-case></navigation-rule>

Monday, July 27, 2009

Page 29: JSF & REST

Run Forrest, Run

Monday, July 27, 2009

Page 30: JSF & REST

IDEs Java

•Netbeans

•Eclipse– EasyEclipse– MyEclipse– Red Hat Developer Studio

•Rational Application Developer – WSAD/RAD

•JDeveloper

Monday, July 27, 2009

Page 31: JSF & REST

Customizações

Monday, July 27, 2009

Page 32: JSF & REST

Customizações

•Facilidade na customização de:–Validadores–Conversores–Componentes de Interface–Renderizadores–Mensagens

Monday, July 27, 2009

Page 33: JSF & REST

Mudando o Default

Monday, July 27, 2009

Page 34: JSF & REST

Mudando o Default

•Montagem de templates: como Clay (Shale) e Facelets e substituir um pelo outro é questão de uma linha de configuração.

•A beans factory: porque não usar Spring do que managed beans?

•Renderização dos componentes: existem implementações, utilizando por exemplo XUL ou HTML + Ajax.

Monday, July 27, 2009

Page 35: JSF & REST

As Implementações

Monday, July 27, 2009

Page 36: JSF & REST

Implementações

• Apache– MyFaces

• Tomahawk/ Sandbox/ Tobago/ Trinidad/ Orchestra

• Red Hat/JBoss – RichFaces– Ajax4JSF

• Red Hat/JBoss – JBoss Seam

• ICEsoft Technologies Inc. – ICEfaces

• Oracle – Mojarra

• Oracle – ADF Faces

Monday, July 27, 2009

Page 37: JSF & REST

REST

Monday, July 27, 2009

Page 38: JSF & REST

O que é Web Service?

Monday, July 27, 2009

Page 39: JSF & REST

Web Services

• Comunicação entre aplicações via INTERNET;

• Mais informações?

• Consulte o Wikipédia: http://pt.wikipedia.org/wiki/Web_service

Monday, July 27, 2009

Page 40: JSF & REST

Monday, July 27, 2009

Page 41: JSF & REST

CQ Teste

Primeira Pergunta:O que é REST?

Monday, July 27, 2009

Page 42: JSF & REST

Monday, July 27, 2009

Page 43: JSF & REST

O que é REST?

?

?Monday, July 27, 2009

Page 44: JSF & REST

Monday, July 27, 2009

Page 45: JSF & REST

Errado, a resposta certa É:

Monday, July 27, 2009

Page 46: JSF & REST

Web Services - REST

Monday, July 27, 2009

Page 47: JSF & REST

REST• REpresentational State Transfer (Transferência de Estado

Representacional);

• Este termo surgiu no ano de 2000;

• Em uma tese de doutorado de Roy Fielding;

• Baseado no protocolo HTTP;

• POST, GET, PUT e DELETE (Menos o POST as demais são freqüentemente envolvidas com CRUD).

• Cada recurso é direcionado através de sua URI;

• Sintaxe Universal;

• Mais simples;

• Menos Overhead de protocolos.

Monday, July 27, 2009

Page 48: JSF & REST

REST• Utiliza Recursos (URI - Identificador Uniforme de

Recurso);

• Se comunicam através de uma interface HTTP;

• Pode ser transmitido por diversos conectores, porém não poderá ver mais nada do que o seu pedido;

• Assim não é necessário conhecer proxys, caches e etc.

Monday, July 27, 2009

Page 49: JSF & REST

Arquitetura REST

http://brunopereira.org/webservicesrest-arquitetura/

Monday, July 27, 2009

Page 50: JSF & REST

Declarativo

http://brunopereira.org/webservicesrest-arquitetura/

Monday, July 27, 2009

Page 51: JSF & REST

Código Rest com Jersey

@Path("/paisesWS")public class PaisesRest { @GET @Produces("text/plain") public String getClichedMessage() { List<String> paises = new ArrayList<String>(); paises.add("======Listando alguns Paises via REST + Jersey======"); paises.add("\n Brasil"); paises.add("\n India"); paises.add("\n Argentina"); paises.add("\n Guatemala"); paises.add("\n Estou no meu WebService sendo acessado"); return paises.toString(); }}

Monday, July 27, 2009

Page 52: JSF & REST

Alguns Frameworks• API REST para Java - JAX-RS:

• http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html

• GlassFish Jersey:

• https://jersey.dev.java.net/

• JBoss RestEasy:

• http://www.jboss.org/resteasy/

• Restlet:

• http://www.restlet.org/

• Apache CXF:

• http://cxf.apache.org/Monday, July 27, 2009

Page 53: JSF & REST

JSF & REST

• Imagine que precise de tags em JSF para criar um Web Service REST como um ATOM, padrão que segue a mesma idéia de RSS.

• Como faria?

• É com você Rafinha...

Monday, July 27, 2009

Page 54: JSF & REST

Monday, July 27, 2009

Page 55: JSF & REST

Não faço a menor idéia e vocês aí da platéia? Alguma idéia?

Monday, July 27, 2009

Page 56: JSF & REST

Monday, July 27, 2009

Page 57: JSF & REST

Haaaaaa, acertou quem disse que há Tags para o JSF suportar Rest.

Monday, July 27, 2009

Page 58: JSF & REST

Tag Suport JSF/REST• RestFaces

• https://restfaces.dev.java.net/

• Para RSS

• RSS4JSF

• http://code.google.com/p/rss4jsf/wiki/Usage

• FaceRSS

• http://rsslib4j.sourceforge.net

• YARFRAW

• http://yarfraw.sourceforge.net/ Monday, July 27, 2009

Page 59: JSF & REST

Monday, July 27, 2009

Page 60: JSF & REST

Meninos e Meninas lembrem-se:Nem REST, nem JSF é uma solução perfeita,

ou seja, No Silver Bullet.

Monday, July 27, 2009

Page 61: JSF & REST

Monday, July 27, 2009

Page 62: JSF & REST

É brincadeira viu, e se eu precisar usar em um aplicativo não JSF?

Monday, July 27, 2009

Page 63: JSF & REST

Monday, July 27, 2009

Page 64: JSF & REST

Fique frio, eu ainda não terminei, olhe agora...

Monday, July 27, 2009

Page 65: JSF & REST

Outros Frameworks e Linguagens

• Struts2Rest

• http://code.google.com/p/fulworx/

• SpringMVC+Restlet

• http://www.dehora.net/journal/2007/11/19/java-rest/

• PHP

• http://www.xml.lt/Resources/Framework

Monday, July 27, 2009

Page 66: JSF & REST

Monday, July 27, 2009

Page 67: JSF & REST

Vamos ver um exemplo.

Monday, July 27, 2009

Page 68: JSF & REST

• Referências JSF:

• Alguns poucos Sites - Pesquise no Google:

• http://javawora.blogspot.com/search/label/JSF

• http://groups.google.com.br/group/javasf/?pli=1

• http://www.rponte.com.br/2008/06/30/o-que-esperar-do-jsf-20/

• http://www.caelum.com.br

• http://www.guj.com.br/java.tutorial.artigo.158.1.guj

• http://java.sun.com/javaee/javaserverfaces/

• www.jcp.org

• JSRs: 127; 252; 314.

• Revistas:– Mundo Java nº: 21 e posteriores.– Java Magazine nº: 23; 26; 43; 44; 45; 46; 47; 48 e posteriores.

• Livros:– Faces in Action (Kito Mann – Manning, 2004);– JavaServer Faces (Hans Bergsten – O´Reilly, 2004);– Core JavaServer Faces (David Geary e Cay Horstmann).

Monday, July 27, 2009

Page 69: JSF & REST

• Referências REST:

• Alguns poucos Sites - Pesquise no Google:

• http://blpsilva.wordpress.com/2008/04/24/apresentacao-sobre-web-services-rest/

• http://unfoldingtheweb.com/2009/07/20/to-rest-or-not-to-rest/

• http://iv.incubadora.fapesp.br/portal/doc/TutorialReST

• http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

• http://pt.wikipedia.org/wiki/REST

• http://www.megginson.com/blogs/quoderat/2005/03/09/public-rest-application-seniors-canada-online/

• http://www.markbaker.ca/blog//2005/04/14/#2005-04-amazon-next

• http://jim.webber.name/2008/09/17/595957ef-63a2-4ff9-a477-43ea8db51cdd.aspx

• http://www.infoq.com/interviews/jim-webber-qcon-london

• http://www.devmedia.com.br/articles/viewcomp.asp?comp=7357

• http://wikis.sun.com/display/Jersey/Main

• www.jcp.org

• JSR: 311.

• Revistas:– Mundo Java;– Java Magazine.

• Livros:– Developing Enterprise Web Services: An Architect's Guide (James Webber e Sandeep Chatterjee);– RESTful Web Services (Leonard Richardson, Sam Ruby e David Heinemeier Hansson).

Monday, July 27, 2009

Page 70: JSF & REST

Dúvidas?

Monday, July 27, 2009