Diénert de Alencar Vieira

SISTEMA DISCENTE/DOCENTE DE
GRADUAÇÃO E TECNOLOGIAS UTILIZADAS
QUEM SOU EU?

 Tecnólogo em Sistemas para Internet – IFPB
 Bacharelando em Ciência da Computação –
  UFPB
 Sun Certified Java Programmer - SCJP 6

 Engenheiro de Software – Dynavideo

 Sócio da empresa IDEEN Soluções em
  Informática
 ex-Arquiteto do Projeto de Engenharia

                                               2
ROTEIRO


 Overview da Arquitetura de Sistemas Web
 Pequeno Histórico em JSP e Servlets
 Facelets
 JSF
 JBoss Seam
     JBoss Annotations
     JBoss   EL


                                            3
ROTEIRO


 Richfaces
 Apresentação do Sistema S2DG

 Se der tempo: Utilizando SVN com plugin do
  Eclipse
 Se der tempo: Padrões de Projeto




                                               4
ARQUITETURA DE SISTEMAS WEB




                              5
ARQUITETURA DE SISTEMAS WEB


 O servidor pode conter todas as páginas
  HTML
 As páginas HTML, ou partes das páginas
  podem ser geradas dinâmicamente
 Diversas são as tecnologias que podem
  gerar HTML
 Exemplos: CGI, PHP, JAVA, RUBY, ASP ...


                                            6
HISTÓRICO EM SERVLETS E JSP

   Servlets
     Uma  classe na linguagem de programação Java
      que dinamicamente processa requisições e
      respostas, proporcionando dessa maneira novos
      recursos aos servidores. A definição mais usada
      considera-os extensões de servidores.




                                                    7
HISTÓRICO EM SERVLETS E JSP




                              8
HISTÓRICO EM SERVLETS E JSP




                              9
HISTÓRICO EM SERVLETS E JSP




   Ref.: http://www.jsptut.com/Scriptlets.jsp
                                                 10
HISTÓRICO EM SERVLETS E JSP

   JSP - Expression Languages
      Poder     de Processamento e Acesso a JavaBeans




   Ref.: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html



                                                                          11
HISTÓRICO EM SERVLETS E JSP
            EL Expression                Resultado
            ${1 > (4/2)}                 False
            ${4.0 >= 3}                  True
            ${100.0 == 100}              True
            ${(10*10) ne 100}            False
            ${'a' < 'b'}                 True
            ${'hip' gt 'hit'}            False
            ${4 > 3}                     True
            ${3 div 4}                   0.75
            ${header["host"]}            O próprio host


   Ref.: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html


                                                                          12
HISTÓRICO EM SERVLETS E JSP

   Deployment Descriptor: web.xml
<!-- Faces Servlet -->
<servlet>
 <servlet-name>Faces Servlet</servlet-name>
 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
 <servlet-name>Faces Servlet</servlet-name>
 <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

                                                                  13
JSF EL

 JSF EL x JSP EL: #{1 + 1} <=> ${1+1}
 Código:




   Resultado:
                                         14
FACELETS

   Facelets
     Ponto inicial: Mecanismo de Templates
     Sufixo padrão de arquivos: *.xhtml

     web.xml:


    <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
    </context-param>




                                                          15
FACELETS
 <html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets">
 <head>
 <title>#{title}</title>
 </head>
 <body>
 <ui:insert name="topo" >Topo Padrão</ ui:insert>
 <ui:insert name=“content“ >Conteúdo Padrão</
   ui:insert>
 <ui:insert name="foot" >Rodapé Padrão</ui:insert>
 </body>
 </html>
                                                     16
FACELETS
 <ui:composition template="/template.xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets" >

   <ui:param name=“titulo“ value=“Título 1”/>
   <ui:define name=“topo">
   <ui:include src=“logo.xhtml" />
   </ui:define>
   <ui:define name=“content“>Conteúdo
   aqui</ui:define>
   <ui:define name=“foot“>Rodapé Feito</ui:define>
 </ui:composition>
                                                     17
JSF

 Framework de aplicação WEB com o
  propósito de simplificar o desenvolvimento
  de UI para Java EE
 Framework MVC para WEB

 Interfaces gráficas baseadas em
  componentes
 Implementa o padrão Front Controller




                                               18
JSF




      Ref.: http://docs.sun.com/app/docs/doc/820-7627/bnaph?a=view
                                                                19
JSF




      Ref.: http://www.developersbook.com/jsf/jsf-tutorial/jsf-tutorial.php
                                                                        20
JSF
   Uso das bibliotecas de tags de renderização HTML e
    CORE do JavaServer Faces

   Para um página JSP, usar:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

   Para uma página que utilize Facelets, usar:
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html">

                                                              21
