Construindo uma
 arquitetura RESTful
 para aplicações ricas
com HTML 5 e JSF 2.0

      Raphael Adrien
         /raphaeladrien
2000 - dias atuais
O que é arquitetur
O que é arquitetur
O que é arquitetur




    Uma arquitetura de software para um sistema é a
    estrutura ou estruturas do sistema, que consiste de
    elementos, suas propriedades visíveis exteriormente,
    e as relações entre elas.

    Bass, Clements, Kazman - 1998
O que é arquitetur
                           Ralph Johnson - GoF -
                           “arquitetura é tudo
                           aquilo que importa”




    Uma arquitetura de software para um sistema é a
    estrutura ou estruturas do sistema, que consiste de
    elementos, suas propriedades visíveis exteriormente,
    e as relações entre elas.

    Bass, Clements, Kazman - 1998
O que é arquitetur
                                       Ralph Johnson - GoF -
                                       “arquitetura é tudo
                                       aquilo que importa”

“as peças que as
pessoas
acham que é
difícil de mudar”




                Uma arquitetura de software para um sistema é a
                estrutura ou estruturas do sistema, que consiste de
                elementos, suas propriedades visíveis exteriormente,
                e as relações entre elas.

                Bass, Clements, Kazman - 1998
O que é     O que é
design?   arquitetura?
Requisitos funcionais




   O que é                O que é
   design?              arquitetura?
Requisitos funcionais   Requisitos não funcionais




   O que é                 O que é
   design?               arquitetura?
Requisitos funcionais    Requisitos não funcionais

    “Ações que um
   sistema deve ser
        capaz de
     executar, sem
        levar em
     consideração
  restrições físicas.”



   O que é                  O que é
   design?                arquitetura?
Requisitos funcionais    Requisitos não funcionais

    “Ações que um              escalabilidade
   sistema deve ser           performace alta
        capaz de
     executar, sem           alta disponibilidade
        levar em                  segurança
     consideração            permitir evolução
  restrições físicas.”          do sistema



   O que é                  O que é
   design?                arquitetura?
Requisitos funcionais   Requisitos não funcionais

                              escalabilidade
                             performace alta
                            alta disponibilidade
                                 segurança
                            permitir evolução
                               do sistema



   O que é                 O que é
   design?               arquitetura?
Requisitos funcionais   Requisitos não funcionais




   O que é                 O que é
   design?               arquitetura?
Requisitos não funcionais




O que é      O que é
design?    arquitetura?
O que é     O que é
design?   arquitetura?
O que é     O que é
design?   arquitetura?
O que é     O que é
design?   arquitetura?
Integração
Integração




Banco de dados
Integração




Transferencia de
    arquivos
Web
Service
Web
Service           WS-ReliableMessaging
 WS-Addressing
                        WS-Security
  WSDL

WS-Transaction          WS-Resource

                 SOAP
Integração
Integração
Representational State
Transfer (REST)




Roy Fielding
Representational State
Transfer (REST)




Roy Fielding
Representational State
Transfer (REST)
Representational State
Transfer (REST)




  Agora todo o foco está todo
          no recurso
Representational State
Transfer (REST)
JSF 2 + REST


• JSR 311(JAX-RS)
 • Get
 • Post
Não é uma grande coisa.
HTML 5
HTML5 ~= HTML + CSS + JS
Suporte dos browsers
<HTML
     5> estrutura
Elementos para
  <header>, <nav>, <article>, <section>, <aside>,<footer>
<HTML
     5> estrutura
Elementos para
  <header>, <nav>, <article>, <section>, <aside>,<footer>




      Tornou o código HTML mais limpo.
<HTML
   5> para mídia
Elementos
* Maioria dos vídeos utilizam plugin do flash
* Nem todos os browser possuem os mesmo plugins

  <video>
  * Padrão para incluir vídeo em nossas páginas.
  * 2 formatos são suportados: Ogg Vorbis, MPEG 4

            <video controls=”controls”>
             <src=”javaone.ogg” type=”video/ogg”>
             <src=”javaone.mp4” type=”video/mpeg”>
              Seu browser não possui suporte ao elemento video.
            </video>
