produtividade de construção de sistemas web

Propaganda
PRODUTIVIDADE DE CONSTRUÇÃO DE SISTEMAS WEB COM JSF
Vantagens e Desvantagens da Utilização de PrimeFaces.
Joimilte Antonio de Jesus Bonfim
Projeto de Graduação apresentado ao Curso de
Engenharia de Computação e Informação da
Escola Politécnica, Universidade Federal do Rio
de Janeiro, como parte dos requisitos necessários à
obtenção do título de Engenheiro.
Orientador: Sergio Palma da Justa Medeiros
Rio de Janeiro
Fevereiro de 2017
PRODUTIVIDADE DE CONSTRUÇÃO DE SISTEMAS WEB COM JSF
Vantagens e Desvantagens da Utilização de PrimeFaces.
Joimilte Antonio de Jesus Bonfim
PROJETO DE GRADUAÇÃO SUBMETIDO AO CORPO DOCENTE DO CURSO DE
ENGENHARIA
DE
COMPUTAÇÃO
E
INFORMAÇÃO
DA
ESCOLA
POLITÉCNICA DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO
PARTE DOS REQUISITOS NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE
ENGENHEIRO DE COMPUTAÇÃO E INFORMAÇÃO.
Examinado por:
______________________________________________
Sergio Palma da Justa Medeiros, D.Sc.
______________________________________________
Prof. Aloysio de Castro Pinto Pedroza, D.Sc.
______________________________________________
Prof. José Artur da Rocha, M.Sc.
______________________________________________
Élton Carneiro Marinho, M.Sc.
RIO DE JANEIRO, RJ – BRASIL
FEVEREIRO de 2017
ii
de Jesus Bonfim, Joimilte Antonio
Produtividade de construção de sistemas web com JSF.
Vantagens e Desvantagens da utilização de PrimeFaces: Um
experimento baseado em desenvolvimento de dois sistemas
web para comparação. / Joimilte Antonio de Jesus Bonfim. –
Rio de Janeiro: UFRJ/ Escola Politécnica, 2017.
X, 47 p.: il.; 29,7 cm.
Orientador: Sergio Palma da Justa Medeiros
Projeto de Graduação – UFRJ/ Escola Politécnica/ Curso
de Engenharia de Computação e Informação, 2017.
Referências Bibliográficas: p. 46.
1. Motivação e Objetivo. 2. Desenvolvimento Ágil XP,
SCRUM. 3. Modelagem do problema.
4. Descrição dos
Experimentos. 5. Conclusão. 6. Referências. da Justa
Medeiros, Sergio Palma. II. Universidade Federal do Rio de
Janeiro, Escola Politécnica, Curso de Engenharia de
Computação e Informação. III. Título.
iii
DEDICATÓRIA
A minha esposa Danielle Bonfim, meus pais, familiares e amigos,
Por todo apoio e tudo que representam na minha vida.
iv
AGRADECIMENTOS
Dedico esse projeto primeiramente à minha esposa e grande companheira Danielle
Bonfim, pois sem ela isso teria acontecido, ela que acompanhou de perto todos os
momentos difíceis nessa minha caminhada e que foi sempre uma guerreira. Agradeço a
minha mãe Adelaide Antonio por toda educação e por me fazer ser o homem que sou
hoje. Quero encarecidamente agradecer o Professor Sergio Palma da Justa Medeiros por
ter acreditado em mim, ele que se ofereceu para me orientar nesse projeto por mera
coincidência, sendo simples, prático e direto, e também ao Professor Élton Carneiro
Marinho por todo apoio e acompanhamento que me deu de forma objetiva e prática desde
o início até a conclusão desse projeto, à Professora Mônica Ferreira da Silva também pelo
seu apoio e ótimas dicas. Um agradecimento especial para a Deize Beraldi e Dircilane
Beraldi pelas palavras de incentivo nos momentos difíceis, não esquecendo também do
meu grande amigo e irmão Jeldes Major Vera Cruz pelos incentivos e apoios constantes.
Assim como muitos outros que também foram importantes nessa minha caminhada, mas
que não é possível mencioná-los aqui.
v
Resumo do Projeto de Graduação sujeito a apresentação à Escola Politécnica/UFRJ como
parte dos requisitos necessários para a obtenção do grau de Engenheiro de Computação e
Informação.
PRODUTIVIDADE DE CONSTRUÇÃO DE SISTEMAS WEB COM JSF
Vantagens e Desvantagens da Utilização de PrimeFaces.
Joimilte Antonio de Jesus Bonfim
Fevereiro/2017
Orientador: Sergio Palma da Justa Medeiros
Curso: Engenharia de Computação e Informação
Os sistemas web são hoje o centro das atenções de tudo que envolve tecnologia, trazendo
desafios diversos para as organizações e oferecendo uma grande quantidade de recursos e
serviços. Cada vez mais, empresas, instituições e desenvolvedores se deparam com um
aumento de demanda e a necessidade de encontrar soluções para grandes problemas em
curtos espaços de tempo. Nesse sentido com o intuito de auxiliar na resolução desses
problemas de forma célere é que surgem as metodologias de desenvolvimento ágil de
software entre os quais o XP e o SCRUM que agilizam de forma eficiente o
desenvolvimento de sistemas web usando a plataforma padrão J2EE ou Java EE, JSF e o
PrimeFaces. A escolha da melhor opção depende de diversos fatores, tais como, a
experiência do desenvolvedor, a descrição e modelagem do problema e as ferramentas
disponíveis. O objetivo do projeto, é apresentar o desenvolvimento de dois sistemas web
denominados de Experimento I e Experimento II que interajam com banco de dados
usando a linguagem de programação JavaScript e os frameworks JSF e PrimeFaces que
agilizam o processo de desenvolvimento dos sistemas pelos desenvolvedores e fazer uma
avaliação das suas vantagens e desvantagens quanto a produtividade, tempo e qualidade.
Palavras-chave: Sistemas web, software, Desenvolvimento ágil, Extreme Programming,
SCRUM, JavaScript, JSF e PrimeFaces.
vi
Abstract of Undergraduate Project presented to POLI/UFRJ as a partial fulfillment of the
requirements for the degree of Engineer.
PRODUCTIVITY OF WEB SYSTEM CONSTRUCTION WITH JSF
Advantages and Disadvantages of Using PrimeFaces.
Joimilte Antonio de Jesus Bonfim
February/2017
Advisor: Sergio Palma da Justa Medeiros
Course: Engenharia de Computação e Informação
Web systems are now the center of attention of everything that involves technology,
bringing diverse challenges to the organizations and offering a great amount of resources
and services. Increasingly, companies, institutions and developers are faced with
increased demand and the need to find solutions to major problems in short time frames.
In this sense, with the purpose of helping to solve these problems quickly, there are agile
software development methodologies including XP and SCRUM that efficiently
streamline the development of web systems using the standard J2EE or Java EE platform,
JSF, and PrimeFaces. Choosing the best option depends on a number of factors, such as
the developer's experience, the description and modeling of the problem, and the tools
available. The objective of the project is to present the development of two web systems
called Experiment I and Experiment II that interact with the database using the JavaScript
programming language and the JSF and PrimeFaces frameworks that streamline the
development process of the systems by the developers and do an assessment of its
advantages and disadvantages in terms of productivity, time and quality.
Keywords: Web Systems, Software, Agile Development, Extreme Programming,
SCRUM, JavaScript, JSF and PrimeFaces.
vii
Sumário
1. Introdução .................................................................................................................................... 1
1.1. Motivação ............................................................................................................................. 1
1.2. Objetivos da pesquisa............................................................................................................ 3
2. Conceitos Preliminares ................................................................................................................ 4
2.1. Desenvolvimento Ágil .......................................................................................................... 4
2.1.1. Extreme Programming – XP ......................................................................................... 6
2.1.2. SCRUM......................................................................................................................... 8
2.1.3. Arquitetura da Plataforma web ................................................................................... 10
2.2. Ferramentas Usadas no Desenvolvimento .......................................................................... 11
2.2.1. NetBeans IDE ............................................................................................................. 11
2.2.2. WampServer................................................................................................................ 12
2.2.3. MySQL WorkBench ................................................................................................... 13
2.3. Linguagem JavaScript ......................................................................................................... 14
2.3.1. JSF – JavaServer Faces ............................................................................................... 15
2.3.2. PrimeFaces .................................................................................................................. 16
2.3.3. AngularJS .................................................................................................................... 17
3. Metodologia de Desenvolvimento e Modelagem ...................................................................... 18
3.1. Arquitetura do Modelo MVC.............................................................................................. 19
3.2. Conceitos de Arquitetura .................................................................................................... 19
3.2.1. Conexão com Banco de Dados via JDBC ................................................................... 21
4. Descrição dos Experimentos ...................................................................................................... 23
4.1. Desenvolvimento do Experimento I usando JavaScript e JSF ............................................ 23
4.1.1. Gerando as Classes de Entidade do Banco de Dados.................................................. 28
4.2. Explorando o Experimento I ............................................................................................... 34
4.2.1. Vantagens .................................................................................................................... 36
4.2.2. Desvantagens .............................................................................................................. 37
4.3. Desenvolvimento do Experimento II usando JavaScript, JSF e PrimeFaces ...................... 37
4.3.1. Explorando o Experimento II ...................................................................................... 41
4.3.2. Vantagens .................................................................................................................... 43
4.3.3. Desvantagens .............................................................................................................. 43
5. Conclusão e Trabalhos Futuros .................................................................................................. 44
6. Referências Bibliográficas ......................................................................................................... 46
Apêndice I ...................................................................................................................................... 47
viii
ix
1. Introdução
1.1. Motivação
Temos-nos deparado diariamente com sistemas de softwares que possuem
arquiteturas bastante complexas e de difícil manuseio, o que gera um desafio para os
desenvolvedores. Essa gama de sistemas que têm inundado o mercado nos dias de hoje é
consequência da constante evolução da internet e novas tecnologias, principalmente nos
últimos anos. Nem todos esses sistemas possuem padrões e arquitetura bem definidos no
seu desenvolvimento que possam ser de fácil usabilidade, o que pode ocasionar diversos
problemas no seu propósito final (A. M. Silva Filho, Espaço Acadêmico, Setembro
2002).
O software tornou-se parte imprescindível do mundo moderno, tudo envolve
software, ou seja, a tendência é que componentes tecnológicas possam ser convertidos em
software. Com o aumento das demandas e das necessidades da sociedade atual, tem
aumentado também a complexidade dos sistemas, tamanho, distribuição e importância
dos softwares. Essas variáveis pressionam a indústria para novos patamares de qualidade
e produtividade compatíveis com o rápido desenvolvimento e distribuição e que elas
possam se adequar a essas novas demandas, gerando assim novos desafios e propósitos
organizacionais.
A convergência é cada vez mais rápida o que faz com que as organizações que
não tiverem capacidade para acompanhar ou fazer a conversão perante o rápido
crescimento tecnológico se tornem obsoletas. Com o intuito de auxiliar na resolução
desses problemas surgem às metodologias de engenharia de software que agilizam de
forma eficiente o desenvolvimento de sistemas web usando a plataforma padrão J2EE ou
1
Java EE – Java Plataform, Enterprise Edition ou Plataforma Java, Edição Empresarial1,
JSF (JavaServer Faces) e o PrimeFaces. A ferramenta J2EE teve a sua primeira versão
lançada em 1999 e atualmente está na versão Java EE 8. A JSF foi lançada como um
projeto JCP (Java Community Process) nos anos de 2004 e na sua mais recente versão, a
2.0, com diversas novidades e funcionalidades que foram propostas. Por outro lado, o
PrimeFaces é um conjunto de componentes que complementa a especificação-padrão dos
componentes JSF, trazendo uma série de itens que permitem a criação de aplicações web
com o conceito RIA2 (Rich Internet Application).
Qualquer desenvolvedor pode criar rapidamente suas aplicações ou sistemas que
façam uso do AJAX (Asynchronous Javascript and XML), com JSF e PrimeFaces como
o seu frontend, ao mesmo tempo em que criam ambientes visualmente agradáveis, sem no
entanto ter um amplo conhecimento sobre JavaScript, CSS (Cascading Style Sheets ou
Linguagem Folha de Estilo em português) e HTML. Para um bom desenvolvimento de
aplicações Java Enterprise é considerável o uso do conjunto de tecnologias JSF-Hibernate
(Cagatay Civici, Líder do projeto PrimeFaces, 2009).
A ideia do projeto passa também por viabilizar por parte dos desenvolvedores as
operações CRUD (Create, Read, Update and Delete) que são as quatro operações básicas
realizadas em banco de dados, normalmente feitos por meio de scripts, como uma forma
de agilizar processos manuais, que estão presentes em qualquer sistema. Os sistemas de
informação na sua maioria possuem essas operações de interação com os bancos de dados
como consulta ou leitura, alteração, inclusão e exclusão de dados, operações estas que
veremos a sua funcionalidade nos sistemas que serão desenvolvidos e apresentados neste
trabalho.
1
2
Plataforma de programação para servidores na linguagem Java.
Aplicações web com funcionalidades desktop. “Macromedia, março de 2002”.
2
Se pensarmos num sistema qualquer, por exemplo, um sistema de gerenciamento
de automóveis, pensamos logo em palavras como: modelo, fabricante, cor, ano e etc.
Nesse caso pensamos logo em como manipular cada uma dessas palavras em suas
diversas etapas ao longo do sistema, seja no cadastro ao inserir os dados no sistema ou na
alteração ao editar, atualizar ou excluir os dados inseridos no sistema. Neste âmbito surge
a ideia de comunicação direta com o banco de dados do sistema. Isso acontece porque os
sistemas contêm entidades que são frequentemente criadas, alteradas, visualizadas ou
excluídas.
A arquitetura do sistema é baseado em componentes e descrito através do uso de
modelagem gráfica por meio de uma linguagem padrão denominada de UML (Unified
Modeling Language). A modelagem através de UML é utilizada para descrever a
arquitetura e o comportamento do sistema, demonstrando sua importância durante todo o
desenvolvimento, principalmente nas etapas iniciais (Roger S. Pressman, Bruce R.
Maxim - 2016).
1.2. Objetivos da pesquisa
O objetivo deste trabalho consiste em apresentar o desenvolvimento de dois
sistemas web denominados de Experimento I e Experimento II que interajam com banco
de dados usando a linguagem de programação JavaScript e os frameworks JSF e
PrimeFaces que agilizam o processo de desenvolvimento dos sistemas pelos
desenvolvedores e fazer uma comparação das suas vantagens e desvantagens quanto a
produtividade, tempo e qualidade.
3
A ideia é mostrar a importância do uso dessas ferramentas pelos desenvolvedores
de forma a ter uma melhor produtividade no desenvolvimento de sistemas web mediante
a ferramenta escolhida e a metodologia empregada.
O projeto está dividido em 6 capítulos, sendo a introdução o primeiro deles, onde
incluem a motivação e os objetivos. O Capítulo 2 apresenta os conceitos preliminares
para o entendimento do tema, metodologias de desenvolvimento ágil, extreme
programming, metodologia scrum, e a conexão com um banco de dados via JDBC, assim
como as ferramentas usadas no desenvolvimento dos sistemas.
O Capítulo 3 trata da metodologia e modelagem do problema, modelo escolhido
para ser usado no desenvolvimento dos experimentos, e como são usadas as ferramentas
escolhidas no capítulo anterior. No Capítulo 4, inicia a descrição dos experimentos
desenvolvidos, detalhando a sua arquitetura, e a agilidade no desenvolvimento dos
mesmos, suas vantagens e desvantagens. O Capítulo 5 descreve a conclusão da
experimentação e trabalhos futuros. Por fim no Capítulo 6, são referenciadas as
bibliografias utilizadas.
2. Conceitos Preliminares
2.1. Desenvolvimento Ágil
O conceito desenvolvimento ágil de software ou métodos ágeis consiste em
apoiar o desenvolvimento de sistemas em que os requisitos desses sistemas mudam
rapidamente durante o processo de desenvolvimento. Esses métodos por sua vez contam
com uma abordagem iterativa para especificação, desenvolvimento e entrega incremental
de software.
4
Os métodos ágeis destinam-se a entregar um software de forma rápida aos
clientes, onde os mesmos podem propor novos requisitos e alterações a serem incluídos
posteriormente
no
sistema,
defendendo
assim
a
satisfação
dos
clientes
(SOMMERVILLE, Engenharia de Software 8ª Edição, 2010). A agilidade descreve um
processo moderno de desenvolvimento de software, e nesse contexto considera-se que
uma equipe deve ser ágil ou rápida e capaz de responder de maneira adequada às
mudanças, sejam elas de software, de membros de equipe, ou de novas tecnologias.
No entanto, a agilidade é mais do que uma resposta à mudança, é um incentivo
a estruturação, entrega rápida e flexibilidade. Com a introdução da metodologia ágil de
desenvolvimento, houve uma redução considerável nos custos de desenvolvimento que
eram bem mais elevados quando feitos usando o método convencional (PRESSMAN, B.
MAXIM, 2016).
Assim como qualquer outro método usado para desenvolvimento de softwares,
os métodos ágeis também possuem suas imperfeições. Isto porque eles possuem alguns
princípios que são de difícil empregabilidade, pois considerando que os requisitos de
software são normalmente parte do contrato entre cliente e fornecedor, torna-se difícil
definir um contrato para um desenvolvimento de software incremental.
A metodologia ágil conta com contratos em que o cliente pague pelo tempo
necessário para o desenvolvimento do sistema e não pelo desenvolvimento de um
conjunto de requisitos. Esses métodos não são adequados para o desenvolvimento de todo
tipo de sistemas. São recomendados para o desenvolvimento de sistemas de pequenas e
médias empresas e produtos para computadores pessoais.
5
Os métodos ágeis não são apropriados para desenvolvimento em larga escala
onde os sistemas são desenvolvidos em partes por desenvolvedores diferentes em locais
diferentes e nem de sistemas críticos (como sistema de controle de uma aeronave, por
exemplo) que requerem uma análise minuciosa dos seus requisitos para entender as suas
especificações de segurança (SOMMERVILLE, Engenharia de Software 8ª Edição,
2010). As metodologias de desenvolvimento ágil (métodos ágeis) mais populares são o
Extreme Programming – XP e o SCRUM, conforme a figura seguinte.
Figura 1: Métodos ágeis mais populares.
2.1.1. Extreme Programming – XP
Extreme Programming (XP) é uma metodologia de desenvolvimento ágil de
software, que nasceu nos Estados Unidos ao final da década de 90 e tem como princípio
apoiar os desenvolvedores na criação sistemas de melhor qualidade em menos tempo de
forma econômica e eficiente. Ela leva em consideração os valores das histórias dos
usuários para o planejamento dos projetos.
6
Essa metodologia tem como objetivo principal priorizar um conjunto de boas
práticas de engenharia de software como teste, revisão, planejamento e redução de riscos
e incertezas, é considerada a metodologia ágil mais usada. O Extreme Programming
possui alguns cenários como descritos a seguir:
- Comunicação: a equipe deve manter a constante comunicação entre os
desenvolvedores e com os seus clientes de modo a evitar o surgimento de problemas. Um
dos aspectos da comunicação também considerada pelo Kent Beck3 é a programação em
pares, em que os desenvolvedores usam o mesmo computador para programar, de modo
que os mesmos possam trocar ideias e poderem se comunicar com maior frequência.
Outro aspecto considerado é a negociação, onde a equipe de desenvolvimento mostra o
seu ponto de vista técnico e o cliente dá os requisitos e suas prioridades.
- Simplicidade: consiste em simplificar ao máximo no imediato. Necessita de
menos comunição apesar da comunicação permitir que transmitamos mais clareza e
confiança para dar sustentabilidade à simplicidade.
- Feedback: é um valor fundamental na metodologia de desenvolvimento ágil e
permite a evolução do software, através de diversos testes automatizados. Quanto antes o
feedback for recebido melhor informados estarão os desenvolvedores sobre o projeto,
garantindo assim o prazo e a correta execução do projeto junto do cliente.
- Coragem: para um projeto simples, tendo em conta que as demandas futuras
podem ser alteradas por completo, originando um retrabalho em relação ao projeto e ao
código já implementado, e por fim o respeito por parte das equipes, dos clientes e
usuários (R. Pressman, B. Maxim, 2016)”.
3
Eng. de Software Americano Criador do Extreme Programming e Test Driven Development.
7
A figura seguinte apresenta o desenrolar do ciclo de um release em Extreme
Programming – XP:
Figura 2: Ciclo de um release de Extreme Programming.
2.1.2. SCRUM
A metodologia SCRUM é também uma metodologia de desenvolvimento
ágil usada para gerir e planejar projetos de software. Nessa metodologia os projetos de
software são divididos em ciclos denominados de Sprint onde o Sprint é a representação
de um Dispositivo de Tempo ou Caixas Pretas [Black Boxes] (Ionel, 2008) dentro do qual
um conjunto de atividades deve ser executado. Essas metodologias de desenvolvimentos
ágeis são executadas de forma iterativa, e os trabalhos são divididos em iterações.
8
As funcionalidades que devem ser implementadas num projeto são sustentadas
por uma lista denominada Product Backlog (a lista que contém as funcionalidades
desejadas para um produto).
São feitos também Reuniões de Planejamento (Sprint Planning Meeting) no
início, em que o Product Owner (Pessoa responsável para definir os itens que fazem parte
do Product Backlog) define como prioridade aos itens do Product Backlog e as equipes
fazem a seleção das atividades da qual terão capacidade de implementar durante o Sprint
inicial. No instante seguinte são feitas as transferências do Product Backlog de tarefas
alocadas no Sprint inicial para outro Product Backlog.
Diariamente a equipe faz uma breve reunião pela manhã que é chamada
normalmente de Daily SCRUM, com o objetivo de difundir os conhecimentos a cerca
daquilo que foi feito no dia anterior, para identificar os obstáculos ou possíveis
dificuldades e dar prioridade ao trabalho do dia atual. No final do Sprint, a equipe mostra
as funcionalidades implementadas numa Reunião de Revisão do Sprint (Sprint Review
Meeting). Contudo no final as equipes devem fazer uma Retospectiva do Sprint (Sprint
Retrospective) e planejar o próximo Sprint (Ionel, 2008).
Figura 2.1: Ciclos de processos SCRUM.
9
2.1.3. Arquitetura da Plataforma web
Figura 2.2: Arquitetura em três camadas (Fonte: Java como programar 8ª Edição).
A camada superior é a interface do usuário que recolhe as informações de
entrada e exibe a saída. É o meio de interação direta dos usuários com a aplicação, ela
interage com a camada intermediária para fazer solicitações e recuperar dados da camada
de informações. Esses dados obtidos são exibidos aos usuários por meio dessa interface.
A camada intermediária é onde se realiza a lógica do negocio, a lógica do
controlador e a lógica da apresentação, de modo a controlar as interações entre os
clientes da aplicação e os dados. Ela funciona como um mediador entre os dados na
camada de informações e os clientes da aplicação. A lógica do controlador realiza o
processamento das solicitações do cliente e recupera dados do banco de dados. Enquanto
que a lógica de apresentação processa dados da camada de informações e apresenta o seu
conteúdo ao cliente.
A camada de dados tem como objetivo manter os dados que pertencem a
aplicação. Ela armazena os dados em um sistema de gerenciamento de banco de dados
(SGBD) (DEITEL P. et al, p.898).
10
2.2. Ferramentas Usadas no Desenvolvimento
Para execução deste projeto, foi necessário o uso de algumas ferramentas de
apoio como, NetBeans IDE, WampServer e Workbench para além da metodologia de
desenvolvimento ágil escolhida. Cada uma dessas ferramentas teve a sua devida
importância e serão descritas a seguir.
Figura 2.2: Ambiente de desenvolvimento dos experimentos.
2.2.1. NetBeans IDE
Por ser uma IDE (Integrated Development Environment ou Ambiente de
Desenvolvimento Integrado) de fácil usabilidade e manuseio, e um dos mais populares do
mercado no capítulo de desenvolvimento de sistemas, por isso opção pelo mesmo para o
desenvolvimento desse projeto.
11
O NetBeans IDE é uma ferramenta para desenvolvimento de aplicações
desktop, móveis e Web, usando as linguagens Java, JavaScript, HTML5, PHP, C/C++,
Python entre outras. Ele é gratuito, open source, tem uma grande comunidade mundial de
usuários e desenvolvedores e pode ser obtido no site (http://netbeans.org).
É de fácil interação e possui uma interface bastante agradável. O IDE pode ser
executado em multiplataformas, como Windows, Linux, MacOS e Solaris. Oferece aos
usuários e desenvolvedores ferramentas necessárias para a criação de aplicações de
desktop, Web, empresariais e móveis multiplataformas. Teve seu inicio nos anos de 1996
por dois estudantes tchecos na Universidade de Charles em Praga (República Tcheca),
numa altura em que a linguagem de programação Java ainda não era tão popular como
nos dias de hoje.
Foi adquirido pela Sun Microsystems em 1999 e encontra-se atualmente na
versão 8.2. Durante alguns meses a Sun Microsystems mudou o seu nome para Forte for
Java e o manteve por um bom período de tempo como software proprietário. Contudo em
junho de 2000 a Sun disponibilizou o seu código fonte tornando-o assim numa plataforma
OpenSource (Código Aberto). A partir daí a comunidade de desenvolvedores que usam e
contribuem com o NetBeans está em constante crescimento (http://netbeans.org).
2.2.2. WampServer
O WampServer (que significa Windows, Apache, MySQL e PHP) é um software
publicado sob a GNU – General Public License, desenvolvido pela PHP Team. É usado
para instalar no computador os softwares PHP5, MySQL, Apache e banco de dados,
disponibilizando suporte ao uso de scripts PHP (Personal Home Page) no Windows
localmente.
12
Paralelamente, o PHPMyAdmin que é um dos componentes que fazem parte do
WampServer permite que os usuários e desenvolvedores gerenciem facilmente os seus
bancos de dados. A instalação é praticamente automática sem a necessidade do usuário
ou desenvolvedor fazer grandes alterações.
Está disponível gratuitamente em duas versões distintas: 32 e 64 bits
respectivamente e funciona junto com o Joomla. Ele é mantido pelo SourceForge e que
contém a sua versão mais recente. Uma das funcionalidades mais importantes do
WampServer é a de servidor local para páginas web.
2.2.3. MySQL WorkBench
O MySQL Workbench é uma ferramenta para gerenciamento de banco de
dados. Ele fornece modelagem de dados, desenvolvimento de scripts SQL(Structured
Query Language) e ferramentas de administração abrangentes para configuração de
servidores, administração de usuários, backup entre outros, e está disponível para as
plataformas Windows, Linux e MacOS.
Permite que um DBA (Administrador de Banco de Dados), desenvolvedor ou
arquiteto de dados crie, modele, gere e gerencie bancos de dados. Inclui ferramentas
necessárias para criar modelos de ER (Entidade Relacionamento), engenharia reversa4 e
também fornece recursos-chave para executar tarefas difíceis de gerenciamento. Também
oferece ferramentas visuais para criar, executar e otimizar consultas SQL.
4
É o processo de descobrir os princípios tecnológicos e funcionamento de um dispositivo ou sistema
através da análise da sua estrutura, função e operação.
13
O SQL Editor fornece realce de sintaxe de cor, auto-completar, reutilização de
trechos de SQL e histórico de execução do SQL. O Painel de Conexões de Banco de
Dados permite aos desenvolvedores gerenciar facilmente conexões de banco de dados
padrão. O MySQL Workbench fornece ainda uma console visual para administrar
facilmente ambientes MySQL e obter melhor visibilidade em bancos de dados. (Fonte:
http://www.mysql.com).
2.3. Linguagem JavaScript
JavaScript é uma linguagem de programação interpretada voltada para web,
originalmente implementada como parte dos navegadores web para execução de scripts
do lado do cliente e interagir com os usuários sem a necessidade do script passar pelo
servidor, controlando o navegador, realizando assim a comunicação assíncrona e alterar
os conteúdos do documento exibido.
É usada hoje como uma das principais linguagens de programação para web, e
a tendência é que seja mais utilizada no lado do servidor através de ambientes como o
node.js5. Idealizada para ser uma linguagem script com orientação a objetos, baseada em
protótipos, fraca dinâmica e funções de primeira classe, ela possui programação funcional
e exibe recursos como fechamentos e funções de alta ordem que normalmente estão
disponíveis em Java e C++ (FLANAGAN et al, JavaScript The Definitive Guide).
5
É um interpretador de código JavaScript que funciona do lado do servidor.
14
2.3.1. JSF – JavaServer Faces
Uma das especificações Java para a construção de interfaces de usuário com
base em componentes para aplicações web é o JavaServer Faces (JSF). É uma tecnologia
de desenvolvimento web que usa um modelo de interfaces gráficas baseadas em eventos,
criando abstrações de detalhes de manipulação desses eventos e organizando os
componentes de modo a permitir que o programador se concentre na lógica da aplicação.
Ele foi formalizado como um padrão através do JCP (Java Community Process)
e faz parte da Java Platform Enterprise Edition o que a torna um padrão de
desenvolvimento e facilita o trabalho dos fornecedores de ferramentas, ao criarem
produtos que tornam a produtividade no desenvolvimento de interfaces visuais mais
atraentes e valorizadas.
O JSF é baseado no padrão de projeto MVC (Model View Controller), o que
facilita o desenvolvimento de sistemas. O padrão MVC separa o sistema em três
responsabilidades como (modelo, visualização e controle), onde o modelo é responsável
por representar os objetos de negocio, manter o estado da aplicação e prover ao
controlador o acesso aos dados.
A interface de usuário é definida pela visualização e ela define a maneira como
os dados serão apresentados e encaminha as ações do usuário para o controlador,
interpretando as solicitações feitas pelos usuários e traduzindo para uma operação no
modelo e retornando a visualização adequada à solicitação.
15
As Servlets6 é quem controlam uma JSF através de chamadas a Faces Servlet,
por arquivos XML de configuração e por manipuladores de ações e observadores de
eventos. Faces Servlet recebem as requisições dos usuários na web, redireciona para o
modelo e envia uma resposta (T. Faria. “Java EE 7 com JSF, PrimeFaces e CDI. Edição
2013”).
Figura 2.3: Interface de comunicação JSF.
2.3.2. PrimeFaces
O PrimeFaces é um conjunto de componentes JSF (JavaServer Faces)
OpenSource com várias extensões. É uma biblioteca que possui um rico conjunto de
componentes como HtmlEditor, Diálogo, AutoCompletar, Gráficos entre outros e
permite criar aplicações web com interfaces bastante agradáveis.
6
Classe Java usada para estender as funcionalidades de um servidor.
16
O PrimeFaces é usado em projetos dos clientes como o framework de front-end,
o que permite obter uma visualização de projeto do ponto de vista de desenvolvedor de
aplicações de maneira que se possa perceber facilmente os recursos faltantes e corrigir
rapidamente os bugs. Possui uma vasta gama de funcionalidades o
que
lhe
difere
significativamente de outras bibliotecas.
O framework PrimeFaces possui versões melhoradas dos componentes de
input e botões do JSF, os seus recursos são diferenciados e permitem a geração de
gráficos estatísticos. A comunidade PrimeFaces ajuda de forma contínua no
desenvolvimento do PrimeFaces fornecendo feedback, novas idéias, relatórios de bugs e
remendos. É a estrutura favorita dos desenvolvedores para criar interfaces ricas com Java
(CAGATAI CIVICI, “PrimeFaces User Guide 5.1. First Edition”). Existem outros
frameworks da mesma família do PrimeFaces que são RichFaces e ICEfaces, mas que
não serão estudados aqui.
2.3.3. AngularJS
O AngularJS é um framework do JavaScript OpenSourse criado em 2009 por
Misko Hevery e Adam Abrons, mantido pela Google, que auxilia na execução de paginas
simples de aplicações e promove uma alta produtividade e experiência no
desenvolvimento web. É considerada a melhor escolha para construção de interface do
usuário.
17
A sua construção baseou-se na crença de programação declarativa7, enquanto
que a programação imperativa 8 por outro lado é muito melhor e preferida para
implementar a lógica de negócios de uma aplicação.
Para isso, o AngularJS habilita o HTML (HyperText Markup Language),
estendendo o seu vocabulário, de modo a facilitar a vida dos desenvolvedores. Esse
processo resulta em desenvolvimento de aplicações expressivas e componentes
reutilizáveis, deixando de lado grandes quantidades de linhas de códigos desnecessários
mantendo a equipe focada apenas em coisas mais importantes e valiosas.
3. Metodologia de Desenvolvimento e
Modelagem
Para modelar os projetos “Experimento I e Experimento II” em questão foi
escolhida a metodologia de desenvolvimento ágil Extreme programming – XP, com base
no critério de agilidade e praticidade que o método oferece para construção de sistemas
web simples. Apesar o Extreme Programming possuir vários cenários que permitem a
construção de um sistema web, foi considerada com maior relevância a simplicidade,
pois este cenário permite simplificar ao máximo e no imediato o desenvolvimento de
sistemas.
7
8
Consiste em informar o computador “O que precisa ser feito!”.
Informa o computador “Como as instruções devem ser executadas!”.
18
Por outro lado o framework escolhido foi o PrimeFaces que é uma biblioteca de
componente de interface gráfica para aplicações web baseados em JSF que será usado
apenas no Experimento II, isto porque, para além de ser o framework mais popular,
permite o desenvolvimento de aplicações web bastante sofisticadas. E com ele é possível
obter um aumento de produtividade por parte do desenvolvedor.
3.1. Arquitetura do Modelo MVC
Figura 3.1: Estrutura do modelo de desenvolvimento das ferramentas.
3.2. Conceitos de Arquitetura
O MVC (Model View Controller – Modelo, Visão e Controlador) tem ganhado
popularidade há algum tempo na indústria de desenvolvimento de software e tornou-se
numa das arquiteturas empresariais mais utilizadas.
19
O Modelo representa o conhecimento, a Visão representa a responsabilidade e o
Controlador medeia a relação entre o Modelo e a Visão. Contudo, esses conceitos são
um pouco abstratos e o padrão pode ter implementações diferentes dependendo da
plataforma e da finalidade da aplicação.
A Visão também chamada de modelo é toda ela escrita em HTML o que confere
aos designers web e desenvolvedores de JavaScript a oportunidade de trabalharem juntos.
Por trás da Visão há o Controlador. No começo, o Controlador contém implementação
de lógica de negócios usada pela Visão. No entanto, à medida que a aplicação cresce
torna-se importante executar algumas atividades de refatoração, como mover o código do
Controlador para outros componentes, de modo a manter a coesão elevada.
A conexão entre a Visão e o Controlador é feita por um objeto compartilhado
denominado escopo e é usado para trocar informações relacionadas ao modelo. O Bean é
a classe que encapsula os dados provenientes do formulário, para que não se percam
durante a execução do programa, e se comunica com a classe Entidades. A classe
Entidades realiza o armazenamento das informações vindas do formulário e estabelece
comunicação com a classe Bean.
A Lista é uma página gerada pelo SERVLETS com o modo reportar, com todos
os registros de uma tabela, opção que depende do botão “Listar” do formulário. A classe
DAO é onde se realiza a declaração SQL para fazer o CRUD.
E por fim a Classe
Conexão é uma classe Java que tem como função estabelecer a conexão com o banco de
dados. A conexão é obtida sempre que se faça uma consulta ao banco de dados e deve ser
fechada toda vez que a consulta terminar.
20
3.2.1. Conexão com Banco de Dados via JDBC
Sempre que criamos um sistema, precisamos de um banco de dados para
persistir informações e também nos comunicarmos com ele para que o mesmo possa
realizar operações desejadas. Um jeito fácil de fazer isso em Java é através de um driver
JDBC - Java Database Connectivity.
O JDBC é a especificação da linguagem Java para se comunicar com o banco
de dados MySQL9, onde os desenvolvedores de SGBD - Sistema de Gerenciamento de
Banco de Dados, como o Microsoft, o Oracle, ou o SQL Server, desenvolvem seus
drivers JDBC, que nada mais são do que arquivos com extensão JAR (Java Application
Resource). No entanto, para sabermos qual seria o driver a ser chamado é preciso uma
classe que seja responsável pelo gerenciamento do respectivo trabalho.
A figura 3 mostra como é constituída uma arquitetura JDBC (Luckow, Melo,
Programação Java para Web, 2010, p.107).
9
É um Sistema de Gerenciamento de Banco de Dados que usa linguagem de consulta estruturada.
21
Figura 3.2: Arquitetura do JDBC (Fonte: Programação Java para Web, 2010,
p.108).
Essa arquitetura é composta por algumas classes e conjunto de drivers. Sendo
que a classe DriverManager é a classe responsável pelo processo de chamada de driver
com base no uso do método getConnection. Para fazer tal operação é passado um
parâmetro para esse método, uma string contendo um tipo de URL (Uniform Resource
Locator ou em português Localizador Padrão de Recursos), que por sua vez, contém as
informações para a conexão com o banco de dados.
Como o banco de dados escolhido para ser usado neste projeto é o banco de
dados MySQL, a URL padrão para a conexão com o banco de dados ficaria da seguinte
maneira:
URL: jdbc:mysql//servidor:porta/banco
Ou usando uma URL completa contendo informações opcionais da seguinte forma:
22
URL: jdbc:mysql//servidor:porta/banco[?user=valor&password=valor]
Portanto uma classe Java para uma conexão com o banco de dados ficaria
conforme o Apêndice I. Vale ressaltar que as URLs de conexão JDBC são diferentes
para os mais diversos bancos de dados, apesar de todos seguirem o mesmo princípio.
4. Descrição dos Experimentos
4.1. Desenvolvimento do Experimento I usando
JavaScript e JSF
Nesta etapa será descrita o passo a passo do primeiro sistema web
(Experimento I) desenvolvido usando JavaScript com o framework JSF (JavaServer
Faces) e Banco de Dados MySQL gerando uma aplicação CRUD.
Esse primeiro experimento foi desenvolvido importando apenas os objetos das
classes de entidades de banco de dados. Foi escolhido para a criação da aplicação web a
ferramenta de desenvolvimento NetBeans IDE, que funcionará em conjunto com o
WampServer para gerenciamento do servidor e o Workbench para gerenciamento de
banco de dados.
A aplicação oferece a possibilidade de listar e modificar dados contidos no
banco de dados. Ela contará com as tecnologias JavaServer Faces para páginas Web e
Java Persistence API (JPA) para gerar as classes de entidade a partir do banco de dados e
gerenciar as transações. O servidor escolhido é o WampServer, que funcionará como
servidor local.
23
O NetBeans IDE oferece dois assistentes que geram todos os códigos da
aplicação em questão. O primeiro é o assistente para Classes de Entidade do Banco de
Dados que permite gerar as classes de entidade a partir do banco de dados fornecido. O
segundo é o Assistente de Páginas Web para gerar as páginas web da aplicação.
Após a criação das classes de entidade, utilizamos o assistente de Páginas JSF
de Classes de Entidade para criar EJBs 10 (Enterprise JavaBeans) e Beans gerenciados
pelo JSF para as classes de entidade, bem como um conjunto de páginas de Facelets para
manipular as views dos dados da classe de entidade.
Antes de começar as etapas de desenvolvimento propriamente dito, começamos
primeiro por criar o banco de dados ‘financeiro’ usando a interface phpMyAdmin do
WampServer, onde podemos criar o banco e interagir diretamente com o WorkBench
SQL e o NetBeans IDE. A seguir o print desta primeira etapa.
Figura 4. Print da tela do phpMyAdmin para criação de banco de dados.
10
EJB - é um componente da plataforma JEE que roda em um container de um servidor de aplicação.
24
Depois de criar o banco de dados criamos as tabelas que fazem parte do banco,
nesse caso as tabelas “cliente” e “municipio”. A tabela cliente contém 4 colunas
(Cd_Cliente, Nm_Cliente, In_Status e Cd_Municipio) onde a chave primária 11 é o
“Cd_Cliente” e a tabela município contém 2 colunas (Cd_Municipio e Nm_Municipio),
sendo “Cd_Municipio” a chave primária.
A seguir a execução de algumas etapas para a conexão do banco de dados a partir do
NetBeans IDE.
– Na figura a baixo apresento a modelagem ER (Entidade Relacionamento) do
Banco de Dados MySQL gerado através da engenharia reversa, usado para a criação da
aplicação.
Esta modelagem indica o relacionamento que existe entre as duas tabelas que
compõem o banco de dados ‘financeiro.sql’. Esse relacionamento é feito através da
chave estrangeira (fk – foreign key).
Figura 4.1: Modelagem ER (Entidade Relacionamento) do banco de dados usado.
11
Referem-se aos conjuntos de um ou mais campos, cujos valores nunca se repetem na mesma tabela.
25
A próxima etapa vamos para o NetBeans IDE 7.4 para criarmos o nosso projeto.
Depois de executar o NetBeans, criamos através da barra de ferramentas em Arquivo
depois o Novo Projeto e a seguir Java Web e por fim Aplicação Web e temos assim o
Projeto pronto conforme a imagem seguinte.
Figura 4.2: Print da tela do NetBeans para criação do novo projeto.
A seguir escolhemos um nome para o projeto e clicamos em próximo. Depois
escolhemos o Servidor GlassFish e a Versão do Java EE e seguimos adiante.
26
Figura 4.3: Tela para escolha de servidor para o projeto.
Posto isso, na etapa seguinte escolhemos o framework que será utilizado na
aplicação web que no nosso caso é o JavaServer Faces e clicamos em finalizar para
concluir essa etapa, conforme a figura seguinte.
Figura 4.4: Tela com a opção da escolha do framework.
27
4.1.1. Gerando as Classes de Entidade do Banco de Dados
Após conexão com o banco de dados do IDE, utilizamos o assistente de Classes
de Entidade do Banco de Dados para gerar de forma rápida as classes de entidade com
base nas tabelas do banco de dados. O IDE gera as classes de entidade para cada tabela
selecionada e também pode gerar classes de entidades necessárias para tabelas
relacionadas a elas.
Na janela projetos, clicamos com o botão direito do mouse no projeto
ProjetoFinal-Experimento I e selecionar Novo -> Classes de Entidade do Banco de
Dados. A seguir, em assistente de Arquivo, selecionar a categoria Persistência e
posteriormente, Classes de Entidade do Banco de Dados.
Digitar jdbc/financeiro como o nome da conexão e selecionar a url:
jdbc:mysql://localhost:3306/financeiro, clicar em ok. As tabelas do banco de dados
financeiro serão exibidas na lista de conteúdos de Tabelas Disponíveis. Clicar em
Adicionar Tudo para selecionar todas as tabelas contidas no banco de dados e clicar em
próximo.
28
Figura 4.5: Tela de Classes de Entidade do Banco de Dados.
Assim que clicarmos em finalizar, o IDE gera as classes de entidade no pacote
Entidades do projeto. As classes são geradas de acordo com a quantidade de tabelas
contidas no banco de dados e cada uma das tabelas do banco terá sua classe de entidade.
29
Figura 4.6: Diagrama de Classes de Entidades de banco de dados.
4.1.2. Gerando Páginas JSF de Classes de Entidade
Depois de criar as classes de entidade, podemos criar interfaces Web usando o
assistente de Páginas JSF de Classes de Entidade para gerar as páginas JavaServer Faces.
Para cada classe de entidade o assistente gera um Bean de sessão, um Bean gerenciado
com escopo de sessão JSF, um diretório com quatro arquivos de Facelets, os recursos
CRUD (Create.xhtml, Edit.xhtml, List.xhtml e View.xhtml). São gerados também os
seguintes arquivos:
30

A classe AbstrateFacade.java que contém a lógica do negócio para a criação,
modificação, recuperação e remoção das instancias de entidade.

A classe de utilitário usado pelos Beans gerenciados pelo JSF.

Um conjunto de propriedades para mensagens localizadas e uma entrada
correspondente no arquivo de configuração Faces do projeto.

Arquivos web auxiliares, incluindo uma folha de estilo (CSS) padrão para
componentes renderizados e um arquivo de modelo de Facelets.
4.1.3. Criação das Páginas JSF
Para isso, vamos à janela Projetos, clicamos com o botão direito do mouse no nó
do projeto e selecionamos Novo -> Paginas JSF de Classes de Entidade para abrir o
assistente. A caixa Classes de Entidade Disponíveis lista todas as classes que estão
contidas no projeto.
31
Figura 4.7: Criação das Páginas JSF através das classes de entidade.
Na etapa seguinte o assistente gera as Classes e as páginas JSF conforme a
imagem a seguir.
Figura 4.8: Gerando páginas e classes JSF.
Ao clicarmos em finalizar, vemos que o IDE gera os Beans de sessão, o escopo
de sessão e Beans gerenciados com JSF no pacote JSF.Classes. Cada Bean de sessão
manipula as operações da classe de Entidade a que pertence incluindo Criação, Edição, e
Destruição de instancias da classe de Entidade através da API de Persistência Java. Os
Beans gerenciados pelo JSF implementa a interface javax.faces.convert.
Se expandirmos o nó Páginas Web podemos observar que o NetBeans IDE gerou
uma pasta para cada uma das Classes de entidade, cliente e município. Cada uma destas
pastas contém os arquivos “Create.xhtml, Edit.xhtml, List.xhtml e View.xhtml”, tendo
modificado também o arquivo índex.xhtml, inserindo um link em casa uma das páginas
List.xhtml.
32
Ao expandir o nó Pacotes de Código-fonte vemos que os Beans de Sessão, os
Beans gerenciados pelo JSF, as classes de Utilitários (JSF.Classes.util) e o conjunto de
propriedades criadas pelo assistente.
Figura 4.9: Projeto completo com todas as classes que fazem parte do mesmo.
33
4.2. Explorando o Experimento I
Depois de concluirmos todas as etapas de criação do projeto podemos executalo para observarmos as suas funcionalidades descritas em cada etapa. Vemos que o
projeto contém as classes de Entidades, Beans de Sessão para controlar essas classes e
um Front-end12 desenvolvido para JSF para exibir e modificar Bancos de Dados.
Figura 5: Tela inicial do sistema.
Figura 5.1: Tela listar clientes cadastrados no banco de dados.
12
Termo generalizado que refere à etapa inicial de um processo.
34
Figura 5.2: Tela de edição de clientes e municípios.
Figura 5.3: Tela para ver cliente e município.
35
Figura 5.4: Tela criar novo cliente e município.
Para esse primeiro projeto, foi necessário um período de tempo médio de 2
horas para execução do mesmo recorrendo apenas aos Assistentes de Persistência para
geração das classes de Entidades de Banco de Dados que estão disponíveis no próprio
NetBeans IDE sem a necessidade de escrever grandes quantidades de linhas de código
Java. Etapa que contou apenas com a importação das tabelas (cliente e município) de
banco de dados MySQL (financeiro) para geração das classes e das páginas web, usando
JSF (JavaServer Faces) para criação desse projeto.
4.2.1. Vantagens
Uma das grandes vantagens em criar um projeto Java Web usando JSF e Banco
de dados é a produtividade na construção do sistema e economia de tempo.
36
Outra vantagem é que o desenvolvedor não necessariamente precisa ter um
conhecimento sólido em desenvolvimento web com Java para a execução do projeto
usando estas ferramentas, basta ter um bom conhecimento da ferramenta de
desenvolvimento NetBeans IDE para poder usufruir dos seus múltiplos recursos
disponíveis.
4.2.2. Desvantagens
A desvantagem encontrada é que apesar da economia de tempo e agilidade na
construção do sistema, os desenvolvedores não poderão fazer muitas alterações no
projeto pronto, visto que o mesmo conserva algumas propriedades que não podem ser
alteradas sem, no entanto mexer em todo o projeto.
4.3. Desenvolvimento do Experimento II usando
JavaScript, JSF e PrimeFaces
Neste capitulo descrevo as etapas de construção do segundo sistema web
denominado Experimento II, desenvolvido usando a linguagem JavaScript com os
frameworks JSF (JavaServer Faces) e PrimeFaces para páginas Web e também o Java
Persistence API (JPA) para gerar as classes de entidade a partir do banco de dados
MySQL.
37
Foi escolhido também para a criação desta aplicação web a ferramenta de
desenvolvimento NetBeans IDE, que funcionará em conjunto com o WampServer para
gerenciamento do servidor e o Workbench para gerenciamento de banco de dados. O
servidor escolhido para este sistema é o mesmo do anterior o GlassFish Server 4.0 e a
biblioteca PrimeFaces 5.1. Ao contrário daquilo que foi a construção do primeiro sistema
web, este terá a sua construção baseada também em linguagem de programação
JavaScript mas com a diferença de ter sido programada todas as páginas manualmente.
A aplicação oferece a possibilidade de inserir, listar e modificar dados contidos
no banco de dados. O desenvolvimento deste sistema segue o mesmo principio do
primeiro nas suas etapas iniciais usando o NetBeans IDE. Primeiramente abrimos o
NetBeans IDE e na janela Arquivo clicamos em Novo Projeto -> Java Web -> Aplicação
Web e clicamos em próximo, escolhemos um nome “ProjetoFinal – Experimento II”
para o projeto e clicamos em próximo. A seguir escolhemos um servidor (GlassFish
Server 4.0) para o projeto, clicamos em próximo e escolhemos um framework (JSF –
JavaServer Faces) que será usado no projeto e clicar em finalizar.
Depois disso fazemos o download do arquivo da biblioteca PrimeFaces 5.1 no
próprio site da PrimeFaces (http://www.primefaces.org) e o importamos na raiz do
projeto. Posto isso, vamos à pasta Páginas Web no nó do projeto em questão e criamos
quatro arquivos (índex, template, gerenciador de carros e gerenciador de usuários)
xhtml 13 (eXtensible Hypertext Markup Language – ou em português Linguagem de
marcação de hipertexto extensível), para gerenciar a interface de usuário do sistema
como na figura seguinte.
13
É uma reformulação da linguagem de marcação HTML, baseada em XML.
38
Figura 5.5: Tela principal do projeto no Netbeans.
A seguir criamos os Pacotes de Código-fonte que compõem o sistema e suas
classes correspondentes um por vez. Desse conjunto de pacotes de Código-fonte do
sistema fazem parte os pacotes, bean, conexão, dao, entidade e util.exception, e em cada
pacote estão as suas classes correspondentes, conforme a figura abaixo.
39
Figura 5.6: Pacotes de Código-fonte do sistema.
Depois de termos todas as classes prontas, criamos o banco de dados “sistema”
e estabelecemos a conexão com o banco através da classe “Conexao.java” do pacote
conexão. Essa conexão é feita usando o driver JDBC14 (Java Database Connectivity).
Estabelecida a conexão podemos executar o projeto e explorar as suas funcionalidades
para verificar o desempenho e facilidade de comunicação com banco de dados MySQL e
fazer uma comparação com o sistema anterior mediante o uso de PrimeFaces.
14
Conjunto de classes e interfaces escritas em Java que enviam instruções SQL para qualquer banco
de dados relacional.
40
4.3.1. Explorando o Experimento II
Nesta etapa vamos conferir as funcionalidades da aplicação, e testar todas as
componentes desenvolvidas. A imagem a seguir refere-se a tela da página inicial do
sistema. É uma pagina simples que contém apenas três campos “Home, Gerenciar Carros
e Gerenciar Usuários”, para além do nome do sistema e uma mensagem de boas vindas.
A moldura da interface e a criação do estilo e tipo de letras, foram gerados
automaticamente pelo PrimeFaces sem a necessidade de recorrer a folhas de estilos CSS
(Cascading Style Sheets).
Figura 6: Tela principal do sistema.
A figura seguinte nos mostra a tela “Gerenciar Carros”. Neste campo temos as
opções de criar um novo objeto carro, buscar objetos cadastrados em banco de dados,
assim como editar e deletar objetos que são operações básicas do banco de dados.
41
Figura 6.1: Gerenciador de carros.
O mesmo se sucede com a imagem a seguir onde temos o campo “Gerenciador de
Usuários”.
Figura 6.2: Gerenciador de usuários.
A construção desse sistema foi um pouco mais demorada, foram cerca de dois
dias, mais ou menos, para inicio e conclusão do sistema, isto porque era preciso um
pouco mais de trabalho e experiência em desenvolvimento JavaScript. Foi necessário
recorrer a algumas bibliografias de apoio e principalmente o tutorial do PrimeFaces 5.1.
42
4.3.2. Vantagens
Para o desenvolvimento de um sistema Java Web usando JSF e PrimeFaces temos
vantagens de aumento da produtividade na construção dos sistemas por parte do
desenvolvedor. Os sistemas desenvolvidos usando a ferramenta PrimeFaces são mais
sofisticados, flexíveis e personalizáveis e possui grande opção de componentes para
diversas finalidades. Também possui melhor performance com relação ao desempenho
dos navegadores utilizados.
4.3.3. Desvantagens
Criação de uma aplicação web com Java usando o framework PrimeFaces requer
um conhecimento mais sólido em desenvolvimento. O PrimeFaces apesar de gerar um
aumento de produtividade, ele requer um tempo maior na construção de sistemas. A
documentação do PrimeFaces não é muito elucidativa.
43
5. Conclusão e Trabalhos Futuros
Este projeto teve como objetivo o desenvolvimento dois sistemas Web que
comunicasse com Banco de Dados, usando a linguagem de programação JavaScript com
os frameworks JavaServer Faces (JSF) e PrimeFaces no sentido de destacar as vantagens
e desvantagens da utilização do PrimeFaces na construção de sistemas, fazendo assim
uma analise de alguns pontos importantes e verificação de comparações com os
frameworks utilizados na construção desses sistemas.
Foram utilizadas como motivação para elaboração deste projeto as dificuldades
encontradas na construção de aplicações web por parte de desenvolvedores com pouca
experiência e produtividade na construção de sistemas usando frameworks disponíveis.
Mesmo que o sistema não tenha sido disponibilizado online de modo a ser obter dados
mais sucintos, ainda assim, foi possível fazer uma analise dos seus pontos mais críticos.
As funcionalidades dos sistemas foram testadas e comparadas entre si, mediante o uso
dos frameworks em questão.
Foram analisados tempos de duração para a construção de cada sistema,
complexidades de criação de cada sistema, produtividade na construção e agilidade na
construção dos sistemas através dos frameworks JavaServer Faces e PrimeFaces. O
tempo gasto para a construção do primeiro sistema “ProjetoFinal-Experimento I” foi
bem menor que o tempo para criar o segundo “ProjetoFinal-Experimento II”, isto devido
a metodologia e framework empregado no desenvolvimento dos mesmos. Os
frameworks tornaram fácil o desenvolvimento desses sistemas, mostrando serem ótimas
opções para a redução de tempos, custos e aumentar a produtividade por parte das
equipes de desenvolvimento.
44
Os sistemas foram desenvolvidos para rodar tanto num servidor local (localhost)
como na web e registrou um ótimo desempenho, possibilitando rápido acesso ao banco
de dados e a realização das operações CRUD. A plataforma para desenvolvimento desses
experimentos foi toda ela configurada num notebook com sistema operacional Windows
10 de 64 Bits com 4 GB de Memória RAM e um Processador Intel Core i3 e também
num Computador Desktop com Windows 10, 64 Bits, 8 GB de Memória RAM e
Processador Intel Core i3 e teve um ótimo desempenho respondendo a todas operações
solicitadas de forma rápida e concisa.
Como trabalhos futuros, proponho a construção dos mesmos sistemas usando o
framework AngularJS e a Metodologia Ágil SCRUM, a utilização do processo de
engenharia de software RUP (Rational Unified Process), e buscar outras linguagens que
permitem fazer CRUD usando técnicas similares. Fazer uma pesquisa de levantamento
da utilização dos frameworks por parte dos desenvolvedores.
45
6. Referências Bibliográficas
[1] IAN SOMMERVILLE. Desenvolvimento Ágil. Engenharia de Software 8ª Edição, 2010.
[2] ROGER. PRESSMAN, B. MAXIM. Extreme Programming – XP: Engenharia de Software 8ª
Edição (2016). Página 72.
[3] Extreme Programming (XP): Disponível em: http://www.devmedia.com.br/introducao-aoextreme-programming-xp/2924.9: Acesso em 07 de Janeiro de 2017.
[4] Desenvolvimento Ágil. Disponível em: http://www.desenvolvimentoagil.com.br/xp/: Acesso
em 08 de Janeiro de 2017
[5]
D.
PEDRO,
D.
VIEIRA.
Metodologia
Scrum.
http://www.mindmaster.com.br/scrum/: Acesso em 08 de Janeiro de 2017.
Disponível
em:
[6] N. IONEL, 2008.: Critical Analysys of the SCRUM Project Management Methodology
[7] E.S. F. Cardozo, J. B. F. A. Neto, A. Barza, A. C. França, F. Q. B. da Silva.: SCRUM and
Productivity in Software Projects: A Systematic Literature Review.
[8] ELMASRI, NAVATHE, 2005: Sistema de Banco de Dados, 4ª Edição.
[9] DÉCIO. H. LUCKOW, ALEXANDRE. A. MELO: Programação JAVA Para a Web (2010).
[10] PAUL DEITEL, HARVEY DEITEL. Java Como Programar, 8ª Edição, 2010.
[11] NetBeans IDE, Sun Systems. Disponível em: https://netbeans.org/. Acesso em 15 de Janeiro
de 2017.
[12] WampServer, SourceForge. Disponível em: http://www.wampserver.com/en/, e
https://sourceforge.net/projects/wampserver/?source=directory. Acesso em 15 de Janeiro de 2017.
[13] MySQL WorkBench. Disponivel em: http://www.mysql.com/products/workbench/. Acesso
em 15 de Janeiro de 2017.
[14] FLANAGAN, David; FERGUSON, Paula. JavaScript: The Definitive Guide. 6th ed.
O'Reilly & Associates.
[15] PrimeFaces. Disponivel em: http://www.primefaces.org/. Acesso em 15 de Janeiro de 2017.
[16] BRAD GREEN, SHYAM SESHADRI. AngularJS.
[17] BRANAS, Rodrigo. AngularJS Essentials, Agosto 2014.
[18] AngularJS. Disponível em: http://angularjs.org. Acesso em 17 de Janeiro de 2017.
46
Apêndice I
1 – Classe Java para conexão com um banco de dados.
#ConexaoMySQL.java
package Conexao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConexaoMySQL {
public static void main(String[] args){
Connection conexao = null;
try{
//Registrar a classe JDBC no sistema em tempo de execução.
String url = “jdbc:mysql://localhost/banco”;
String usuario = “root”;
String senha = “root”;
Conexao = DriverManager.getConnection(url, usuario, senha);
System.out.println(“Conectou ao banco!”);
}catch(SQLException e) { // Captura exceções sempre que ocorrer.
System.out.println(“Ocorreeu um erro de SQL. Erro: ” +
e.getMessage());
}finally{
try{
conexao.close();
}catch (SQLException e){
System.out.println(“Erro
e.getMessage());
}
}
}
}
Resultado: Conectou ao banco!
47
ao
fechar
a
conexão.
Erro
”
+
Download