JSF

   Exemplos de tags h:
     h:commandLink

     h:commandButton

     h:form

     h:messages

     h:message

     h:dataTable

     h:panelGrid


Ref.: http://docs.sun.com/app/docs/doc/820-7627/bnaqz?a=view
                                                               22
JBOSS SEAM

 Poderosa plataforma de desenvolvimento de
  código aberto para construir Aplicações
  Ricas para Internet em Java
 Integra AJAX, JSF, JPA, EJB 3.0 e BPM

 Configuração por exceção

 Menos xml’s

 Mais anotações



                                          23
JBOSS SEAM


 Apache
 Tomcat

 Glassfish

 Jetty

 Jboss AS – JBoss Application Server




                                        24
JBOSS SEAM - ANNOTATIONS


   @Annotation:
     Complementam     Javadocs
     Não afeta a semântica do código em si

     Afeta a forma como estes programas são
      tratados por ferramentas e bibliotecas
     Substituem xml em muitos casos




                                               25
JBOSS SEAM - ANNOTATIONS
  @Entity
  @Name("user")
  @Scope(SESSION)
  @Table(name="users")
  public class User implements Serializable
  {
    private static final long serialVersionUID = 18814135007114419
  51L;

    @Id @NotNull @Length(min=5, max=15)
    private String username;
    private String password;
    private String name;


Ref.: http://docs.jboss.org/seam/2.2.0.GA/reference/en-
  US/html/tutorial.html
                                                                 26
JBOSS SEAM - ANNOTATIONS

 Injeção de Dependência: é um padrão de
  desenvolvimento utilizado quando é necessário
  manter o baixo o nível de acoplamento entre
  diferentes módulos de um sistema.
 Nesta solução as dependências entre os
  módulos não são definidas programaticamente,
  mas sim pela configuração de uma
  infraestrutura de software (container) que é
  responsável por "injetar" em cada componente
  suas dependências declaradas
                                              27
JBOSS SEAM - ANNOTATIONS


@Name(“teste”)
class Teste {
   @In
   private EntityManager entityManager;
   metodo() {
     entityManager.edit(AlgumaCoisa);
   }
}
                                          28
JBOSS SEAM - ANNOTATIONS

 Bijeção de Dependência: injection e
  outjection de dependência
 O primeiro fornece a instância da
  dependência
 O segundo fornece a dependência para a
  interface




                                           29
JBOSS SEAM - ANNOTATIONS


@Name(“teste”)
class Teste {
   @Out
   private User currentUser;
}

#{currentUser.name}

                               30
JBOSS SEAM - EL


   Idêntica à EL JSF, contudo aceita
    parâmetros

   Apresentar o projeto




                                        31

Sistema S2DG e Tecnologias Web

  • 1.
    Diénert de AlencarVieira SISTEMA DISCENTE/DOCENTE DE GRADUAÇÃO E TECNOLOGIAS UTILIZADAS
  • 2.
    QUEM SOU EU? Tecnólogo em Sistemas para Internet – IFPB  Bacharelando em Ciência da Computação – UFPB  Sun Certified Java Programmer - SCJP 6  Engenheiro de Software – Dynavideo  Sócio da empresa IDEEN Soluções em Informática  ex-Arquiteto do Projeto de Engenharia 2
  • 3.
    ROTEIRO  Overview daArquitetura de Sistemas Web  Pequeno Histórico em JSP e Servlets  Facelets  JSF  JBoss Seam  JBoss Annotations  JBoss EL 3
  • 4.
    ROTEIRO  Richfaces  Apresentaçãodo Sistema S2DG  Se der tempo: Utilizando SVN com plugin do Eclipse  Se der tempo: Padrões de Projeto 4
  • 5.
  • 6.
    ARQUITETURA DE SISTEMASWEB  O servidor pode conter todas as páginas HTML  As páginas HTML, ou partes das páginas podem ser geradas dinâmicamente  Diversas são as tecnologias que podem gerar HTML  Exemplos: CGI, PHP, JAVA, RUBY, ASP ... 6
  • 7.
    HISTÓRICO EM SERVLETSE JSP  Servlets  Uma classe na linguagem de programação Java que dinamicamente processa requisições e respostas, proporcionando dessa maneira novos recursos aos servidores. A definição mais usada considera-os extensões de servidores. 7
  • 8.
  • 9.
  • 10.
    HISTÓRICO EM SERVLETSE JSP  Ref.: http://www.jsptut.com/Scriptlets.jsp 10
  • 11.
    HISTÓRICO EM SERVLETSE JSP  JSP - Expression Languages  Poder de Processamento e Acesso a JavaBeans  Ref.: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html 11
  • 12.
    HISTÓRICO EM SERVLETSE JSP EL Expression Resultado ${1 > (4/2)} False ${4.0 >= 3} True ${100.0 == 100} True ${(10*10) ne 100} False ${'a' < 'b'} True ${'hip' gt 'hit'} False ${4 > 3} True ${3 div 4} 0.75 ${header["host"]} O próprio host  Ref.: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html 12
  • 13.
    HISTÓRICO EM SERVLETSE JSP  Deployment Descriptor: web.xml <!-- Faces Servlet --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </servlet> <!-- Faces Servlet Mapping --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> 13
  • 14.
    JSF EL  JSFEL x JSP EL: #{1 + 1} <=> ${1+1}  Código:  Resultado: 14
  • 15.
    FACELETS  Facelets  Ponto inicial: Mecanismo de Templates  Sufixo padrão de arquivos: *.xhtml  web.xml: <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> 15
  • 16.
    FACELETS <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"> <head> <title>#{title}</title> </head> <body> <ui:insert name="topo" >Topo Padrão</ ui:insert> <ui:insert name=“content“ >Conteúdo Padrão</ ui:insert> <ui:insert name="foot" >Rodapé Padrão</ui:insert> </body> </html> 16
  • 17.
    FACELETS <ui:composition template="/template.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" > <ui:param name=“titulo“ value=“Título 1”/> <ui:define name=“topo"> <ui:include src=“logo.xhtml" /> </ui:define> <ui:define name=“content“>Conteúdo aqui</ui:define> <ui:define name=“foot“>Rodapé Feito</ui:define> </ui:composition> 17
  • 18.
    JSF  Framework deaplicação WEB com o propósito de simplificar o desenvolvimento de UI para Java EE  Framework MVC para WEB  Interfaces gráficas baseadas em componentes  Implementa o padrão Front Controller 18
  • 19.
    JSF Ref.: http://docs.sun.com/app/docs/doc/820-7627/bnaph?a=view 19
  • 20.
    JSF Ref.: http://www.developersbook.com/jsf/jsf-tutorial/jsf-tutorial.php 20
  • 21.
    JSF  Uso das bibliotecas de tags de renderização HTML e CORE do JavaServer Faces  Para um página JSP, usar: <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>  Para uma página que utilize Facelets, usar: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> 21
  • 22.
    JSF  Exemplos de tags h:  h:commandLink  h:commandButton  h:form  h:messages  h:message  h:dataTable  h:panelGrid Ref.: http://docs.sun.com/app/docs/doc/820-7627/bnaqz?a=view 22
  • 23.
    JBOSS SEAM  Poderosaplataforma de desenvolvimento de código aberto para construir Aplicações Ricas para Internet em Java  Integra AJAX, JSF, JPA, EJB 3.0 e BPM  Configuração por exceção  Menos xml’s  Mais anotações 23
  • 24.
    JBOSS SEAM  Apache Tomcat  Glassfish  Jetty  Jboss AS – JBoss Application Server 24
  • 25.
    JBOSS SEAM -ANNOTATIONS  @Annotation:  Complementam Javadocs  Não afeta a semântica do código em si  Afeta a forma como estes programas são tratados por ferramentas e bibliotecas  Substituem xml em muitos casos 25
  • 26.
    JBOSS SEAM -ANNOTATIONS @Entity @Name("user") @Scope(SESSION) @Table(name="users") public class User implements Serializable { private static final long serialVersionUID = 18814135007114419 51L; @Id @NotNull @Length(min=5, max=15) private String username; private String password; private String name; Ref.: http://docs.jboss.org/seam/2.2.0.GA/reference/en- US/html/tutorial.html 26
  • 27.
    JBOSS SEAM -ANNOTATIONS  Injeção de Dependência: é um padrão de desenvolvimento utilizado quando é necessário manter o baixo o nível de acoplamento entre diferentes módulos de um sistema.  Nesta solução as dependências entre os módulos não são definidas programaticamente, mas sim pela configuração de uma infraestrutura de software (container) que é responsável por "injetar" em cada componente suas dependências declaradas 27
  • 28.
    JBOSS SEAM -ANNOTATIONS @Name(“teste”) class Teste { @In private EntityManager entityManager; metodo() { entityManager.edit(AlgumaCoisa); } } 28
  • 29.
    JBOSS SEAM -ANNOTATIONS  Bijeção de Dependência: injection e outjection de dependência  O primeiro fornece a instância da dependência  O segundo fornece a dependência para a interface 29
  • 30.
    JBOSS SEAM -ANNOTATIONS @Name(“teste”) class Teste { @Out private User currentUser; } #{currentUser.name} 30
  • 31.
    JBOSS SEAM -EL  Idêntica à EL JSF, contudo aceita parâmetros  Apresentar o projeto 31