Ediney dos Santos

Transcrição

Ediney dos Santos
UNIVERSIDADE FEDERAL DE MATO GROSSO
INSTITUTO DE COMPUTAÇÃO
COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EM
CIÊNCIA DA COMPUTAÇÃO
RELATÓRIO DE ESTÁGIO SUPERVISIONADO
DESENVOLVIMENTO DE UM CONTROLE ACADÊMICO
PARA O HOSPITAL UNIVERSITÁRIO JÚLIO MÜLLER
EDINEY DOS SANTOS LOPES
CUIABÁ – MT
2016
UNIVERSIDADE FEDERAL DE MATO GROSSO
INSTITUTO DE COMPUTAÇÃO
COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EM
CIÊNCIA DA COMPUTAÇÃO
RELATÓRIO DE ESTÁGIO SUPERVISIONADO
DESENVOLVIMENTO DE UM CONTROLE ACADÊMICO
PARA O HOSPITAL UNIVERSITÁRIO JÚLIO MÜLLER
EDINEY DOS SANTOS LOPES
Relatório
apresentado
ao
Instituto
de
Computação da Universidade Federal de
Mato Grosso, para obtenção do título de
Bacharel em Ciência da Computação.
CUIABÁ – MT
2016
UNIVERSIDADE FEDERAL DE MATO GROSSO
INSTITUTO DE COMPUTAÇÃO
COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EM
CIÊNCIA DA COMPUTAÇÃO
EDINEY DOS SANTOS LOPES
Relatório de Estágio Supervisionado apresentado à Coordenação do Curso de
Ciência da Computação como uma das exigências para obtenção do título de
Bacharel em Ciência da Computação da Universidade Federal de Mato Grosso
Aprovado por:
Prof. Dr. Raphael de Souza Rosa Gomes
Instituto de Computação
(ORIENTADOR)
Prof. Dr. Thiago Meirelles Ventura
Instituto de Computação
(CONVIDADO)
Leonardo Luiz Braun
HUJM/SGPTI
(SUPERVISOR)
DEDICATÓRIA
A Deus, pois dele emana toda a sabedoria.
À minha esposa Sinei, companheira fiel.
À minha filha Vanessa, razão da minha vida.
À minha mãe, Fátima, meu porto seguro.
AGRADECIMENTOS
Agradeço primeiramente a Deus, pois sozinho não teria concluído esse
trabalho. “Vinde a mim todos os que estais cansados e sobrecarregados e eu vos
aliviarei” (Mateus 11:28-30). Agradeço também à minha família pelo apoio e
incentivo.
Agradeço aos professores do Instituto de Computação, por terem sido
fundamentais na minha vida acadêmica. Agradeço especialmente os professores
Maurício Pereira e Nelcileno Araújo por me ajudarem quando precisei recorrer à
Coordenação do Curso.
Agradeço ao meu orientador professor Raphael de Souza Gomes por me
orientar e instruir com paciência, sendo decisivo para a realização deste trabalho.
Agradeço a todos da equipe da SGPTI do Hospital Júlio Müller, cujo
companheirismo enriqueceu minha formação profissional. Agradeço em especial ao
meu supervisor de estágio Leonardo Braun, um exemplo do que é ser um líder de um
grande time de profissionais.
Agradeço aos amigos que fiz no Instituto de Computação, companheiros que
levarei por toda minha vida.
SUMÁRIO
LISTA DE FIGURAS .................................................................................................................... .8
LISTA DE TABELAS .................................................................................................................... 9
LISTA DE SIGLAS E ABREVIATURAS ................................................................................... 10
RESUMO ...................................................................................................................................... 11
INTRODUÇÃO ............................................................................................................................ 12
1.
REVISÃO DE LITERATURA ............................................................................................ 13
1.1. VISÃO GERAL DAS TECNOLOGIAS E APLICAÇÕES DE CAMADA ÚNICA.... 13
1.2. APLICAÇÕES DE DUAS CAMADAS ........................................................................ 14
1.3. APLICAÇÕES MULTI-CAMADAS: WEB ................................................................ 15
1.4. O PADRÃO MVC......................................................................................................... 17
1.5. JAVA SERVLET .......................................................................................................... 19
1.6. JAVASERVER FACES ................................................................................................ 20
1.7. MAPEAMENTO OBJETO RELACIONAL................................................................ 22
1.8. JPA E HIBERNATE..................................................................................................... 22
2.
MATERIAS, TÉCNICAS E MÉTODOS ............................................................................ 23
2.1. APACHE MAVEN ....................................................................................................... 24
2.2. FACELETS PAGES ..................................................................................................... 25
2.3. VIEWS .......................................................................................................................... 27
2.4. MANAGED BEANS ..................................................................................................... 27
2.5. DOMAIN MODEL ....................................................................................................... 27
2.6. PERSISTÊNCIA........................................................................................................... 28
3.
RESULTADOS .................................................................................................................... 29
3.1. CONFIGURAÇÕES DOS ARQUIVOS WEB.XML E FACES-CONFIG.XML ........ 29
3.2. ESTRUTURA DA APLICAÇÃO ................................................................................. 31
3.3. O ARQUIVO POM.XML ............................................................................................. 33
3.4. AS CLASSES MODEL E OS PACOTES AUXILIARES ............................................ 38
3.5. CONVERTERS ............................................................................................................ 39
3.6. EXCEPTIONS .............................................................................................................. 40
3.7. FILTERS ...................................................................................................................... 40
3.8. REPOSITORY.............................................................................................................. 41
3.9. SERVICE ...................................................................................................................... 42
3.10. UTIL ........................................................................................................................... 42
3.11. VALIDATORS ........................................................................................................... 43
3.12. VIEWS ........................................................................................................................ 43
6
SUMÁRIO
4.
DIFICULDADES ENCONTRADAS .................................................................................. 47
4.1. PADRÃO DO PROJETO ............................................................................................. 47
4.2. FACELETS E SERVLETS .......................................................................................... 47
4.3. JAVASERVER FACES + PRIMEFACES ................................................................... 47
4.4. MANAGED BEANS ..................................................................................................... 48
4.5. CLASSES DAO ............................................................................................................ 48
4.6. PERSISTÊNCIA........................................................................................................... 48
4.7. VIEWS .......................................................................................................................... 48
5.
CONCLUSÕES ................................................................................................................... 49
6.
REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................ 50
7.
APÊNDICES........................................................................................................................ 51
APÊNDICE 1. CLASSE ALUNOBEAN ............................................................................. 51
APÊNDICE 2. ENTIDADE ALUNO .................................................................................. 52
APÊNDICE 3. ENTIDADE PESSOA (PARTE 1) .............................................................. 53
APÊNDICE 4. ENTIDADE PESSOA (PARTE 2) .............................................................. 54
APÊNDICE 5. ENTIDADE PESSOA (PARTE 3) .............................................................. 55
APÊNDICE 6. ENTIDADE PESSOA (PARTE FINAL) .................................................... 56
APÊNDICE 7. GENERICDAO ........................................................................................... 57
APÊNDICE 8. CLASSE ALUNOCONVERTER ............................................................... 58
APÊNDICE 9. CLASSE ALUNOFILTER ......................................................................... 59
APÊNDICE 10. CLASSE ALUNOREPOSITORY............................................................. 60
APÊNDICE 11. CLASSES ALUNOSERVICE E ALUNOSERVICEIMPL ...................... 61
APÊNDICE 12. HIBERNATEUTIL ................................................................................... 62
7
LISTA DE FIGURAS
Figura 1 – Arquitetura 1-tier (camada única) ........................................................... 14
Figura 2 – Arquitetura 2-tier (duas camadas) ........................................................... 15
Figura 3 – Arquitetura J2EE (multi-camadas) ......................................................... 16
Figura 4 – Padrão MVC .......................................................................................... 18
Figura 5 – Arquitetura JSF (MVC2) ........................................................................ 20
Figura 6 – Ciclo de Vida JSF .................................................................................. 21
Figura 7 – Diagrama de atividades (CRUD Aluno) ................................................. 23
Figura 8 – Estrutura inicial do projeto acadêmico .................................................... 24
Figura 9 – Arquivo listadeestados.xhtml ................................................................. 26
Figura 10 – Tela gerada do arquivo listadeestados.xhtml ......................................... 26
Figura 11 – Arquivo persistence.xml ....................................................................... 28
Figura 12 – Arquivo web.xml ................................................................................. 29
Figura 13 – Arquivo faces-config.xml ..................................................................... 30
Figura 14 – Relação de pacotes do projeto academico ............................................. 32
Figura 15 – Relação das pastas de visões do projeto academico .............................. 33
Figura 16 – As dependências da Apache ................................................................. 34
Figura 17 – As dependências do Hibernate .............................................................. 35
Figura 18 – As dependências Javax ......................................................................... 36
Figura 19 – As dependências OmniFaces, PostgreSQL, PrettyFaces, PrimeFaces .... 37
Figura 20 – As dependências Spring e o Build ........................................................ 38
Figura 21 – AlunoDAO ........................................................................................... 39
Figura 22 – Pacote Converter .................................................................................. 40
Figura 23 – Pacotes Exceptions e Filters ................................................................. 41
Figura 24 – Pacotes Repository e Service ................................................................ 42
Figura 25 – Pacote Util ........................................................................................... 43
Figura 26 – Tela cadastrodecursos.jsf ...................................................................... 44
Figura 27 – Tela listadeturmas.jsf ........................................................................... 44
Figura 28 – Tela cadastrodealunos.jsf ..................................................................... 45
Figura 29 – Tela cadastrodealunos.jsf após clique no botão Foto ............................. 46
8
LISTA DE TABELAS
Tabela 1 – O padrão modelo-visão-controlador (MVC) ........................................... 18
Tabela 2 – Controle Facelets Page e Template Tags ............................................... 25
9
LISTA DE SIGLAS E ABREVIATURAS
API
Application Programming Interface (Interface de Programação de
Aplicação)
CSS
Cascading Style Sheets (Linguagem de Folhas de Estilo)
HUJM
Hospital Universitário Júlio Müller
HTTP
Hypertext Transfer Protocol (Protocolo de Transferência de Hipertexto)
IDE
Integrated Development Environment (Ambiente de Desenvolvimento
Integrado)
J2EE
Java 2 Platform, Enterprise Edition (Plataforma Edição Empresarial)
Java EE Java Enterprise Edition (Java Edição Empresarial)
JPA
Java Persistence API
JSF
JavaServer Faces
JSP
JavaServer Pages
MVC
Model-View-Controller (Modelo-Visão-Controlador)
ORM
Object-Relational Mapping (Mapeamento Objeto Relacional)
POJO
Plain Old Java Objects (Velhos e Simples Objetos Java)
SGPTI
Setor de Gestão de Processos e Tecnologia da Informação
XML
eXtensible Markup Language (Linguagem de Marcação Extensível)
10
RESUMO
Este trabalho apresenta o desenvolvimento do Controle Acadêmico HUJM, um
sistema que será integrado ao Framework Class, do Setor de Gestão de Processos e
Tecnologia da Informação (SGPTI) do Hospital Universitário Julio Müller e que tem
por finalidade gerir a frequência acadêmica do referido hospital. O intuito principal
do estágio foi estruturar um sistema web compatível com o ambiente do framework
da SGPTI e que atendesse a necessidade objeto de sua implementação. Para tanto,
foram abordados temas das áreas de desenvolvimento Web com o uso do padrão de
projeto MVC, utilizando os recursos da JavaServer Faces (JSF) e do PrimeFaces,
passando por toda a parte de desenvolvimento Java na IDE do Eclipse combinados
com Apache Maven e o Server Wildfly, até chegar a área de Banco de Dados,
incluindo a JPA, o framework de persistência Hibernate e o seu destino final, o banco
PostgreSQL, onde os dados ficarão armazenados. Ao final, foram apresentados os
resultados obtidos e possíveis melhorias no desenvolvimento dessa aplicação web.
Palavras chaves: desenvolvimento web, Facelets, JavaServer Faces.
11
INTRODUÇÃO
O Setor de Gestão de Processos e Tecnologia da Informação (SGPTI) do
Hospital Universitário Julio Müller atualmente vem passando por um momento de
inovação e de aperfeiçoamento em sua rotina de trabalho, e nesse contexto se destaca
a implantação de um ambiente para desenvolvimento Java, com foco principal na
criação de um framework, ou seja, de um módulo de gerenciamento de permissão
para novos sistemas. Por esse motivo as aplicações existentes, e também as em
construção, estão sendo refatoradas para essa nova realidade, inclusive o sistema
acadêmico, que é objeto deste trabalho.
O Controle Acadêmico HUJM, como dito anteriormente, é parte do
ambiente de desenvolvimento de aplicações Java da SGPTI e tem como objetivo
gerir toda a rotina dos acadêmicos que frequentam as dependências do Hospital
Universitário Julio Muller, contendo dados pessoais dos alunos bem como dados que
atestam o seu vínculo com o Hospital. Esse controle se faz necessário devido ao fato
do HUJM acolher alunos da área de saúde (internos, residentes, etc.) que estejam
cursando disciplinas que exija serem aplicadas em ambiente hospitalar.
O objetivo desse trabalho é abordar todas as ferramentas e metodologias
escolhidas para o desenvolvimento da aplicação do Controle Acadêmico HUJM e o
resultado obtido com essas escolhas.
12
1. REVISÃO DE LITERATURA
Para a realização das atividades propostas foram necessárias diversas
pesquisas e aprofundamento em conceitos vistos no decorrer do curso de Ciência da
Computação, da mesma forma um estudo bem criterioso da especificação JavaServer
Faces, que é uma tecnologia relativamente nova, para uma melhor compreensão de
seu uso e características.
As subsessões seguintes descrevem temas e conceitos envolvidos no
decorrer das atividades desse estágio supervisionado.
1.1 - Visão geral das tecnologias e aplicações de camada única
No decorrer da história dos computadores, o desenvolvimento de aplicações
passa constantemente por mudanças e esse processo evolutivo tem refletido
diretamente na produtividade e na flexibilidade do ambiente de desenvolvimento,
que vem se adaptando à medida que vão surgindo novas tecnologias, como veremos
a seguir.
Ao final dos anos 70 e início dos anos 80, houve a mudança de
computadores grandes para computadores pessoais (PCs), e o seu uso deixou de ser
algo exclusivo para poucos usuários, tornando-se mais popular (JACOBI &
FALLOWS, 2006).
Embora a maioria das aplicações desenvolvidas à época representar o que
tinha de mais avançado, elas foram projetadas para tarefas com usuário único e os
dados eram exclusivos, ou seja, não eram compartilhados. Não havia uma central de
bases de dados ou sistemas de e-mail.
Do ponto de vista da manutenção do sistema, esta solução de camada única
consistia em uma aplicação residente em uma máquina. Ela abrigaria ao mesmo
tempo as camadas de apresentação (telas), a das regras de negócio e a de dados, o
que tornava praticamente impossível o compartilhamento de informações (JACOBI
& FALLOWS, 2006). Essa realidade é facilmente expressada na Figura 1 a seguir.
13
Figura 1. Descreve a arquitetura de aplicações camada única. (Imagem adaptada de:
<https://www.cs.colorado.edu/~kena/classes/7818/f06/lectures/02/>)
Percebe-se, pelo que mostra a Figura 1, que a principal característica da
arquitetura 1-tier (camada única) é possuir todo o sistema de informação na máquina
cliente.
1.2 - Aplicações de duas camadas
Também conhecida por cliente-servidor tornou-se o centro das atenções na
década de 1980, aposentando as soluções de camada única. A arquitetura de duas
camadas permite o compartilhamento de dados, mudando a maneira de desenvolver e
implantar as aplicações a partir de então. Aplicações de duas camadas interagem
diretamente com o usuário, sendo que a lógica para a tela de visualização e as regras
de negócios são armazenadas na máquina cliente, enquanto que os dados residem em
um servidor remoto (JACOBI & FALLOWS, 2006).
Esta arquitetura permite que vários usuários acessem os dados
(centralizados na máquina servidor) com aplicações desktop nas máquinas clientes.
14
Exemplo: Microsoft Outlook. A Figura 2 mostra graficamente como seria essa
arquitetura.
Figura 2. Descreve a arquitetura de aplicações com duas camadas. (Imagem adaptada de:
<https://www.cs.colorado.edu/~kena/classes/7818/f06/lectures/02/>).
A arquitetura 2-tier (duas camadas), como se observa na Figura 2, é difere
da arquitetura 1-tier (camada única) pelo fato de separar o sistema de informação em
duas partes: uma contendo a lógica da aplicação e a gerencia de recursos armazenado
em uma máquina servidor, ficando tão somente a camada de aplicação na máquina
cliente.
1.3 - Aplicações multi-camadas: Web
A fase seguinte no desenvolvimento de aplicações chegou com a Internet e
os navegadores web e introduziu a arquitetura de três camadas, ou de vários níveis de
camadas. Arquitetura com vários níveis de camadas permite aos desenvolvedores que
se concentrem em modelos de domínios (acesso a dados), Views (apresentação), e
nos controladores (lógica). Este paradigma de programação, que representa a divisão
15
entre essas camadas, é conhecido como padrão Modelo-Visão-Controlador, ou como
o nome em inglês Model-View-Controller (MVC).
Essa arquitetura foi introduzida pela primeira vez nos aparelhos SmallTalk e
se espalhou na comunidade de desenvolvedores na década de 1980, transformando
em uma combinação de um cliente padrão (navegador da Web) e um protocolo de
comunicação padrão (HTTP), dando aos usuários acesso ubíquo para aplicações
centralizadoras, como o e-mail, por exemplo, através de um navegador (JACOBI &
FALLOWS, 2006).
A partir de então, as aplicações já podiam ser baixadas da internet, bem
como suas atualizações.
A Figura 3 mostra um esquema simples de arquitetura para uma aplicação
multi-camadas. O Cliente via browser (navegador) ou móbile (smartphone) acessa a
aplicação, num contêiner Java, para então ter contato ao sistema de informação. Tudo
ocorrendo por meio de um protocolo de comunicação.
Figura 3. Arquitetura J2EE comum a uma solução de software multi-camadas. (Imagem retirada de JACOBI and
FALLOWS, 2006).
As aplicações Web (WebApps, também conhecidas como aplicações
baseadas na Web) se caracterizam por possuir um amplo conjunto de conceitos e
16
terminologias associadas, além de possuírem características de aplicações hipermídia
(PRESSMAN, 2011).
Esse tipo de sistema não necessita executar a partir de uma instalação local,
como acontece com as aplicações desktop. Basta o uso de um navegador web para
acontecer a execução da maioria das aplicações web.
1.4 – O Padrão MVC
A parte mais sensível de um software interativo é a interface do usuário (ou
a View) por ser o meio de contato que os usuários utilizam para se comunicar com a
aplicação (DUDNEY, 2004). Em outras palavras, é a parte mais visível da maioria
dos sistemas de software.
Além das alterações diárias nos requisitos, podem existir exigências como o
suporte a mais de um sistema operacional, cada um pode necessitar uma aparência
diferente, por exemplo. Uma exigência como esta pode complicar o que à primeira
vista poderia ter sido uma simples interface.
As aplicações ditas monolíticas (camada única) são altamente acopladas,
tornando até mesmo pequenas alterações complicadas e sujeitas a erros.
Consequentemente, as alterações podem se propagar por todo o sistema. Além disso,
os requisitos do usuário podem forçar a manutenção de versões distintas para a
mesma aplicação. Isso adiciona uma dimensão adicional de complexidade e muitas
vezes resultam em versões de uma mesma aplicação, mas dessincronizadas.
O padrão MVC oferece uma solução flexível para esses problemas,
dissociando os componentes Model, View e Controller de uma aplicação e
proporcionando uma interface uniforme entre eles.
Nesse sentido, Dudney (2004) elenca abaixo o que ele define como boas
práticas de programação:
• disponibilizar diferentes representações da mesma aplicação de dados;
• fornecer uma aparência diferente e uma interface com o usuário, sem
afetar o resto da aplicação;
• os eventos devem atualizar instantaneamente os dados da aplicação ou
outros componentes da interface do usuário, enquanto que as alterações aos dados de
17
aplicação devem ser refletidas imediatamente nos componentes de interface do
usuário;
• reuso de um ou mais componentes da interface do usuário de forma
independente dos dados da aplicação;
A estrutura do padrão MVC é descrita na Figura 4. O Cliente via
navegador, faz uma requisição ou envio de dados ao Controlador, que num primeiro
momento trata essas informações ao mesmo tempo em que solicita um
comportamento do Modelo e uma resposta da Visão. O Modelo por sua vez,
encapsula funcionalidades e objetos e incorpora os estados para finalmente enviar os
dados para a Visão, que prepara esses dados para retornar ao Cliente.
Figura 4. Padrão MVC (PRESSMAN, 2011).
Para Sommerville (2011), o padrão MVC é base do gerenciamento em
muitos sistemas baseados em Web e as noções de separação e independência são
fundamentais para o projeto de arquitetura. A Tabela 1 descreve o comportamento do
padrão MVC.
Nome
MVC (Modelo-Visão Controlador)
Descrição
Separa a apresentação e a interação dos dados do
sistema. O sistema é estruturado em três
componentes lógicos que interagem entre si. O
componente Modelo gerencia o sistema de dados
e as operações associadas a esses dados. O
componente Visão define e gerencia como os
18
dados
são
apresentados
ao
usuário.
O
componente Controlador gerencia à interação do
usuário (por exemplo, teclas, cliques do mouse,
etc.) e passa essas interações para a Visão e o
Modelo.
Quando é usado
É usado quando existem várias maneiras de se
visualizar e interagir com dados. Também
quando são futuros requisitos de interação e
apresentação de dados.
Vantagens
Permite que os dados sejam alterados de forma
independentemente de sua representação, e viceversa. Apoia a apresentação dos mesmos dados
de maneiras diferentes, com as alterações feitas
em uma representação aparecendo em todas elas.
Desvantagens
Quando o modelo de dados e as interações são
simples, pode envolver código adicional e
complexidade de código.
Tabela 1. O padrão modelo-visão-controlador (MVC) – (Adaptado de SOMMERVILLE, 2011).
1.5 – Java Servlet
A primeira tecnologia para a produção de aplicações web dinâmicas com
Java recebeu o nome de Java Servlet, lançada em 1997 pela Sun Microsystems.
Embora não seja usado diretamente pelos desenvolvedores em Java Web, os servlets
são as classes que estão na base de todos os aplicativos Java EE (JUNEAU, 2014).
Muitos desenvolvedores usam servlets com JSP e JSF, ambas as
tecnologias compilam páginas com servlets, em seus containers. Mesmo que os
servlets possam atender a qualquer tipo de solicitação, é mais comum responderem
às solicitações de HTTP.
Os servlets fornecem aos desenvolvedores a flexibilidade para projetar
aplicações usando programação no estilo request-response. Eles desempenham um
papel fundamental no desenvolvimento orientado à serviços e diferentes tipos de
aplicações web podem ser criados e cada um deles é voltado para proporcionar
diferentes funcionalidades (JUNEAU, 2014).
Servlets tem a capacidade de fornecer respostas HTTP e também processar
as regras de negócios dentro de um mesmo código.
19
1.6 - JavaServer Faces
No ano de 2004 a Sun Microsystems apresentou o seu novo framework Java
Web em um esforço de ajudar a simplificar o desenvolvimento de aplicações web.
Surgia então o JavaServer Faces (JSF), que seria uma evolução do JavaServer Pages
(JSP), acrescentando uma maneira mais organizada em relação ao ciclo de vida e um
melhor aproveitamento das modernas tecnologias web (SALEH, 2013).
JSF faz uso de arquivos XML para construir as views e de classes Java para
montar toda a lógica da aplicação e nesse contexto adere à arquitetura de projetos
MVC. Todas as chamadas são processadas por um servlet chamado FacesServlet
(JUNEAU, 2014).
O FacesServlet é o responsável pela construção da árvore de componentes,
pelo processamento de eventos, definindo os processos seguintes e retornando as
respostas das chamadas. JSF usa um arquivo de recursos chamado faces-config.xml
para especificar os detalhes da aplicação, tais como as regras de navegação dentre
outras configurações. Além disso, tecnologia JSF permite integração com outras
tecnologias como Ajax, por exemplo, permitindo assim desenvolver um conteúdo
mais dinâmico.
A arquitetura do JSF é baseada no padrão MVC2. Ao contrário do padrão
MVC1, o padrão MVC2 desacopla a view do controller a partir do model. A Figura 5
mostra bem a arquitetura JSF MVC2.
Figura 5. Arquitetura JSF(Padrão MVC2). (SALEH, LYKKE e WADIA, 2013).
20
Conforme visto em Faria (2015), ao executar uma página construída usando
componentes JSF, ela passará por um ciclo de vida de processamento bem definido,
constituído por 6 fases:
1 – Restaurar visão;
2 – Aplicar valores de requisição;
3 – Processar validações;
4 – Atualizar os valores do modelo;
5 – Invocar a aplicação;
6 – Renderizar a resposta.
Todas essas fases do ciclo de vida do JSF estão representadas na Figura 6,
abaixo.
Figura 6. Ciclo de vida JSF (extraído de FARIA, 2015)
No momento que é feito uma requisição, a primeira fase restaura a visão e a
hierarquia dos componentes que compõem a página solicitada. A seguir, numa
segunda etapa é feito a aplicação dos valores da requisição com a atualização de
informações obtidas na requisição. Depois, um terceiro momento essas mesmas
informações devem ser validadas, ou seja, convertidas em tipos específicos e
anexadas aos componentes. A partir de então a aplicação começa a efetuar a
atualização dos valores nos objetos do modelo de dados. Em seguida, a aplicação é
21
invocada e os eventos de formulário são executados. O processo final consiste na
renderização da resposta para que seja gerada a saída com todos os componentes nos
seus estados atuais e então é enviada uma resposta ao cliente (usuário).
1.7 – Mapeamento Objeto Relacional (ORM)
Mapeamento objeto relacional é uma técnica de programação para
conversão de dados entre banco de dados relacionais e linguagens de programação
orientada a objetos (FARIA, 2015). Está interligada com a JPA e com técnicas de
persistência, como visto no tópico anterior e também no próximo.
1.8 – JPA e Hibernate
A Java Persistence API (JPA) é um framework para persistência em Java,
que oferece uma API de mapeamento objeto-relacional e soluções para integrar
persistência com sistemas corporativos escaláveis (FARIA, 2015). Ainda segundo
FARIA, com o uso de JPA, os objetos passam a ser definidos como POJO (Plain Old
Java Objects), ou seja, classes que representam entidades do sistema utilizando de
anotações para persistir objetos.
Além dos recursos da JPA, a ferramenta Hibernate ORM possui alguns
módulos que complementam a persistência, além de possuir um conjunto de
interfaces para consultas usando critérios, a Critéria e uma linguagem de consulta
chamada HQL (Hibernate Query Language). Outra opção SQL é a JPQL (Java
Persistence Query Language), que é uma linguagem de consulta padrão da JPA e
permite escrever consultas portáveis, independente do banco de dados.
22
2. MATERIAS, TÉCNICAS E MÉTODOS
Para a construção do ambiente de desenvolvimento, foram utilizados os
seguintes softwares, plugins e bibliotecas:
• Eclipse Java EE IDE Mars.1 com plugin JBoss;
• Wildfly 9.0.2;
• JDK 8u71;
• Postgresql 9.3.0.1.
• PgAdmin 3-1.22.0
Para a idealização da aplicação foi levado em conta a Análise de Sistema e
Processos já efetuada pela equipe de desenvolvimento da SGPTI, que idealizou o
Controle Acadêmico, não sendo necessário começar por essa fase inicial. Entretanto
foram realizados esboços para o entendimento e simular o sistema proposto.
Um dos esboços criados foi o Diagrama de Atividades que simula um
CRUD da entidade central da aplicação, como é mostrado na Figura 7, a seguir.
Figura 7. Diagrama de atividades (CRUD Aluno).
23
2.1 - Apache Maven
Apache Maven é uma ferramenta de gerenciamento de configuração do
projeto de desenvolvimento de uma aplicação. Cada projeto Maven tem um arquivo
POM (Project Object Model), ou projeto de modelo de objeto, o pom.xml. O arquivo
POM inclui as dependências do projeto para compilar e construir o projeto em um
artefato (SALEH, 2013). Para tanto, o Maven recebe as dependências do arquivo
POM e depois efetua os downloads dessas dependências no disco local, caso não
sejam encontrados nele para depois disso, executar a compilação e a montagem das
fontes compiladas para um artefato. O artefato alvo desse trabalho é o arquivo WAR
para aplicação web Java EE. Uma das características mais fortes do Maven é a sua
estrutura rígida em suas aplicações, como mostrado na Figura 8.
Figura 8. Estrutura inicial do projeto acadêmico.
Como mostrado, a raiz do projeto contém duas subpastas principais (src e
target) e o arquivo (POM). O diretório src contém o código-fonte da aplicação e o
diretório target contém os artefatos gerados. O diretório src tem um número de
subdiretórios e cada um desses diretórios tem uma finalidade específica:
• src/main/java: contém o código-fonte Java da aplicação;
• src/main/resources: contém os recursos que a aplicação precisa, tais
como o pacote de recursos;
• src/test/java: reservado para os testes da aplicação;
24
• src/test/resources: reservado para os testes de recursos;
• src/main/webapp: inclui os arquivos do projeto de aplicação JEE Web;
• src/test: inclui os testes de unidade da aplicação;
2.2 Facelets Pages
Existem várias definições para o Facelets. Criado pela Sun Microsystems e
atualmente mantido pela Oracle, Facelets é um sistema de template web, subprojeto
do JSF e linguagem de descrição de páginas.
Na documentação do Facelets na Oracle estão elencadas as vantagens de
seu uso, os quais seguem abaixo:
• suporte para reuso de código através de templates e componentes;
• extensibilidade funcional dos componentes e customização de objetos
server-side;
• tempo de compilação rápido;
• validação da EL em tempo de compilação;
• renderização de alto desempenho.
Abaixo, na Tabela 2 há uma descrição das tags existentes no Facelets:
Tag
Descrição
ui:component
Define um componente modelo e especifica um nome de arquivo.
ui:composition
Define uma composição de página e encapsula marcações JSF.
ui:debug
Cria um componente de depuração, captura informações da árvore de
componentes.
ui:define
Define o conteúdo que é inserido em um template de página.
ui:decorate
decora partes de uma página.
ui:fragment
Define um fragmento de modelo, assim como o ui:component, desconsiderando
conteúdo exteriores a tag.
ui:include
Permite o encapsulamento de outra página XHTML e sua reutilização dentro de
uma view.
ui:insert
Insere conteúdo em um modelo.
ui:param
Passa parâmetros para um arquivo ou modelo.
ui:repeat
Iteração sobre uma coleção de dados.
ui:remove
Remove conteúdo de uma pagina.
Tabela 2 – Controle Facelets Page e Template Tags (adaptado de JUNEAU).
25
E, finalmente, a Figura 9 mostra um arquivo XHTML do projeto acadêmico
com as configurações do Facelets:
Figura 9. Arquivo listadeestados.xhtml do projeto acadêmico (exibido com Sublime Text 3).
Conforme se verifica na Figura 9, o Facelets consegue conciliar os diversos
componentes importados, e assim, incrementa o corpo do XHTML e o resultado final
é visto na Figura 10.
Figura 10. Tela gerada do arquivo listadeestados.jsf
26
2.3. Views
As views de uma aplicação JSF nada mais são do que a interface da
aplicação. Trata-se das telas (páginas) que compõem a parte visual do sistema. As
views são responsáveis pelo contato direto com o usuário, interagindo com ele,
recebendo comandos (eventos) e retornando respostas do sistema. Entretanto, para
que haja comunicação com o sistema as views são dependentes dos managed beans,
que são as classes que recebem os dados inseridos na interface da aplicação.
2.4. Managed Beans
O objetivo principal das classes Managed Beans é se comunicar com as
Views da aplicação. Após essa comunicação, precisam repassar as informações
coletadas para as classes entidades, dentro do que rege as regras de negócios e
aguardar uma definição do processo e retornar uma resposta para a interface.
2.5. Domain Model
O primeiro passo foi verificar as configurações iniciais da aplicação. O
segundo passo foi organizar o processo de comunicação com o usuário e coleta de
dados (views e managed beans). O passo seguinte é trabalhar as classes de domínio,
ou seja, o tratamento desses dados. Essa é fase de elaboração das regras de negócios,
fase de definir o comportamento das classes que serão entidades do sistema e aquelas
que funcionarão como auxiliares dentro da lógica proposta.
O Model pode ser subdividido em subsistemas, na maneira mais
conveniente para o desenvolvedor, separando entidades, regras de negócios, beans,
DAO’s, etc. As configurações necessárias para o mapeamento objeto/relacional
(persistência) será aplicado nas classes entidades através de anotações JPA.
27
2.6 – Persistência
Persistência pode ser entendida como transformar as classes, mais
especificamente, as entidades do sistema, em objetos a serem refletidos no banco de
dados. Ela é estruturada na JPA e faz uso de um arquivo chamado persistence.xml.
O arquivo persistence.xml é o ponto de partida de qualquer aplicação que
use a JPA. Nele ficarão configurações responsáveis por informar com qual banco de
dados a aplicação deve se conectar, configurações específicas da implementação,
entidades a serem utilizados, arquivos de configurações e outros (COELHO, 2015).
A pasta META-INF é o local onde deve estar o arquivo de persistência,
caso não seja gerada pela IDE, pode ser criada manualmente, como mostrada abaixo
na Figura 11.
Figura 11 – Arquivo persistence.xml e sua localização no projeto academico.
28
3. RESULTADOS
Os resultados obtidos com esse trabalho são uma primeira versão do
Controle Acadêmico HUJM e a correspondente documentação do código fonte. O
Controle Acadêmico HUJM é parte do ambiente de desenvolvimento de aplicações
Java da SGPTI e tem como objetivo gerir toda a rotina dos acadêmicos que
frequentam as dependências do Hospital Universitário Julio Muller, contendo dados
pessoais dos alunos bem como dados que atestam o seu vínculo com o Hospital.
A criação e construção da aplicação transcorreram em paralelo à criação e
construção do framework de desenvolvimento da SGPTI ao qual o Controle
Acadêmico fará parte. Essa primeira versão da aplicação não pode ser considerada
como uma versão pronta, pois a mesma teve como primeiro objetivo atender aos
requisitos da disciplina Estágio Supervisionado e para a conclusão do Curso
Bacharelado em Ciência da Computação da Universidade Federal de Mato Grosso.
Entretanto, a mesma deverá passar pelo crivo da equipe de desenvolvimento da
SGPTI e passar por ajustes, se necessário, para que possa ser incorporada ao seu
ambiente.
Ao inicio do trabalho, a primeira preocupação foi em procurar atender os
requisitos do projeto dentro dos meios disponíveis pelo framework JSF e ferramentas
auxiliares.
Nas subsessões seguintes será descrito os pormenores e detalhes da
construção da aplicação.
3.1 - Configuração dos arquivos web.xml e faces-config.xml
Inicialmente, existem dois arquivos de configuração, que são o web.xml e
faces-config.xml.
O arquivo web.xml é o descritor padrão da implementação do módulo web
em
que
o
Faces
Servlets
está
definido.
O
principal
objetivo
do
o Faces Servlets é interceptar os pedidos para as páginas JSF, a fim de preparar o
contexto JSF antes de acessar a página JSF solicitada. A Figura 12 mostra o arquivo
web.xml do Acadêmico HUJM.
29
Figura 12. Arquivo web.xml.
Agora, passamos para o arquivo faces-config, que inclui a configuração
relacionado especificamente ao JSF. Na verdade, uma vez que JSF 2.0, o
arquivo faces-config se torna opcional, pois a maioria da configuração JSF pode ser
definida usando as anotações Java.
A Figura 13 mostra o arquivo de configuração faces-config do acadêmico
HUJM. À esquerda a localização do arquivo no projeto e à direita o conteúdo interno
do arquivo, com suas configurações, como se vê na imagem.
Figura 13. Arquivo faces-config.xml
30
3.2. Estrutura da aplicação
A estrutura da aplicação procurou seguir o padrão MVC, subdividindo o
projeto em Modelo, Visão e Controladores. Como foi dito no decorrer desse trabalho,
não há um padrão rigoroso de como deve ser distribuído os pacotes de códigos,
ficando ao critério do desenvolvedor, implementar de acordo com sua interpretação
do problema. No nosso caso em particular, entendeu-se que a parte que se refere aos
controladores seria representada pelos arquivos de configurações JSF. Veremos na
próxima subseção mais detalhada quais são esses arquivos e suas particularidades.
A parte que se refere às visões seriam distribuídas em subpastas existentes
na pasta webapp do projeto. Também será detalhada mais a frente.
E por fim, a parte que se refere ao Modelo ficou alocada no pacote Model.
Esse pacote é subdividido em outros subpacotes, de acordo com suas atribuições e
comportamento. Vale salientar que outros pacotes se fizeram necessários para
auxiliar no desenvolvimento da aplicação. Na Figura 14 vemos uma relação dos
pacotes criados no projeto acadêmico.
31
Figura 14 – Relação dos pacotes do projeto acadêmico.
Toda essa parte que constitui o folder src/main/java, mostrado na Figura 14
acima, representa toda a lógica da aplicação que está entre a interface e o banco de
dados. Logo abaixo aparece o folder src/main/resources destinado a arquivos que
servirão de recursos para a aplicação. O arquivo persistence.xml se encontra nesse
folder. Em seguida vemos duas pastas de testes, src/test/java e src/test/resources.
Entre meio as pastas de sistemas ficam a Maven Dependencies
(dependências do Maven), a JRE System Library (as bibliotecas Java) e as
Referenced Libraries (bibliotecas referenciadas). As dependências Maven são as
importações efetuadas pelo arquivo pom.xml. Já as bibliotecas Java, nesse caso
podem ser entendidas pela versão do jdk, indispensável para o projeto. As bibliotecas
referenciadas são arquivos ocasionais, que dependendo da necessidade, podem ser
agregadas a aplicação.
Cada uma das subpastas da lógica da aplicação será vistas nos tópicos
seguintes. Assim como será visto também, as subpastas que compõem a visão da
32
aplicação, no folder src/main/webapp. Essa outra parte da estrutura pode ser visto
na Figura 15, a seguir.
Figura 15 – Relação das pastas de visões do projeto acadêmico.
3.3. O arquivo pom.xml
O arquivo pom.xml é o responsável por importar todas as dependências
externas necessárias ao projeto. No cabeçalho do arquivo ficam as configurações do
repositório do próprio arquivo, como, por exemplo, o namespace e o esquema.
Seguido das configurações do arquivo local, dentro do projeto. A partir daí começam
as declarações de dependências.
33
O primeiro lote de dependências, visto na Figura 16, são as dependências da
Apache: BeanUtil e Commons IO. A dependência BeanUtil traz funcionalidades que
podem ser úteis em tarefas com classes beans, na comunicação com a interface. A
Commons IO também auxilia na comunicação com a interface, em funcionalidades
de entradas e saídas, como implementações de stream e filtros, por exemplo.
Figura 16. As dependências da Apache.
O segundo lote de dependências são responsáveis pela persistência dos
dados. Trata-se das dependências do Hibernate. São elas: Hibernate Core,
Hibernate EntityManager e Hibernate Validator. O Hibernate Core é nada mais
que o núcleo do Hibernate. As funcionalidades centrais do Hibernate se encontra
nessa dependência. Já no Hibernate EntityManager estão as configurações da JPA,
na criação das entidades para fazer o mapeamento objeto-relacional. A função do
Hibernate Validator é fazer a validação dos dados que serão persistidos no banco de
dados. Todas essas dependências estão na Figura 17, abaixo.
34
Figura 17. As dependências do Hibernate.
Esse terceiro lote de dependências é o mais extenso de todos do projeto. São
quatro dependências Javax. Em Java temos os pacotes principais, que são o núcleo
da linguagem. Javax é um pacote de extensão. As quatro dependências Javax
importadas para o projeto são: Javax CDI, Javax Faces, Javax Inject, Javax Servlet
e Javax Validation. E as funcionalidades seguem abaixo, respectivamente:
• javax cdi: reúne recursos para tratar das injeções e dependências de
contexto;
• javax faces: trata-se do núcleo que compila o JSF;
• javax inject: trata das injeções do JSF;
• javax servlet: compõem o servlet da aplicação.
Na Figura 18, vemos todas as dependências Javax.
35
Figura 18. As dependências Javax.
O quarto lote, na verdade são várias dependências unitárias, com exceção
das dependências do PrettyFaces. Começamos pela dependência da OmniFaces. A
OmniFaces é uma biblioteca de utilitários para JSF. A dependência seguinte trata do
driver do banco de dados, no nosso caso, do PostgreSQL. O PrettyFaces é um
redirecionador de URL para JSF e as suas dependências tratam da configuração e da
reescrita necessária para o redirecionamento. E a outra dependência, a do
PrimeFaces, é responsável pela remodelagem visual dos componentes JSF. Todas
essas dependências estão distribuídas na Figura 19, a seguir.
36
Figura 19. As dependências OmniFaces, PostgreSQL, PrettyFaces e PrimeFaces
Finalizando, temos as dependências do framework Springs, que são três:
Context, Core e TX. O Spring auxilia no fornecimento de injeções de dependências e
controla o ciclo de vida do JSF. No Build fica o compilador do Maven e demais
plugins, caso necessários. A Figura 20 mostra essa parte do arquivo pom.xml.
37
Figura 20. As dependências Springs e o Build.
3.4. As classes Model e os pacotes auxiliares
O pacote Model é subdivido em subpacotes: Beans, DAO e Entities. O
pacote Beans armazena os managed beans, assim como o pacote DAO armazena as
classes DAO e por fim, o pacote Entities, as entidades do projeto.
Um exemplo de managed bean é visto no Apêndice 1. A classe AlunoBean
instancia a entidade Aluno e um AlunoDAO. A entidade Aluno está representada no
Apêndice 2 e herda alguns atributos na entidade Pessoa, cujo código, devido sua
extensão está distribuído nos Apêndices 3, 4, 5 e 6. A classe AlunoDAO, que pode
ser vista na Figura 21, tem uma particularidade: não possui, de momento, atributos e
métodos. Só estende da classe GenericDAO, que aí sim, possui todas as
funcionalidades de um DAO, utilizáveis por todas as classes DAO do projeto. O
GenericDAO é exposto no Apêndice 7.
38
Figura 21. AlunoDAO
Além do pacote Model, ficou definido outros pacotes auxiliares: Converters,
Exceptions, Filters, Repository, Service, Util e Validators.
• Converters: é um pacote reservado às classes que têm por função serem
conversores de entidades. Muitos dados coletados em componentes tais como o
combobox não é a entidade propriamente dita e sim o id dessa entidade.
• Exceptions: pacote reservado ao tratamento dos casos de exceções;
• Filters: pacote reservado às informações que necessitam ser passar por um
sistema de filtro;
• Repository: pacote que trata a camada de persistência do banco de dados;
• Service: pacote que desempenha várias funções (serviços) para a
aplicação;
• Util: pacote que contém classes de utilidades diversas à aplicação;
• Validators: pacote reservado à validação de informações;
3.5. Converters
Quando há a necessidade de converter um objeto para o tipo String ou o
contrário usa-se um componente do JSF chamado converter. Sua atuação fica entre a
view (página JSF) e o Managed Bean. Na Figura 22 pode se ver o pacote Converter e
as classes que o compõe e no Apêndice 8, a classe AlunoConverter.
39
Figura 22. Pacote Converter
3.6. Exceptions
Um sistema deve estar preparado para situações inesperadas em sua
execução e é para isso que servem as exceções (exceptions, em inglês). Classes
Exceptions procuram tratar esses problemas. Nesse projeto as duas classes com essas
funcionalidades, a CustomExceptionHandler e a CustomExceptionHandlerFactory
auxiliam na navegação. O pacote Exceptions aparece juntamente com o pacote
Filters na Figura 23.
3.7. Filters
Na medida em que o usuário navega pela aplicação, efetuando comandos e
transações, é necessário realizar operações importantes para o sistema, antes o fluxo
de navegação seja concluído, e nesse projeto, a classe ConexaoFilters desempenha
esse papel. Entretanto, há funções específicas nos outros filtros. Destacamos aqui a
classe AlunoFilter, como exemplo, que é fundamental para o projeto, apesar de sua
simplicidade aparente, como verifica-se no Apêndice 9.
40
Figura 23. Pacotes Exceptions e Filters
3.8. Repository
A função desse pacote é trabalhar em conjunto com o pacote Converter.
Suas classes servem de repositório até que o processo de conversão de tipos das
páginas JSF e os managed beans seja concluída. A Figura 24 mostra o pacote
Repository e o pacote Service e no Apêndice 10, encontra-se a classe
AlunoRepository.
41
Figura 24. Pacotes Repository e Service.
3.9. Service
Para trabalhar com regras de negócios, como geração de listas de consultas,
foram criadas as classes Service, A vantagem desse tipo de solução é evitar
sobrecarregar as classes DAO. O Apêndice 11 exibe os códigos fontes da classe
AlunoService e também de AlunoServiceImpl.
3.10. Util
Esse pacote abriga várias classes que trabalham individualmente em funções
específicas, como por exemplo, o HibernateUtil, que cria as fábricas de sessões que
acessam o banco de dados. Nesse pacote estão outras classes importantes para o
sistema, tais como a FacesContextUtil e PhaseListenerUtil, etc. O Apêndice 12
mostra a classe HibernateUtil e suas propriedades.
42
3.11. Validators
No pacote Validators há duas classes: CPFValidator e EmailValidator.
Ambas as classes possuem algoritmos característicos para efetuar a validação dos
dados recebidos da interface e comprovar sua veracidade. A Figura 25 mostra o
pacote Validators, juntamente com o pacote Util, visto no tópico anterior.
25. Pacote Util
3.12. Views
As páginas do projeto (views) representam a interface da aplicação. São elas
que interagem com o usuário, ou seja, é o primeiro estágio do tráfego dos dados pelo
sistema. As figuras seguintes: Figura 26, Figura 27, Figura 28 e Figura 29 mostram
algumas das telas geradas pelo sistema.
43
Figura 26. Tela cadastrodecurso.jsf
Na Figura 26 podemos ver uma tela de cadastro. Ela é composta por um
cabeçalho, cujos componentes são oriundos de um arquivo template, que replica para
todas as telas do sistema. No corpo dessa página encontra-se um formulário
destinado ao cadastro de cursos, cujos campos incluem: nome do curso, instituição
de ensino, turma, estágio/atividade, data de criação no sistema e a data da última
alteração efetuada. Além dos botões Salvar e Voltar.
Figura 27. Tela listadeturmas.jsf
A Figura 27 assim como a figura anterior, importa o cabeçalho do sistema.
O corpo da página reflete o resultado de uma consulta que exibe uma lista de turmas.
44
Nesse exemplo em específico a consulta retornou uma lista vazia, pois não há turma
cadastrada. A tela tem como opção exibir o nome da turma, seu código e o curso ao
qual pertence. Acima da tabela gerada há um botão Nova Turma, que redireciona
para a tela Cadastro de Turmas.
Figura 28. Tela cadastrodealunos.jsf
A Figura 28 mostra uma das principais telas do Controle Acadêmico. A tela
Cadastro de Alunos é a responsável pela inclusão do aluno dentro do sistema. Seu
corpo é composto por um formulário subdividido em três painéis, sendo eles: Dados
do Aluno, Dados de Contato e Dados do Estágio/Atividade. Descrevemos abaixo
cada um dos componentes desses painéis:
Dados do Aluno: código interno (id gerada pelo sistema), Registro GEP
(código fornecido pelo HUJM), Registro RGA (código fornecido pela instituição de
ensino), CPF, RG, nome do aluno, sexo, data de nascimento, naturalidade, estado de
origem, instituição de ensino, nível de escolaridade, curso e turma;
45
Dados de Contato: endereço do aluno (logradouro), bairro, CEP,
complemento, cidade, estado, telefone residencial, celulares, contato e email;
Dados do Estágio/Atividade: descrição, programa, data de início, data de
término, horários, benefícios (uso de estacionamento e/ou biblioteca) e local, com
data de início e data fim.
A página possui também botões Gravar e Fechar para quando o processo
de cadastro esteja terminado. Outros botões são: o Adicionar, para incluir mais locais
ao estágio/atividade, os botões auxiliares de calendário nas datas e o botão Foto, para
capturar uma foto do aluno.
Figura 29. Tela cadastrodealunos.jsf após clique no botão Foto
A Figura 29 mostra a mesma tela da Figura 28, com a exceção de exibir
também uma janela pop-up com a imagem de uma webcam. Isso deve-se a um clique
no botão Foto,
logo abaixo do cabeçalho. Esse é um recurso oferecido pela
showcase do PrimeFace e configurado nessa página. Após clicar no botão Capture,
da janela suspensa, a imagem da webcam é salva em um local no disco rígido e
apenas o endereço dessa imagem é armazenada.
46
4. DIFICULDADES ENCONTRADAS
4.1. Padrão de Projeto
No início do projeto ficou definido que a aplicação seria desenvolvida com
as características JSF utilizando repositórios maven. Entretanto, ao utilizar a IDE do
Eclipse nota-se a raiz do Projeto JSF é totalmente diferente de um Projeto Maven.
Ao decorrer do tempo percebeu-se que não há uma maneira única de
desenvolver uma aplicação JSF, pode-se também criar um projeto de página
dinâmica web. São várias maneiras de se chegar a um mesmo objetivo.
Ao final, buscou-se não se desviar do que fora proposto e a aplicação foi
desenvolvida em JSF aos padrões Maven.
Definido que o projeto seguiria os padrões do Maven, outra vez verificou-se
que a raiz do projeto gerado pela IDE do Eclipse difere do padrão mencionado na
documentação do Maven. Depois de analisadas as diferenças, optou-se por seguir
com o padrão gerado pelo Eclipse, tendo em vista que mudanças provocariam atrasos
desnecessários.
4.2. Facelets e Servlets
Configurar Facelets e Servlet exige dedicação e concentração. Muitos
recursos podem não funcionar se não tiverem nas configurações especificas. Desde a
versão do JDK, passando pelo Server, se houver algum conflito de versões, a
aplicação pode não responder.
4.3. JavaServer Faces + PrimeFaces
Muitos recursos existentes no JSF também são encontrados na showcase do
PrimeFaces. Uma página XHML pode conter componentes do JSF e também do
PrimeFaces. No inicio alguns problemas na compilação desses componentes
surgiram devido a essa variedade e foi preciso se familiarizar com o comportamento
de cada um dos componentes.
47
4.4. Managed Beans
A parte que se refere aos Managed Beans foi desafiadora devido ao seu
comportamento. Também não há um padrão, podendo atuar apenas como um
comunicador com as views, recebendo tão somente os eventos e repassando para
outras classes que se encarregariam das regras de negócios, como também eles
próprios tratar das regras de negócios e se comunicarem com as views e com as
classes DAO.
4.5. Classes DAO
No que se refere às classes DAO, o impasse se deveu também pela ausência
de um padrão. As maneiras de implementar as DAO são as mais variadas. Uma
alternativa seria cada entidade possuir a sua DAO com o seu CRUD específico.
Outra maneira seria criar um DAO genérico e estendê-lo para as demais classes. Tem
implementações que separam as consultas em classes distintas.
4.6. Persistência
A persistência das classes com o banco pode ser feita através de arquivos de
configuração, como o hibernate.cfg.xml ou através de anotações. Optou-se pelas
anotações devido a uma maior facilidade com o conceito. Porém o uso de anotações
exige atenção com a validação da JPA.
4.7. Views
A dificuldade quanto as views deveu-se à pouca familiaridade em relação a
recursos de designer de interfaces web, como por exemplo, o CSS. Na medida do
possível procurou-se implantar esses conceitos.
48
5. CONCLUSÕES
O presente trabalho baseou-se nos conceitos de Desenvolvimento Java
Web, utilizando a tecnologia JSF (JavaServer Faces). O objetivo do trabalho foi
desenvolver uma ferramenta de controle acadêmico para o Hospital Universitário
Júlio Müller. A aplicação foi idealizada em uma estrutura Maven, seguindo os
padrões MVC para a geração dos pacotes, das telas e para a configuração do
ambiente.
No decorrer do estágio, com estudo dos conceitos e o uso das ferramentas,
foi possível implementar uma primeira versão da aplicação. A preocupação inicial
era aplicar os recursos do JSF, mas com o passar do tempo, novas atividades
surgiram, exigindo uma pluralidade de tecnologias envolvidas no sistema. Conceitos
como persistência de dados, mapeamento objeto-relacional, tratamento de eventos,
conversões, dentre outros tiveram que ser implantados no projeto.
Posteriormente novas funcionalidades podem ser integradas a aplicação,
tornando-a mais robusta, como por exemplo, gerenciamento de relatórios, controle de
usuários. Quando o Controle Acadêmico for incorporado ao ambiente de
desenvolvimento da SGPTI, e passar a ter acesso a todas as funcionalidades do
framework recém-implantado, alterações e adaptações serão necessárias, mas essas
mudanças não afetarão a estrutura do projeto, podendo perfeitamente ser
reaproveitado o código fonte.
49
6. REFERÊNCIAS BIBLIOGRÁFICAS
COELHO, Hebert; 2015. JPA Eficaz As melhores práticas de persistência de dados.
1a ed. São Paulo. Casa do Código.
DUDNEY, Bill; LEHR, Jonathan; WILLIS, Bill; MATTINGLY, LeRoy; 2004.
Mastering JavaServer Faces. 1a ed. Indianápolis, Indiana. Wiley Publishing.
FARIA, Thiago; 2015. Java EE 7 com JSF, PrimeFaces e CDI. 2a ed. São Paulo.
AlgaWorks.
FARIA, Thiago; MOREIRA JR, Normandes; 2015. JPA e Hibernate. 1a ed. São
Paulo. AlgaWorks.
JACOBI, Jonas; FALLOWS, John; 2006. Pro JSF and Ajax Building Rich Internet
Components. 1a. ed. Nova Iorque. Apress.
JUNEAU, Josh; 2014. JavaServer Faces Introduction by Example. 1a. ed. Nova
Iorque. Apress.
KEITH, Mike; SCHINCARIOL, Merrick; 2009. Pro JPA 2 Mastering the Java
Persistence API. 1a. ed. Nova Iorque. Apress.
PRESSMAN, Roger S.; 2011. Engenharia de Software Uma Abordagem
Profissional. 7a ed. Porto Alegre. AMGH.
SALEH, Hazem; CHRISTENSEN, Allan Lykke; WADIA, Zubin; 2013. Pro JSF
and HTML5 Building Rich Internet Components. 2a. ed. Nova Iorque. Apress.
SOMMERVILLE, Ian; 2011. Engenharia de Software. 9a ed. São Paulo. Pearson.
TONG, Kent Iok; 2009. Beginning JSF 2 APIs and JBoss Seam. 1a ed. Nova Iorque.
Apress.
50
7. APÊNDICES
APÊNDICE 1. Classe AlunoBean
51
APÊNDICE 2. Entidade Aluno
52
APÊNDICE 3. Entidade Pessoa (parte 1)
53
APÊNDICE 4. Entidade Pessoa (parte 2)
54
APÊNDICE 5. Entidade Pessoa (parte 3)
55
APÊNDICE 6. Entidade Pessoa (parte final)
56
APÊNDICE 7. GenericDAO
57
APÊNDICE 8. Classe AlunoConverter
58
APÊNDICE 9. Classe AlunoFilter
59
APÊNDICE 10. Classe AlunoRepository
60
APÊNDICE 11. As classes AlunoService e AlunoServiceImpl
61
APÊNDICE 12. HibernateUtil
62

Documentos relacionados

2010 - The Developers Conference

2010 - The Developers Conference ₪ Mais de 100 componentes. ₪ 03.03.03 Final desde Abril de 2010 (JSF 1 + JSF 2 parcial). ₪ 04M3 desde Outubro de 2010, 04M4 para Novembro. ₪ Mais informações: LGPL 2.1, Maven, aplicações demo, GAE....

Leia mais

Curso JSF + Hibernate www.T2Ti.com

Curso JSF + Hibernate www.T2Ti.com Curso JSF + Hibernate 9.1.1 Netbeans 9.2 Adicionando bibliotecas do JSF (MyFaces),Trindad, Tomahawk e terceiros 9.3 Configuração Hibernate XML 9.4 Configuração JSF (web.xml, faces-config.xml e tri...

Leia mais