<HTML
    5> gráficos
 Elementos
<canvas>
   * O futuro dos gráficas na internet;
   * Plataforma para desenhar em browser com 2D;
   * Extensível através de Javascript;
   * Criado pela Apple;
   * Agora abertamente desenvolvido pelo W3C.

     <canvas id=”aCanvas” heigth=”80” width=”100”></canvas>




               Sintaxe simples
<HTML
   5> simples
  Formas
* fillRect( x, y, w, h )
* strokeRect( x, y, w,h )
* clearRect( x, y, w,h )

        context.fillStyle = ‘#00f’;
        context.strokeStyle = ‘#f00’

        //Vamos desenhar :-)
        context.fillRect( 0, 0,150, 150 );
        context.strokeRect( 0, 60, 150, 50 );
        context.clearRect(30, 25, 90, 60 );
        context.strokeRect(30, 25, 90, 60 );
<HTML
     5> adicionados no Javascript
 Novos eventos
* Mouse events
 * ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart,
 ondrop, onmousewheel, onscroll

* Windows events( x, y, w,h )
  * onafterprint, onbeforeprint, onbeforeonload, onerror, onhaschanged,
 onmessage, onoffline, ononline...

* Form events
  * onformhange, onforminput, oninput, oninvalid

* Media events
 * Aplicável a elementos de media.
Composite Components
Composite Components



• Possibilita a verdadeira abstração;
• Agora você pode realmente criar
  componentes reutilizáveis, você não precisa
  mais de JSF Guru.
Composite Components
      Crio o arquivo /recursos/simples/saida.xhtml

<composite:interface>
 <composite:atribute name=”value” required=”true” />
</composite:interface>

<composite:implementation>
 <h:outputText value=”#{cc.atrs.value}” />
</composite:implementation>
Composite Components

<html xmlns=”http://www.w3.org/1999/xhtml”
    xmlns:h=”http://java.sun.com/jsf/html”
    xmlns:f=”http://java.sun.com/jsf/core”
    xmlns:ez=”http://java.sun.com/jsf/composite/simples”>
....
<composite:implementation>
   <ez:out value=”JavaOne Brasil” />
</composite:implementation>

....
Composite Components



• web root ou JAR
• .properties
• Listeners, Converters,Validadors
Composite Components com HTML 5



• JSF 2 introduziu para promover o Ajax;
• Composite Components trabalha com
  Javascript;
• Composite Components pode ser
  influenciado por HTML 5 e Javascript API.
Composite Components com HTML 5



<cc:interface>
 <cc:atribute name=”src” required=”true” />
 <cc:atribute name=”controls” required=”true” />
</cc:interface>

<cc:implementation>
  <h:outputScript libary=”js” name=”audio.js target=”head/>
  <audio src=”#{cc.attrs.src}” controls=”#{cc.attrs.controls}”/>
  <input type=”button” value=”Tocar” onclick=”tocarReStart()” />
  <input type=”button” value=”Parar” onclick=”pararReStartParaSempre()” />
</cc:implementation>
Composite Components com HTML 5


audio.js

function tocarReStart(){
 var audio = document.getElementByTagName(“audio”)[0];
 audio.play();
 var display = document.getElementByTagName(“input”)[0];
}

function pause(){
 var audio = document.getElementByTagName(“audio”)[0];
 audio.pause();
}
Composite Components com HTML 5


<html xmlns=”http://www.w3.org/1999/xhtml”
    xmlns:h=”http://java.sun.com/jsf/html”
    xmlns:f=”http://java.sun.com/jsf/core”
    xmlns:h5=”http://java.sun.com/jsf/composite/media”>
....
<h:body>
   <h5:audiobox src=”recursos/media/restart.ogg”
controls=”controls”/>
</h:body>

....
ScrumToys
http://netbeans.org/kb/samples/scrum-toys.html
Obrigado....

/raphaeladrien

raphael.adrien@gmail.com

Construindo uma arquitetura com REST, HTML 5 e JSF 2

  • 1.
    Construindo uma arquiteturaRESTful para aplicações ricas com HTML 5 e JSF 2.0 Raphael Adrien /raphaeladrien
  • 2.
  • 3.
    O que éarquitetur
  • 4.
    O que éarquitetur
  • 5.
    O que éarquitetur Uma arquitetura de software para um sistema é a estrutura ou estruturas do sistema, que consiste de elementos, suas propriedades visíveis exteriormente, e as relações entre elas. Bass, Clements, Kazman - 1998
  • 6.
    O que éarquitetur Ralph Johnson - GoF - “arquitetura é tudo aquilo que importa” Uma arquitetura de software para um sistema é a estrutura ou estruturas do sistema, que consiste de elementos, suas propriedades visíveis exteriormente, e as relações entre elas. Bass, Clements, Kazman - 1998
  • 7.
    O que éarquitetur Ralph Johnson - GoF - “arquitetura é tudo aquilo que importa” “as peças que as pessoas acham que é difícil de mudar” Uma arquitetura de software para um sistema é a estrutura ou estruturas do sistema, que consiste de elementos, suas propriedades visíveis exteriormente, e as relações entre elas. Bass, Clements, Kazman - 1998
  • 8.
    O que é O que é design? arquitetura?
  • 9.
    Requisitos funcionais O que é O que é design? arquitetura?
  • 10.
    Requisitos funcionais Requisitos não funcionais O que é O que é design? arquitetura?
  • 11.
    Requisitos funcionais Requisitos não funcionais “Ações que um sistema deve ser capaz de executar, sem levar em consideração restrições físicas.” O que é O que é design? arquitetura?
  • 12.
    Requisitos funcionais Requisitos não funcionais “Ações que um escalabilidade sistema deve ser performace alta capaz de executar, sem alta disponibilidade levar em segurança consideração permitir evolução restrições físicas.” do sistema O que é O que é design? arquitetura?
  • 13.
    Requisitos funcionais Requisitos não funcionais escalabilidade performace alta alta disponibilidade segurança permitir evolução do sistema O que é O que é design? arquitetura?
  • 14.
    Requisitos funcionais Requisitos não funcionais O que é O que é design? arquitetura?
  • 15.
    Requisitos não funcionais Oque é O que é design? arquitetura?
  • 16.
    O que é O que é design? arquitetura?
  • 17.
    O que é O que é design? arquitetura?
  • 18.
    O que é O que é design? arquitetura?
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    Web Service WS-ReliableMessaging WS-Addressing WS-Security WSDL WS-Transaction WS-Resource SOAP
  • 24.
  • 25.
  • 28.
  • 29.
  • 30.
  • 31.
    Representational State Transfer (REST) Agora todo o foco está todo no recurso
  • 32.
  • 33.
    JSF 2 +REST • JSR 311(JAX-RS) • Get • Post
  • 36.
    Não é umagrande coisa.
  • 37.
  • 38.
    HTML5 ~= HTML+ CSS + JS
  • 39.
  • 40.
    <HTML 5> estrutura Elementos para <header>, <nav>, <article>, <section>, <aside>,<footer>
  • 41.
    <HTML 5> estrutura Elementos para <header>, <nav>, <article>, <section>, <aside>,<footer> Tornou o código HTML mais limpo.
  • 42.
    <HTML 5> para mídia Elementos * Maioria dos vídeos utilizam plugin do flash * Nem todos os browser possuem os mesmo plugins <video> * Padrão para incluir vídeo em nossas páginas. * 2 formatos são suportados: Ogg Vorbis, MPEG 4 <video controls=”controls”> <src=”javaone.ogg” type=”video/ogg”> <src=”javaone.mp4” type=”video/mpeg”> Seu browser não possui suporte ao elemento video. </video>
  • 43.
    <HTML 5> gráficos Elementos <canvas> * O futuro dos gráficas na internet; * Plataforma para desenhar em browser com 2D; * Extensível através de Javascript; * Criado pela Apple; * Agora abertamente desenvolvido pelo W3C. <canvas id=”aCanvas” heigth=”80” width=”100”></canvas> Sintaxe simples
  • 44.
    <HTML 5> simples Formas * fillRect( x, y, w, h ) * strokeRect( x, y, w,h ) * clearRect( x, y, w,h ) context.fillStyle = ‘#00f’; context.strokeStyle = ‘#f00’ //Vamos desenhar :-) context.fillRect( 0, 0,150, 150 ); context.strokeRect( 0, 60, 150, 50 ); context.clearRect(30, 25, 90, 60 ); context.strokeRect(30, 25, 90, 60 );
  • 45.
    <HTML 5> adicionados no Javascript Novos eventos * Mouse events * ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart, ondrop, onmousewheel, onscroll * Windows events( x, y, w,h ) * onafterprint, onbeforeprint, onbeforeonload, onerror, onhaschanged, onmessage, onoffline, ononline... * Form events * onformhange, onforminput, oninput, oninvalid * Media events * Aplicável a elementos de media.
  • 46.
  • 47.
    Composite Components • Possibilitaa verdadeira abstração; • Agora você pode realmente criar componentes reutilizáveis, você não precisa mais de JSF Guru.
  • 48.
    Composite Components Crio o arquivo /recursos/simples/saida.xhtml <composite:interface> <composite:atribute name=”value” required=”true” /> </composite:interface> <composite:implementation> <h:outputText value=”#{cc.atrs.value}” /> </composite:implementation>
  • 49.
    Composite Components <html xmlns=”http://www.w3.org/1999/xhtml” xmlns:h=”http://java.sun.com/jsf/html” xmlns:f=”http://java.sun.com/jsf/core” xmlns:ez=”http://java.sun.com/jsf/composite/simples”> .... <composite:implementation> <ez:out value=”JavaOne Brasil” /> </composite:implementation> ....
  • 50.
    Composite Components • webroot ou JAR • .properties • Listeners, Converters,Validadors
  • 51.
    Composite Components comHTML 5 • JSF 2 introduziu para promover o Ajax; • Composite Components trabalha com Javascript; • Composite Components pode ser influenciado por HTML 5 e Javascript API.
  • 52.
    Composite Components comHTML 5 <cc:interface> <cc:atribute name=”src” required=”true” /> <cc:atribute name=”controls” required=”true” /> </cc:interface> <cc:implementation> <h:outputScript libary=”js” name=”audio.js target=”head/> <audio src=”#{cc.attrs.src}” controls=”#{cc.attrs.controls}”/> <input type=”button” value=”Tocar” onclick=”tocarReStart()” /> <input type=”button” value=”Parar” onclick=”pararReStartParaSempre()” /> </cc:implementation>
  • 53.
    Composite Components comHTML 5 audio.js function tocarReStart(){ var audio = document.getElementByTagName(“audio”)[0]; audio.play(); var display = document.getElementByTagName(“input”)[0]; } function pause(){ var audio = document.getElementByTagName(“audio”)[0]; audio.pause(); }
  • 54.
    Composite Components comHTML 5 <html xmlns=”http://www.w3.org/1999/xhtml” xmlns:h=”http://java.sun.com/jsf/html” xmlns:f=”http://java.sun.com/jsf/core” xmlns:h5=”http://java.sun.com/jsf/composite/media”> .... <h:body> <h5:audiobox src=”recursos/media/restart.ogg” controls=”controls”/> </h:body> ....
  • 55.
  • 56.
  • 57.