Implementaçao de Projetos Web Utilizando o Seam Framework

Propaganda
UNIVERSIDADE NORTE DO PARANÁ
SISTEMA DE ENSINO PRESENCIAL CONECTADO
ESPECIALIZAÇÃO EM DESENVOLVIMENTO DE APLICAÇÕES WEB
BASEADAS NA TECNOLOGIA JAVA
RICARDO RODRIGUES BARCELAR
IMPLEMENTAÇÃO DE PROJETOS WEB UTILIZANDO O SEAM FRAMEWORK
Cuiabá/MT
2013
RICARDO RODRIGUES BARCELAR
IMPLEMENTAÇÃO DE PROJETOS WEB UTILIZANDO O SEAM FRAMEWORK
Trabalho de Conclusão de Curso apresentado ao
curso de especialização em Desenvolvimento de
Aplicações Web Baseadas na Tecnologia Java da
Universidade Norte do Paraná, como requisito
parcial para obtenção do Título de Especialista.
Tutor Orientador: Higor Vinicius Navarro Fabricio
Cuiabá/MT
2013
RESUMO
Este trabalho faz uma abordagem teorico-prática sobre o Seam Framework com
foco no desenvolvimento de projetos web. O desenvolvimento web com Java EE
com seus inúmeros componentes exige um grande conhecimento acerca de sua
estrutura. A despeito de constituir uma plataforma seus componentes não são
coesos necessitando de muito trabalho de programação na camada de negócio. O
Seam surge neste cenário como uma solução ágil de coesão e traz em seu
framework um conjunto de ferramentas para simplificar o desenvolvimento. Diante
disso, objetiva-se neste trabalho realizar um estudo do JBoss Seam e constatar a
viabilidade de seu uso em projetos web. Para tanto, um estudo de caso acerca da
construção de uma aplicação web para uma associação de classe foi construído,
com vistas a comprovar sua viabilidade e compreender o uso de seus componentes.
Para subsidiar esta pesquisa diversas referências oficiais foram consultadas, bem
como autores com literaturas consagradas por sua qualidade e acertividade sobre o
tema. Por fim, após a revisão teórica e a implementação foi possível discutir o
emprego e a viabilidade acerca do uso do framework, chegando a uma conclusão
positiva sobre o emprego do JBoss Seam.
ABSTRACT
This paper makes a theoretical and practical approach about Seam Framework
focusing on the development of web projects. The web development with Java EE
with its numerous components requires a great knowledge of their structure. Despite
provide a platform their components are not very cohesive needing programming
work in the business layer. Seam arises in this scenario as an agile solution cohesion
and bring in your framework a set of tools to simplify development. Therefore, the
objective of this research was to conduct a study from JBoss Seam and to prove the
feasibility of its use in web projects. Therefore, a case study about building a web
application for an association class was built, in order to confirm your viability and
understand the use of their components. To support this research various official
references were consulted, as well as literature devoted to authors for their quality
and assertiveness about the topic. Finally, after reviewing theoretical and
implementation was possible to discuss the use and the feasibility about the use of
the framework, reaching a positive conclusion about use of JBoss Seam.
SUMÁRIO
1 INTRODUÇÃO ......................................................................................................... 7
1.1 Justificativa ...................................................................................................... 8
1.2 Objetivo Geral................................................................................................... 9
1.3 Objetivos Específicos ...................................................................................... 9
2 PLATAFORMA JAVA ENTERPRISE EDITION – JAVA EE ................................. 10
2.1 Arquitetura Java EE ....................................................................................... 11
2.2 Componentes e Conteineres ........................................................................ 12
2.3 APIs da plataforma......................................................................................... 14
2.4 Tecnologias Requeridas pela Plataforma Java EE ..................................... 16
2.4.1 ENTERPRISE JAVABEANS (EJB) ........................................................... 16
2.4.2 JAVA SERVLET ........................................................................................ 17
2.4.3 JAVASERVER FACES - JSF .................................................................... 17
2.4.4 JAVASERVER PAGES - JSP.................................................................... 22
2.4.5 JAVASERVER PAGES STANDARD TAG LIBRARY - JSTL .................... 22
2.4.6 JAVA PERSISTENCE - JPA ..................................................................... 22
2.4.7 JAVA TRANSACTION - JTA ..................................................................... 23
2.4.8 JAVA API FOR RESTFUL WEB SERVICES - REST................................ 24
2.4.9 MANAGED BEANS ................................................................................... 24
2.4.10 CONTEXTS AND DEPENDENCY INJECTION FOR THE JAVA EE
PLATFORM (JSR 299) - CDI ............................................................................. 24
2.4.11 BEAN VALIDATION ................................................................................ 25
2.4.12 JAVA MESSAGE SERVICE - JMS.......................................................... 25
2.4.13 JAVA EE CONNECTOR ARCHITECTURE - JCA .................................. 25
2.4.14 JAVAMAIL ............................................................................................... 25
2.4.15 JAVA AUTHORIZATION CONTRACT FOR CONTAINERS - JACC ...... 26
2.4.16 JAVA AUTHENTICATION SERVICE PROVIDER INTERFACE FOR
CONTAINERS - JASPIC .................................................................................... 26
2.5 Serviços Padrão do Java EE ......................................................................... 26
3 SEAM FRAMEWORK ............................................................................................ 28
3.1 Integração entre o JBoss Seam e o Java EE............................................... 28
3.2 Modelo de Componentes .............................................................................. 29
3.3 Bijeção ............................................................................................................ 30
3.4 Contexto de Componentes ........................................................................... 31
3.5 Eventos Seam................................................................................................. 32
3.6 Seam Data Validation..................................................................................... 33
3.7 Página de Navegação .................................................................................... 35
3.7.1 ELEMENTOS DE NAVEGAÇÃO............................................................... 35
3.8 Biblioteca de Tags do JBoss Seam.............................................................. 37
3.8.1 TAGS DE NAVEGAÇÃO ........................................................................... 37
3.8.2 TAGS DE SELEÇÃO ................................................................................. 38
3.8.3 TAGS DE FORMATAÇÃO ........................................................................ 39
3.9 RichFaces ....................................................................................................... 40
3.9.1 BIBLIOTECA DE TAGS DOS COMPONENTES RICHFACES ................. 40
3.9.2 TEMAS RICHFACES ................................................................................ 42
4 METODOLOGIA..................................................................................................... 44
4.1 Cenário ............................................................................................................ 44
4.2 Descrição da Proposta .................................................................................. 44
5 ESTUDO DE CASO: PROJETO JBOSS SEAM ................................................... 46
5.1 Ferramentas (Tecnologia) ............................................................................. 46
5.1.1 SERVIDOR DE APLICAÇÃO JBOSS AS.................................................. 46
5.1.2 SEAM FRAMEWORK................................................................................ 47
5.1.3 SISTEMA GERENCIADOR DE BANCO DE DADOS POSTGRESQL...... 48
5.1.4 ECLIPSE IDE ............................................................................................ 48
5.1.5 IREPORTS E JASPERREPORTS ............................................................ 49
5.2 Levantamento de Requisitos ........................................................................ 50
5.3 Modelagem do Sistema ................................................................................. 51
5.3.1 DIAGRAMA DE CASO DE USO ............................................................... 51
5.3.2 DIAGRAMA DE CLASSE .......................................................................... 51
5.4 Implementação ............................................................................................... 52
5.5 Avaliação e discussão ................................................................................... 60
6 CONCLUSÃO......................................................................................................... 61
7 REFERÊNCIAS BIBLIOGRÁFICAS ...................................................................... 63
7
1 INTRODUÇÃO
Contemporaneamente os sistemas computacionais são requisitos de sucesso
para as empresas, corporações, órgãos públicos, etc, sejam empreendimentos de
pequeno ou grande porte. Em situações cujos processos são complexos torna-se,
então, imperativo a utilização de uma aplicação que envolva o armazenamento e
processamento dos dados.
Ocorre que ao longo dos anos o modelo de desenvolvimento destes sistemas
mudou caminhando na direção da descentralização. Os primeiros sistemas, que ora
tinham seu processamento e armazenamento centralizado em um grande
computador saiu de um modelo monolítico, evoluiu para um modelo cliente-servidor
e chega aos dias atuais com uma proposta de modelo multicamadas com acessos
diversificados através da internet por meio de navegadores web e dispositivos
móveis.
É neste cenário que o desenvolvimento web se desponta como uma solução
atrativa permitindo, inclusive, o acesso descentralizado das informações
corporativas.
O desenvolvimento web normalmente está associado a programação e
marcação, configuração e trabalho realizado na retaguarda dos sítios, mas também
pode ser usado para se referir ao projeto visual das páginas e ao desenvolvimento
de um comércio eletrônico.
Em virtude deste cenário surgiram muitas ferramentas com o intuito de
facilitar a tarefa do programador em criar desde simples sites de internet até
verdadeiras soluções de gerenciamento com considerável volume de dados.
Considerando a plataforma Java, o desenvolviento de aplicações neste
cenário tornou-se viável com o nascimento da tecnologia J2EE (Java2 Platform
Enterprise Edition) na qual é possível projetar, desenvolver, empacotar e implantar
aplicações empresariais baseadas em compontentes. Desde então, soluções foram
desenvolvidas visando atender o desenvolvimento distribuído.
O JBoss Seam foi um dos frameworks criado a partir da especificação do
J2EE. Esta solução também é conhecida como Seam Framework, foco deste
trabalho. De acordo FARLEY (2008), o JBoss Seam é um framework que tem como
objetivo otimizar o desenvolvimento de aplicações Java Enterprise Edition (JEE).
Desde seu lançamento observa-se uma grande evolução. Atualmente sua versão
estável é a 2.3.0.Final - considerando sua proposta original. Graças a sua
estabilidade e a forma integradora pela qual foi projetado tem sido massiva sua
adoção em novos projetos e migração de sistemas legados.
Partindo desta breve contextualização, este trabalho se propõe a realizar um
estudo a partir de uma abordagem teórico-prática acerca do Seam Framework. Além
de tratar dos aspectos relativos a plataforma Java Enterprise Edition, que é o cerne
do framework, serão abordadas outras soluções com a qual o Seam interage. Com o
intuito de demonstrar sua aplicabilidade e deixar claro suas interações, neste
trabalho será apresentado um sistema desenvolvido utilizando a versão mais
recente deste framework.
Para tanto, além desta introdução e de uma breve justificativa da realização
do trabalho, serão abordados em capítulos pontos que são importantes para a
8
perfeita compreensão do Seam Framework, a saber: Um breve estudo sobre a
plataforma plataforma Java Enterprise Edition, um capítulo dedicado ao estudo do
JBoss Seam e, por fim, um estudo de caso com o JBoss Seam, onde será
apresentado um Sistema desenvolvido com a última versão desta ferramenta
rodando em um conteiner web.
1.1 Justificativa
Nas últimas cinco décadas o desenvolvimento de software sofreu inúmeras
mudanças, desde a manutenção do código público ao código proprietário, escrita de
códigos básicos até a utilização de poderosas plataformas de desenvolvimento.
Com a evolução dessas plataformas de desenvolvimento os programadores
passaram a ter disponível um arcabouço muito vasto de ferramentas para a
construção de suas aplicações. Dentre elas, é possível citar desde plataformas
completas para desenvolvimento e execução de sistemas e aplicações como o .NET
Framework da Microsoft a soluções mais simplistas como o PHP.
A plataforma Java, muito utilizada no desenvolvimento de software pela sua
flexibilidade, segurança e versatilidade, por si só já dispõe de uma gama de
soluções para desenvolviemento de programas – desktop, soluções distribuídas e
sistemas embarcados que de igual forma é bastante atrativa.
Com tantas possibilidades, o profissional deve optar por aquela ferramenta
que, de acordo com os requisitos do sistema, disponibilidade de recursos e outras
variáveis que devem ser analisadas, melhor lhe aprouver para o caso. Esta decisão
pode tornar-se em um grande problema, visto que deve ser considerado muitos
aspectos: desde o financeito até a questão de qualificação do corpo técnico.
Diante dessa conjuntura este trabalho apresenta o JBoss Seam, como uma
solução baseada na plataforma Java Enterprise Edition que tem sido amplamente
divulgada e utilizada nos mais diferentes cenários. Dentre eles o Governo de Mato
Grosso através da Secretária de Segurança Pública e da Polícia Judiciária Civil, o
Governo de São Paulo e o Governo do Ceará no segmento governamental, a Caixa
Econômica Federal no segmento bancário, sem dizer das inúmeras fábricas de
software privadas que comercializam seus produtos construidos a partir deste
framework. Basta uma breve pesquisa na Internet para encontrar centenas de
soluções web contruidas com JBoss Seam, cuja identificação primária pode ser feita
pela extensão das URL’s terminadas em “.seam.”
Abordar este tema, que apesar de não ser inédito nem novo, proverá
conhecimentos práticos sobre a aplicabilidade do Seam Framework no
desenvolvimento de soluções web, visto que hoje o mercado tende para que as
aplicações sejam acessadas de qualquer lugar e por qualquer tipo de dispositivo
senão o computador pessoal ou notebook. Para isso, uma abordagem teórica é
imprescindível para localizar teoricamente o tema e apresentar as tecnologias
envolvidas. Além do quê, é a teoria que fornece o embasamento necessário para
compreender o funcionamento de cada parte da proposta prática. Esta vem com o
cunho de demonstrar como os componentes se relacionam, podem e devem ser
utilizados, visto que o Seam Framework agrega outro frameworks bastante comuns
9
no mercado que com ele podem ser melhor trabalhados permitindo um enfoque
maior no negócio do que na programação de mais baixo nível.
Conhecer o Seam Framework na teoria e na prática, permite ao analista de
tecnologia da informação ou ao programador decidir se esta é a ferramenta
adequada para seu problema ou mesmo tomá-lo como solução para
desenvolvimento de suas aplicações.
No âmbito acadêmico, o estudo do JBoss Seam permitirá uma revisão dos
conceitos da programação para web com vistas ao uso de frameworks, preocupação
voltada para ao negócio com o devido respeito ao padrões de projetos, bem como
um aprofundamento no conhecimento das técnicas de programação.
1.2 Objetivo Geral
Apresentar o Seam Framework como solução para o desenvolvimento de
projetos para web.
Verificar a viabilidade de seu uso no desenvolvimento de projetos web.
1.3 Objetivos Específicos
- Realizar uma revisão teórica sobre a plataforma de desenvolvimento web
Java.
- Apresentar os frameworks e componentes que se relacionam com o Seam
Framework.
- Implementar uma aplicação utilizando o Seam Framework a título de estudo
de caso.
10
2 PLATAFORMA JAVA ENTERPRISE EDITION – JAVA EE
Java é uma linguagem de programação, criada pela Sun Microsystems Inc,
voltada para o desenvolvimento de aplicações que funcionem sobre uma máquina
virtual e não seja dependente do tipo de sistema operacional, seja Windows, Linux,
Unix, Solaris ou Mac, assim como em dispositivos móveis como telefones celulares,
PDA’s e mainframes. Devido a essa versatilidade, a linguagem Java conta com três
conhecidos ambientes de desenvolvimento:
- Java SE (Java Standard Edition), que é a plataforma utilizada em Servidores
e PC’s;
- Java EE (Java Enterprise Edition) voltado para redes, internet e intranets –
que será nosso alvo de estudo neste capítulo; e
- Java ME (Java Micro Edition) que é plataforma de aplicações para
dispositivos móveis como PDA’s e celulares.
O Java EE é a plataforma Java voltada para redes, internet, intranets e
semelhantes. Sendo assim, PRADO(2013) explica que ela contém bibliotecas
especialmente desenvolvidas para o acesso a servidores, a sistemas de e-mail, a
banco de dados, entre outras características. Graças a essas características o Java
EE foi desenvolvido para suportar uma grande quantidade de usuários simultâneos.
Historicamente, o Java EE surgiu da necessidade de criar aplicações
multicamadas. Nos anos 90, o SQL se firmou como linguagem padrão para acesso a
bancos de dados relacionais permitindo que os sistemas pudessem ser divididos em
três camadas: cliente, servidor e banco de dados. Simultaneamente, o paradigma da
programação estruturada evoluiu para a programação orientada a objetos. Com isso,
a camada de dados se tornou mais independente da camada que trata da aplicação
em si. Como uma evolução natural, era necessário que o desenvolvimento se
dividisse ainda mais, de modo a desmembrar as camadas em componentes
especializados.
Da tendência corrente no final da década de 90 que resultava no
desenvolvimento de programas corporativos que fornecessem estruturas
multicamadas destinadas a distribuição de aplicativos seguros, flexíveis e
disponíveis, a Sun lançou o Java 2 Platform, Enterprise Edition ou J2EE, como era
conhecida inicialmente, até ter seu nome trocado para Java EE na versão 5.0.
Posteriormente, foi chamada de Java EE 5. A versão atual é chamada de Java EE 7.
A partir do Java EE, a Sun possibilitou o desenvolvimento de aplicações Java
com várias camadas, separando camadas de apresentação, negócio e dados. A
tecnologia passou a dar suporte a recursos de conexão de banco de dados
compartilhado, componentes para publicação de dados dinânicos na WEB (JSP,
Servlet), componentes de negócio e persistência (EJB), entre outros.
Na figura a seguir é possível acompanhar toda a evolução do Java EE até
sua versão atual:
11
Figura 1 - Evolução do Java EE
Fonte: http://marseille.labo-java.net/2013/02/18/a-la-decouverte-de-java-ee-7/
2.1 Arquitetura Java EE
Segundo Gupta(2012), na arquitetura Java EE os diferentes componentes
trabalham juntos para fornecer um sistema integrado como mostrado na figura
abaixo:
Figura 2 - Arquitetura Java EE 6
Fonte: Gupta(2012)
Ainda que a versão Java EE 7 já tenha sido lançada e seja a versão corrente
da plataforma, neste trabalho será abordada a versão Java EE 6, haja vista ser o
padrão ainda mais comumente utilizado pela grande maioria dos desenvolvedores e
ser a plataforma utilizada no estudo de caso.
Como se vê na figura 2, cada componente tem uma função especifica, a
saber:
- Os componentes JPA(Java Persistence API), JTA(Java Transaction API) e
JMS(Java Message Service) são responsáveis por fornecer os serviços básicos
como banco de dados acesso, transações e mensagens.
12
- Managed Beans e o EJB (Enterprise Java Beans) proporcionam uma
programação simplificada da camada de modelo usando POJO’s.
- CDI(Contexts and Dependency Injection), interceptors e Common
Annotations fornecem conceitos que são aplicáveis a uma ampla variedade de
componentes, tais como injeção de dependência, interceptors e um conjunto de
common Annotations.
- CDI Extensions permitem estender a plataforma além suas capacidades
existentes de uma forma padrão.
- Web Services usando JAX-RS e JAX-WS, JSF (JavaServer Faces),
JSP(Java Server Pages) e EL(Expression Language) definem o modelo de
programação para serviços web. Permite o registro automático de serviços web de
terceiros de uma forma muito natural.
- Bean Validation provê um padrão na declaração de restrições e validação
através de diferentes tecnologias.
Uma das grandes características do Java EE 6 é o uso constante das
anotações com o intuito de eliminar os arquivos XML com o intuito de aumentar a
produtividade.
2.2 Componentes e Conteineres
Segundo OLIVEIRA(2013), o foco da plataforma é simplificar o
desenvolvimento de soluções no âmbito corporativo através de padrões, serviços e,
principalmente, componentes modulares. Estes componentes, unidades de software
em nível de aplicação com suporte a um conteiner, são configuráveis durante o
desenvolvimento e incorporam um modelo de programação de acordo com o
"contrato de componente" com seu conteiner. Isto é, um conteiner, oferece serviços
de gerenciamento de ciclo de vida, segurança, distribuição e runtime para seus
componentes.
É justamente neste ponto que o Java EE difere-se da Plataforma Java
Standard Edition (Java SE), pela adição de bibliotecas que fornecem funcionalidade
para implementar software Java distribuído, tolerante a falhas e multicamada,
baseada amplamente em componentes modulares executando em um servidor de
aplicações.
Normalmente, as aplicações de vários níveis são difíceis de escrever, porque
envolvem muitas linhas de código para lidar com transações e gerenciamento de
estado, multithreading, pool de recursos, e outros detalhes complexos de baixo
nível.
A arquitetura baseada em componentes é independente de plataforma e torna
as aplicações Java EE faceis de escrever, visto que a lógica de negócio está
organizada em componentes reutilizáveis.
Um componente é uma unidade de software funcional independente que é
montado em um aplicativo Java EE com suas classes e arquivos relacionados e que
se comunica com outros componentes. A especificação define os seguintes
componentes Java EE:
13
- Aplicativos clientes e applets: componentes que são executados no cliente.
- Java Servlet, JavaServer Faces e JavaServer Pages (JSP): componentes
web que rodam no servidor.
- EJB(Enterprise JavaBeans) ou Enterprise Beans são componentes de
negócios que são executados no servidor.
A figura 3 ilustra bem a interação desses componentes dividindo-os em
camadas:
Figura 3 - Interação entre os componentes Java EE
Fonte: http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabj
Os componentes Java EE são escritos na linguagem de programação Java e
são compiladas da mesma forma como qualquer programa na linguagem. As
diferenças entre os componentes do Java EE e classes Java "padrão" é que os
componentes são montados em uma aplicação Java EE, eles são verificados para
serem bem formados e se estiverem em conformidade com a especificação Java EE
são implantados em produção, onde são executados e gerenciados pelo servidor
Java EE. (Conteiner) (ORACLE, 2013)
O servidor Java EE ou conteiner é uma interface entre um componente e a
plataforma de baixo nível com a funcionalidade que suporta o componente. Antes de
ser executado, um Enterprise Bean, ou qualquer componente do aplicativo deve ser
montado e implantado em um conteiner(deploy).
Existem vários tipos de conteiners:
- Conteiner Web: responsável pela hospedagem de páginas JSP e JSF,
servlets e javaBeans.
- Conteiner EJB: responsável por gerenciar a execução dos Enterprise
JavaBeans.
14
- Servidor Java EE: fornece conteiner Web e EJB
A figura abaixo ilustra a relação entre os conteiners Java EE.
Figure 4 - Relação entre Conteiner Java EE
Fonte: http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabj
Um conteiner também gerencia serviços não configuráveis, como o Enterprise
Bean, ciclos de vida do servlet, conexão de banco de dados, pooling de recursos,
persistência de dados, etc.
2.3 APIs da plataforma
Uma das características do Java EE é que a especificação fornece uma uma
grande quantidade de API’s. Esta também é uma das principais críticas, visto que a
maioria delas é de pequeno alcance para aplicações Java web. Uma aplicação
pequena ou média não utiliza a pilha completa Java EE. (RAHMAM, 2009).
Nesta versão (Java EE 6) apesar de existir 28 especificações, existe o profile
(perfil), na qual é possível configurar os recursos que serão utilizados na aplicação e
deixando a mesma mais leve.
As figuras abaixo informam as API’s disponíveis em cada perfil:
Figura 5 – API’s no Conteiner da Aplicação Cliente
Fonte: http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabj
15
!
Figura 6 - API's no Container EJB
Fonte: http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabj
Figura 7 – API’s no Conteiner Web
Fonte: http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabj
16
2.4 Tecnologias Requeridas pela Plataforma Java EE
De acordo com a especificação do Java EE contida no site da Oracle, a
plataforma oferece ao desenvolvedor algumas facilidades, que na realidade são
tecnologias requeridas pela plataforma que constituem um conjunto de API’s usadas
em aplicações Java EE.
2.4.1 ENTERPRISE JAVABEANS (EJB)
EJB ou Enterprise JavaBeans é um dos principais componentes da
plataforma. É um componente do tipo servidor que executa no conteiner do servidor
de aplicação. Os principais objetivos da tecnologia EJB são fornecer um rápido e
simplificado desenvolvimento de aplicações Java baseado em componentes
distribuídos, transacionais, seguros e portáveis.
O componente EJB possui 3 (três) tipos fundamentais:
- Entity beans;
- Session Beans; e
- Message Driven Beans;
Os Entity Beans representam objetos que vão persistir numa base de dados
ou outra unidade de armazenamento. Também controlam a persistência de dados,
definindo o padrão para:
- Criação de metadados, mapeamento de entidades para tabelas do modelo
relacional;
- API EntityManager, API para realização de CRUD (create, retrieve, update e
delete);
- Java Persistence Query Language (JPQL), linguagem semelhante ao SQL
ANSI para pesquisa de dados persistidos;
Os Entity Beans não necessitam de um conteiner EJB para serem
executados.
Os Session Beans executam algumas tarefas para o cliente e podem manter
o estado durante uma sessão com o cliente. Os Session Beans que mantém o
estado são do tipo Statefull, ao passo que os que não possuem esta capacidade são
do tipo Stateless.
Os Message Driven Beans processam mensagens de modo assíncrono entre
os EJB’s cuja API de mensagens é Java Message Service (JMS). Necessitam de um
EJB conteiner para serem executados.
A partir da versão 3.1 o uso do Enterprise Java Beans simplificou o
desenvolvimento. O uso de anotações (XML opcional) e POJOs/POJIs são as
características marcantes. É possível criar interfaces opcionais, ou seja, somente as
cria se realmente for necessáio. O fragmento de código abaixo mostra um exemplo
de session local.
17
@Stateless
public class PessoaDao(){
public void salvar(Pessoa pessoa){
//...
}
}
Em versões anteriores, os EJB’s só poderia existir em deployments no
formato EAR. Agora é possível empacotá-los no formato WAR. No EJB 3.1 também
há o suporte a serviços assíncronos com o uso da anotação @Asynchronous.
(SANTANA, 2013).
2.4.2 JAVA SERVLET
Tecnologia Java Servlet permite definir classes de servlet HTTP específicos.
A classe Servlet estende as capacidades dos servidores que hospedam aplicativos
acessados por meio de um modelo de programação de solicitação-resposta. Apesar
de servlets poderem responder a qualquer tipo de pedido, eles são comumente
usados para estender os aplicativos hospedados por servidores web.
Na plataforma Java EE 6, os recursos da tecnologia Java Servlet incluem o
seguinte:
- Suporte a anotações;
- Suporte nativo às chamadas assíncronas;
- Facilidade de configuração;
- Melhorias para API’s existentes.
No fragmento de código abaixo podemos observar o uso de anotações na
criação do Servlet, sem necessidade de alterações no arquivo web.xml:
@WebServlet(name=”Pedido”, urlPatterns={“/Pedido”})
public class Pedido extends HttpServlet {
//...
}
2.4.3 JAVASERVER FACES - JSF
JavaServer Faces é um framework de interface de usuário para a construção
de aplicações web utilizando componentes. Conecta esses componentes a objetos
de negócio e automatiza o processo no uso de JavaBeans e navegação de páginas.
O JavaServer Faces ganhou expressão na versão 1.1 evidenciando
maturidade e segurança. Atualmente, é considerado pela comunidade Java como a
última palavra em termos de desenvolvimento de aplicações Web utilizando Java,
resultado da experiência e maturidade adquiridas com o JSP/Servlet (Model1),
Model2 (MVC).
18
O JSF é fortemente baseado nos padrões MVC(Model - View - Controler) e
Front Controller.
Conforme material instrucional da empresa de treinamentos K19, o MVC
confere ao JSF a característica de isolar a lógica de negócio da lógica de
apresentação dividindo a aplicação nos três tipos de componentes da arquitetura:
modelo, visão e controlador.
O modelo encapsula os dados e as funcionalidades da aplicação; a visão é
responsável pela exibição de informações, cujos dados são obtidos do modelo;
enquanto o controlador recebe as requisições do usuário e aciona o modelo e/ou a
visão.
Pelo padrão Front Controller, todas as requisições do usuário são recebidas
pelo mesmo componente, neste caso um Servlet. Dessa forma, tarefas que devem
ser realizadas em todas as requisições podem ser implementadas por esse
componente. Isso evita a repetição de código e facilita a manutenção do sistema.
PITANGA(2013) explica que no JSF, o controle é composto por um servlet
denominado FacesServlet, por arquivos de configuração e por um conjunto de
manipuladores de ações e observadores de eventos. O FacesServlet é responsável
por receber requisições da WEB, redirecioná-las para o modelo e então remeter uma
resposta. Os arquivos de configuração são responsáveis por realizar associações e
mapeamentos de ações e pela definição de regras de navegação. Os manipuladores
de eventos são responsáveis por receber os dados vindos da camada de
visualização, acessar o modelo, e então devolver o resultado para o FacesServlet.
O modelo representa os objetos de negócio e executa uma lógica de negócio
ao receber os dados vindos da camada de visualização. Finalmente, a visualização
é composta por component trees (hierarquia de componentes UI), tornando possível
unir um componente ao outro para formar interfaces mais complexas. A figura a
seguir mostra a arquitetura do JavaServer Faces baseada no modelo MVC.
Figura 8 - Arquitetura JSF baseada no Modelo MVC
Fonte: http://www.guj.com.br/content/articles/jsf/jsf.pdf
19
Segundo GEARY e HORSTMANN(2007), os JavaServer Faces possui as
seguintes partes:
- Um conjunto de componentes pré-fabricados de interface de usuário;
- Um modelo de programação orientado a eventos;
- Um modelo de componentes que permite a desenvolvedores independentes
fornecerem componentes adicionais.
Alguns componentes são simples como campos input e botões, enquanto
outros são bastante sofisticados como tabela de dados e árvores. Neste sentido,
existem várias implementações do JavaServer Faces, dentre elas a Sun Mojarra,
MyFaces, e outras. É possível ainda utilizar bibliotecas de componentes como
PrimeFaces, RichFaces, ICEFaces e outras.
O JSF possui todos os códigos necessários para manipular eventos e
organizar componentes. Dessa forma, os programadores podem ignorar tais
detalhes e empenharem-se na lógica de programação.
Por integrar o padrão Java EE, suas bibliotecas estão incluídas nos
servidores de aplicação Java EE e pode ser facilmente adicionado a um conteiner
web autonomo, como o Tomcat, por exemplo.
Um subprojeto, também mantido pela Sun, e integrado ao JSF é o Facelets,
cujas principais características são:
- Permite integração com todas as versões do JSF;
- Facilidade na criação de templates;
- O atributo “jsfc” que permite incluir trechos de código JSF nas tags HTML;
- Elimina o "JSP Compiler to Servlet" incrementando de 30% a 50% a
performance do sistema;
- Facilidade para criar componentes reutilizáveis;
- Usa XHTML como tecnologia de view do JSF;
- Precisão para reportar erros.
A tecnologia Facelets, disponível como parte do JavaServer Faces 2.0,
passou a ser a tecnologia de apresentação padrão para a construção de aplicações
web baseadas em JSF.
A partir da Versão 2.0 do JSF, houveram muitas melhorias, porém uma que
se destaca é a inserão do AJAX de forma nativa, visto que nas versões anteriores é
necessário recorrer a frameworks de terceiros como RichFaces, PrimeFaces, etc.
Parte importante do JSF é o controle de escopo (contexto). Na execução de
aplicações web são três os escopos: Application, Session, Request. A partir do JSF
2, além dos três escopos já mencionados, foi incorporado um quarto escopo
denominado ViewScoped.
No ApplicationScoped todos os objetos e atributos vinculados ao
managedBean poderão ser vistos por toda a aplicação da mesma forma. No
SessionScoped todos os objetos e atributos vinculados ao managedBean poderão
ser vistos por um único usuário enquanto durar sua sessão. No RequestScoped os
dados são válidos apenas durante a comunicação entre o cliente (browser) e o
servidor. O viewScope, adicionado a partir da versão 2 do JSF, foi criado para
resolver o problema de sempre utilizar session quando era necessário manter os
20
dados entre requisições, que não onerasse tanto a aplicação e oferece suporte ao
modelo statefull do framework, onde é possível manter os dados durante quantas
requisições forem necessárias, desde que todas estas sejam realizadas para a
mesma view. (PACHECO, 2013)
Um dos fundamentos de maior relevância do JSF é seu ciclo de vida que se
dá entre a requisição e a resposta do servidor de aplicação. Este ciclo está
respresentado na figura abaixo:
Figura 9 - Ciclo de vida do JSF
Fonte: http://imasters.com.br/linguagens/java/conheca-o-ciclo-fe-vida-do-jsf/
Segundo VINICIUS(2013), são vários os motivos da existência deste ciclo,
dentre estes:
- Manter o controle de estado dos componentes de interface;
- Alinhar ouvintes de eventos com seus respectivos eventos;
- Controle de navegação entre páginas, que deve ser realizado pelo servidor;
- Permitir que validações e conversões sejam realizadas no lado do servidor.
Para elucidar a figura 9 é convém descrever o que acontece em cada fase:
- Fase 1: Restore View (Restauração da visão): A partir de uma requisição
proveniente do servlet FacesServlet, é identificado qual visão está sendo requisitada
por meio do identificador desta que é determinado pelo nome da página. Tendo
identificado a página, esta é salva no FacesContext (caso ainda não tenha sido) e
sua respectiva árvore de componentes é construída.
- Fase 2: Apply Request Values (Aplicar valores da requisição): Cada
componente da visão, criado ou recuperado, passa a ter o seu valor. Nesse
contexto, existem algumas diferenças ocasionadas pelo valor do atributo
“immediate” em cada componente.
- Fase 3: Process Validation (Processar as validações): Esta é a primeira
manipulação de eventos do ciclo, aqui serão executadas as validações definidas
pelo servidor em cada componente. Não existindo valores inválidos, o ciclo segue
21
para a Fase 4. Existindo, uma mensagem de erro será gerada (adicionada ao
contexto do Faces, FacesContext) e o componente é marcado como inválido. Neste
caso, o ciclo segue para a Fase 6 (Renderizar a resposta).
- Fase 4: Update Model Values (Atualizar valores de modelo): Os valores
enviados pela requisição e validados pela fase 3, são atualizados em seus
respectivos atributos contidos nos backings beans, onde somente as propriedades
enviadas são atualizadas. É importante dizer que, mesmo após a fase de validação,
fase 3, os valores enviados podem estar inválidos a nível de negócio ou a nível de
conversão de tipos, o que pode ser verificado pelo próprio bean.
- Fase 5: Invoke Application (Invocar aplicação): Nesta fase, os valores dos
componentes da requisição, estão validados convertidos e disponíveis nos backings
beans. Assim a aplicação tem os insumos necessários para aplicar a lógica de
negócio.
- Fase 6: Render Response (Renderizar a resposta): O processo ‘Renderizar
a resposta’ consiste na apresentação da página referente ao resultado da aplicação
ao usuário. Neste contexto existem três possibilidades: Caso seja a primeira
requisição da página, os componentes associados são criados e vinculados a visão;
Se for a primeira submissão, os componentes são traduzidos para o HTML; ou caso
tenha ocorrido algum erro: Existindo os marcadores <f:message /> ou <f:messages
/> na página, os erros são exibidos ao usuário.
A especificação do JavaServer Faces que compõe a plataforma Java EE é
extremamente ampla. Neste tópico foram destacadas aquelas julgadas como as
principais características do JavaServer Faces considerando suas versões a partir
do JSF 1.2. Tudo isso não esgota o assunto que é vasto e cheio de nuâncias. O
conteúdo poderia abordar outros componentes de igual importância da tecnologia,
porém estes serão apenas citados, ficando para outra oportunidade o detalhamento
de cada um:
- Validação de entrada;
- Manipulação de Eventos;
- Conversão de dados entre objetos do modelo e os componentes JSF;
- Gerenciamento na criação de objetos do modelo;
- Configuração da navegação entre páginas;
- Uso de Expression Language (EL);
Todas estas funcionalidades estão disponíveis usando API’s Java padrão e
arquivos de configuração baseados em XML. Nas versões mais recentes do Java
EE estão disponíveis outros recursos como:
- A capacidade de utilizar anotações em vez de um arquivo de configuração
para especificar beans gerenciados e outros componentes;
- Facelets, uma tecnologia de imagem que substitui JavaServer Pages (JSP)
usando arquivos XHTML;
- Apoio Ajax;
- Componentes compostos;
- Navegação implícita.
22
2.4.4 JAVASERVER PAGES - JSP
A tecnologia JavaServer Pages (JSP) permite acrescentar trechos de código
servlet diretamente em um documento baseado em texto. A página JSP é um
documento baseado em texto que contém dois tipos de texto:
- Os dados estáticos, que podem ser expressas em qualquer formato
baseado em texto, como HTML ou XML;
- Elementos JSP, que determinam como a página constrói o conteúdo
dinâmico.
Assim permite que código Java e certas ações pré-definidas sejam
intercaladas com conteúdo de marcação estático, resultando na página sendo
compilada e executada no servidor para ser entregue num documento HTML ou
XML. As páginas compiladas e qualquer dependência de biblioteca Java usa os
bytecodes primeiro que o formato nativo de software, e deve assim ser executado
com uma JVM, a máquina virtual Java, integrada com o host do sistema operacional
para prover um ambiente de abstração de plataforma.
A sintaxe de JSP é uma mistura de dois tipos básicos de conteúdo: scriptlet
elements e markup. Markup é tipicamente um padrão HTML ou XML, enquanto os
elementos scriptlet são blocos de código Java os quais podem ser unidos com o tipo
de marcação, markup. Quando a página é requisitada o código Java é executado e
sua saída é adicionada, in loco, com o ambiente de marcação para gerar a página
final.
Ocorre que com o advento do JavaServer Faces a tecnologia tem caído em
desuso, contudo mantém seu nicho para aplicações mais simples.
A plataforma Java EE 6 requer JavaServer Pages 2.2 para compatibilidade
com versões anteriores, mas recomenda o uso de Facelets como a tecnologia de
exibição em novas aplicações.
2.4.5 JAVASERVER PAGES STANDARD TAG LIBRARY - JSTL
O JavaServer Pages Standard Tag Library (JSTL) encapsula funcionalidades
do núcleo comum a muitas aplicações JSP. Em vez de misturar tags de vários
fornecedores em seus aplicativos JSP, é possível usar um único conjunto padrão de
tags. Essa padronização permite implantar os aplicativos em qualquer conteiner JSP
que suporte JSTL. Com isso a implementação é otimizada.
JSTL possui tags de iteração e condicionais que lhe permite lidar com
controle de fluxo, tags para manipular documentos XML, documentos, tags de
internacionalização, tags para acessar bancos de dados usando SQL, assim como
outras funções comumente usadas.
2.4.6 JAVA PERSISTENCE - JPA
O Java Persistence API (JPA) é uma solução baseada em padrões Java para
persistência. Persistência que usa um objeto/abordagem relacional para preencher a
23
lacuna entre um modelo orientado a objeto e um banco de dados relacional. O Java
Persistence API também pode ser usado em aplicações Java SE, fora do ambiente
Java EE. Java Persistence é composto pelas seguintes áreas:
- O Java Persistence API
- A linguagem de consulta
- Objeto/metadados de mapeamento relacional
A JPA define um meio de mapeamento objeto-relacional para objetos Java
simples e comuns (POJOs), denominados beans de entidade. Diversos frameworks
de mapeamento objeto/relacional como o Hibernate implementam a JPA. Também
gerencia o desenvolvimento de entidades do Modelo Relacional usando a plataforma
nativa Java SE e Java EE.
Segundo material instrucional da empresa K19, a especificação JPA foi criada
com o objetivo de padronizar as ferramentas ORM para aplicações Java e
consequentemente diminuir a complexidade do desenvolvimento. Atualmente, essa
especificação está na sua segunda versão.
Gupta(2012) explica que uma tabela de banco de dados, geralmente com
várias colunas, armazena o estado persistente de um aplicativo. Várias linhas são
armazenadas em tabela de banco de dados para capturar diferentes estados. Uma
única coluna ou combinação de colunas pode definir a singularidade de cada tabela
como uma restrição de chave primária. Estas tabelas geralmente mantém relações
definidas entre eles usando chave estrangeira. Assim, o JPA define um mapeamento
padrão entre a aplicação e o banco de dados através de um POJO. Ele define a
sintaxe para capturar a chave primária e estrangeira e demais restrições, bem como
a forma pela qual os registros podem ser criados, lidos, atualizados e excluídos
usando esses POJO’s. Transações, caching, validação e outros recursos
semelhantes requeridos por uma aplicação que acesse a uma base de dados
também são definidos pelo JPA. Para tanto, a API faz uso extensivo de anotações e
necessita de configuração em arquivos .xml.
Atualmente na segunda versão é indispensável na criação de aplicações no
padrão Java EE.
2.4.7 JAVA TRANSACTION - JTA
O Transaction API Java (JTA), segundo o tutorial oficial do Java EE 6, fornece
uma interface padrão para demarcar transações. A arquitetura Java EE fornece um
recurso automático para lidar com a confirmação ou reversão da transação
(Commit/Rollback). Um auto commit significa que qualquer outra aplicação que
acessa os dados terão acesso a eles atualizados após cada operação de leitura ou
gravação do banco de dados.
Através da interface JTA o desenvolvedor interage com o monitor de
transação, normalmente implementado em um servidor de aplicações para
determinar as fronteiras de uma transação dentro de uma aplicação, isto é, através
da interface JTA ele define o início da transação e determina se ela será confirmada
(commit) ou não (rollback).
24
2.4.8 JAVA API FOR RESTFUL WEB SERVICES - REST
Utilizar um WebService é uma das maneiras mais comuns de se integrar
aplicações diferentes. Existem diferentes tipos de arquiteturas para web services, e
o RESTful é mais simples em comparação aos outros web services, que geralmente
utilizam o SOAP. RESTfull é um WebService que utiliza HTTP e segue os princípios
REST.
REST (REpresentational State Transfer) é um estilo de arquitetura de
software para hipermídia distribuída, tal como a World Web Wide.
Na prática funciona como um conjunto de princípios que servem para definir
um sistema, tais como:
- Arquitetura Cliente-Servidor;
- Não armazena estado;
- Uma única interface bem definida, tais como os métodos do HTTP(Get,
Post, Put, Delete); etc.
RESTfull possui 3 características fundamentais:
- Possui uma URI base para o WebService;
- Um formato de dados suportado pelo WebService, em geral XML ou JSON;
- Um conjunto de operações suportados, utilizando os métodos HTTP.
No Java EE existe a especificação JAX-RS (JSR-311) que padroniza
anotações para criar um WebService seguindo os princípios do REST.
2.4.9 MANAGED BEANS
Gupta(2012), define Managed Beans como um POJO que é tratado como um
componente gerenciado por um conteiner Java EE. Ele fornece uma base comum
para diferentes tipos de componentes que existem na plataforma Java EE. Além
disso, a especificação também define um pequeno conjunto de serviços básicos,
como a injeção de recursos, retornos de chamada do ciclo de vida e interceptores.
Representam uma generalização dos Managed Beans especificados pela
tecnologia JavaServer Faces e pode ser usado em qualquer lugar em um aplicativo
Java EE, e não apenas nos módulos da web. Normalmente, um Managed Bean não
é usado por si só, sendo que na maioria dos casos é utilizado por outros
componentes.
2.4.10 CONTEXTS AND DEPENDENCY INJECTION FOR THE JAVA EE
PLATFORM (JSR 299) - CDI
CDI para a plataforma Java EE define um conjunto de serviços contextuais
aos componentes de negócio, fornecidos pelo conteiner Java EE, que tornam mais
fácil para os desenvolvedores a utilização de EJB’s, juntamente com JavaServer
Faces em aplicações web. Projetado para uso com objetos stateful, CDI também
tem usos mais amplos, permitindo aos desenvolvedores uma grande flexibilidade
para integrar diferentes tipos de componentes de forma flexível e segura.
25
É uma tecnologia que cuida da parte de injeção de dependências. Com o CDI
habilitado todas as classes são consideradas como se fossem Managed Beans, e
portanto, passíveis de injeção e serem injetadas. É possível utilizar com CDI toda a
classe pública com um construtor público ou alguns que receba parâmetros e esteja
anotado com a anotação @Inject.
2.4.11 BEAN VALIDATION
A especificação Bean Validation define um modelo de metadados e API para
validação de dados em componentes JavaBeans. Em vez de distribuir validação dos
dados ao longo de várias camadas, como o navegador e o lado do servidor, você
pode definir as restrições de validação em um só lugar e compartilhá-los através das
diferentes camadas.
Segundo Gupta(2012), as restrições podem ser declarados na forma de
anotações colocado em um campo, propriedade, parâmetro de método ou classe.
Restrições também podem ser definidas em interfaces ou superclasses.
Especificando uma restrição em uma interface significa que a restrição é imposta a
todas as classes que implementam a interface. Da mesma forma, todas as classes
herdadas de uma superclasse herdam o comportamento de validação.
2.4.12 JAVA MESSAGE SERVICE - JMS
Java Message Service é uma API da linguagem Java para middleware
orientado à mensagens que permite que os componentes de aplicativos Java EE
criem, enviem, recebam e leiam mensagens. Ele permite a comunicação distribuída,
flexível, confiável e assíncrona.
2.4.13 JAVA EE CONNECTOR ARCHITECTURE - JCA
O JCA é uma arquitetura genérica para ligar aplicações Java EE a sistemas
legados desenvolvidos em arquitecturas heterogéneas (possivelmente fora da
plataforma Java, incluindo bases de dados).
O JDBC - Java Database Connection é usado especificamente para ligar
aplicações Java a bases de dados e pode ser considerado como uma
implementação de um adaptador de recursos para ligação a bases de dados SQL.
2.4.14 JAVAMAIL
A API JavaMail é utilizada para modelar um sistema de e-mail. Esta API
possui implementações para alguns dos protocolos mais populares para envio e
recebimento de e-mails e fornece um forma bem fácil de usá-los.
O JavaMail possui duas partes:
- Uma interface em nível de aplicativo usado pelos componentes do aplicativo
para enviar o e-mail;
- A interface do provedor de serviço.
26
A plataforma Java EE inclui a API JavaMail com um prestador de serviço que
permite que os componentes do aplicativo enviem e-mail quando conectados a
Internet.
2.4.15 JAVA AUTHORIZATION CONTRACT FOR CONTAINERS - JACC
A especificação Java Authorization Contract for Containers define um contrato
entre um servidor de aplicativos Java EE e um provedor de política de autorização.
A especificação JACC define classes java.security.Permission que
satisfazem o modelo de autorização Java EE. A especificação define a semântica de
provedores de políticas que usam as classes de permissão para atender aos
requisitos de autorização da plataforma Java EE, incluindo a definição e utilização
de papéis (Roles).
2.4.16 JAVA AUTHENTICATION
CONTAINERS - JASPIC
SERVICE
PROVIDER
INTERFACE
FOR
O JASPIC define uma interface de provedor de serviço (SPI) pelo qual os
provedores de autenticação que implementam mecanismos de autenticação de
mensagens que podem ser integrados.
2.5 Serviços Padrão do Java EE
Os conteineres que hospedam as aplicações Java EE devem fornecer a cada
tipo de componente visto acima um conjunto de serviços que consistem em:
- Conectividade, a fim de proporcionar a comunicação com outros
componentes e clientes do aplicativo. Isso pode ser feito através de RMI (Remote
Method Invocation) e CORBA.
- Serviços de Diretório, sendo obrigados a fornecer serviço de atribuição de
nomes nos quais os componentes podem ser registrados e descobertos. Isto é feito
através da JNDI (Java Naming and Directory Interfaces).
- Acesso a dados e persistência, de modo que a aplicação tenha acesso a
fonte de dados. Pode ser realizado via JDBC (Java Database Connection).
- Conectividade Legada, que permite a integração com servidores legados e
ERP’s (Enterprise Resource Planning) através do componente JCA.
- Segurança, que está incorporada no Java EE, bem como por API’s como o
JAAS (Java Authentication and Authorization Service).
- Suporte para XML, de modo a suportar a análise de documentos XML
usando DOM (Document Object Model), XSTL (eXtensible Styleshet Language
Transformation) e outras tecnologias.
- Transasões, também fornecido pela especificação JTA no Java EE, de
modo a controlar as transações que serão realizadas em banco de dados.
- Troca de Mensagens e e-mails, que são realizadas pelas API’s JMS e
JavaMail também já integradas ao Java EE.
27
Todos os servidores devem suportar os serviços descritos nesta sessão. Na
figura a seguir um esquema de serviços que devem ser suportados por qualquer
servidor Java EE:
Figura 10 - Plataforma Java EE com serviços disponíveis
Fonte: BOND et al (2003)
Como visto o Java EE é um padrão dinâmico para produção de aplicativos
corporativos seguros, escaláveis e altamente disponíveis, de modo que define quais
serviços devem ser fornecidos pelos servidores que o suportam.
Conforme explicam BOND, et al(2003), embora a especificação do Java EE
defina um conjunto de serviços e tipos de componentes, ela não contém
informações sobre como organizar a arquitetura lógica em máquinas físicas,
ambiente ou espaços de endereços.
A plataforma Java EE fornece um ambiente comum para construção de
aplicativos seguros escaláveis e independente de plataforma.
28
3 SEAM FRAMEWORK
Como o título deste capítulo já deixa claro o JBoss Seam é um framework. Na
verdade é um framework que está acima de outro framework, o Java EE, que
também fica acima de outro framework, o Java. (FARLEY, 2008).
A palavra framework tem um amplo significado, contudo no caso do Seam e
sob o ponto de vista da tecnologia representa a moldagem de um conjunto de API’s
e serviços em um ambiente que facilita ou simplifica o desenvolvimento de
aplicações, neste caso Java EE.
O Seam simplifica atividades rotineiras e comuns, fornecendo utilitários
nativos que em outras situações o programador teria que escrever. Conforme
explica FARLEY(2008), ele atende os deveres de um framework de duas formas:
- Simplificando o Java EE por meio de um conjunto de atalhos e
simplificações do framework padrão Java EE, tornando fácil e eficaz o uso de
componentes web e de negócios.
- Extendendo o Java EE visto que integra um conjunto de conceitos e
ferramentas. Tais extensões trazem novas funcionalidades para dentro do Java EE.
Ao longo deste capítulo serão listados vários serviços e utilitários que o JBoss
Seam fornece.
3.1 Integração entre o JBoss Seam e o Java EE
O ambiente padrão do Java EE é formado pelo Java SE(Java Standard
Edition) e suas API’s como o JDBC para acesso a banco de dados, JAXP para
processamento de XML entre outros que suportam todos os recursos da camada
enterprise do Java EE como JSF, JSP e Servlets usados no desenvolvimento web,
bem como o JAX-WS para web services entre outros, como ilustrado na figura
abaixo:
Figura 11 - Padrão Java EE
Fonte: Adaptado de Farley(2008)
Mesmo com os diversos recursos oferecidos pelo Java EE e os diversos
avanços em relação ao predecessor J2EE o Seam Framework simplifica ainda mais
o desenvolvimento web. O Seam atua entre a camada de código da aplicação e o
Java EE como se vê na figura abaixo:
29
Figura 12 - Seam Framework
Fonte: Adaptado de Farley(2008)
3.2 Modelo de Componentes
O conjunto de facilidades fornecidas pelo Seam Framework derivam
principalmente de seu modelo de componentes. Em verdade, este modelo é uma
extensão do modelo de componentes já existente no JSF através dos managed
beans.
Um benefício fundamental fornecido pelo modelo de componentes é o uso
direto de componentes EJB acoplados as páginas JSF. Para tanto o Seam fornece
uma ponte entre o modelo de componentes do JSF e o modelo de componentes do
EJB, permitindo a utilização direta como um managed bean.
Segundo ALLEN(2008), no processo de resolver o descompasso entre JSF e
EJB 3, os arquitetos Seam ampliaram a solução e criaram um modelo de
componente universal, trazendo os serviços fornecidos implícitos na programação
com EJB 3, como transações, interceptores e segurança, para componentes nãoEJB, tais como JavaBeans. ALLEN(2008) explica ainda que para os componentes
que não sejam EJB, o JBoss Seam é quem processa as anotações ou sinônimos
dessas anotações pertencentes ao API do Seam Framework API. Dessa forma, não
é necessário um conteiner EJB para aproveitar os benefícios que o EJB 3 fornece.
SALTER(2009), informa que o JBoss Seam implementa os seguintes
componentes:
- JavaBeans/POJO’s
- Stateless Session Bean
- Stateful Session Bean
- JPA Entity
- Message-driven Bean
Um componente é definido através da anotação @Name. Quando o nome é
utilizado no JSF, a instância do bean será automaticamente inicializada e usada
como um bean acoplado no JSF.
30
Usando esta anotação em uma classe, esta será vinculada automaticamente
uma instância desta com um componente JSF.
@Name("minhaClasse")
public class MinhaClasse{
3.3 Bijeção
Segundo FARLEY(2008), o Seam oferece uma visão mais abrangente de
dependências por injeção denominada bijeção. Este conceito suporta a propagação
das referências em dois sentidos, ou seja um componente pode ser injetado no
contexto ou pode ter uma injeção da referência realizada. Tudo isso de uma forma
muito simples utilizando anotações (@In e @Out). Possibilita atualizações dinâmicas
do componente de modo que a injeção não é realizada uma única vez, a bijeção
ocorre a cada invocação do componente.
No Seam a anotação @In é usada para injetar um componente Seam em
outro componente, podendo ser aplicada a membros de classe ou a métodos
assessores, como nos trechos de código abaixo:
@In
private AlgumBean algumBean
ou
@In
public AlgumBean getAlgumBean(){
return algumBean;
}
Assim como é possível importar ou injetar um valor é possível exportar o valor
de componentes ao introduzir o conceito de outjeção para o escopo onde o mesmo
foi criado. Isto é feito utilizando a anotação @Out e é aplicada de forma similar a
anotação de injeção, porém com fim de exportar o compomente. Sua aplicação pode
ser observada no trecho de código abaixo:
@Out
private AlgumBean algumBean
ou
@Out
public AlgumBean getAlgumBean(){
return algumBean;
}
Esta anotação carrega consigo o atributo scope que permite especificar o
contexto da outjeção.
A injeção e a outjeção não é um evento que ocorre uma única vez. Estes
eventos serão realizadas toda vez que um componente Seam for invocado.
31
Grande parte dos componentes do Seam também fornecem um número
poderoso de serviços extendidos no topo do padrão Java EE.
3.4 Contexto de Componentes
Os contextos do JBoss Seam são semelhantes aos contextos de uma
aplicação web pura em Java EE (componentes JSF, Servlet e JSP). Os contextos
são áreas de objetos onde é possível associar um namespace (string) para
identificação de um objeto ao armazená-lo no contexto. O contexto determina um
tempo de vida para os objetos que ali são armazenados. O tempo de vida determina
um escopo de existência dos objetos ao torná-los disponíveis para os Servlets e
JSP's ou componentes JSF da aplicação.
Numa aplicação Java EE simples existem os seguintes contextos para
armazenar objetos:
- Page
- Request
- Session
- Application
Não convém aqui voltar a descrevê-los visto que já foram alvo de estudo no
capítulo anterior.
Os contextos Seam são complementares e distintos dos contextos do Java
EE. No Entanto, alguns deles são internamente os mesmos contextos do Java EE. O
Seam disponibiliza os seguintes contextos: stateless, event, page, conversation,
session, business process e application.
- Stateless: Contexto para armazenar a referência para objetos sem estado
em session stateless EJB).
- Event: É equivalente ao contexto request do Java EE. Recebe outro nome
em razão de ser utilizado em outras situações além de requisições Web como
invocação RMI ou invocação via Seam Remoting aos componentes Seam. Este
contexto está associado ao ciclo de vida JSF. Durante o processamento do ciclo de
vida os objetos associados estarão disponíveis e serão eliminados somente ao final
do ciclo de vida JSF. Este contexto tem o tempo de vida de uma requisição Ajax
realizada pelas bibliotecas de componentes visuais JSF com suporte a Ajax.
- Page: Permite armazenar objetos que são criados e usados em uma tela
JSF. Este contexto pode ser comparado com o contexto page do Java EE. Contudo,
um objeto armazenado neste contexto estará diponível somente para a página JSF
correspondente que o instanciou a partir de algum listener de evento. Como a
documentação sugere, este contexto é útil em alguns componentes visuais como,
por exemplo, numa lista clicável de opções que precisa de um objeto com valores
específicos para esta lista e página JSF. Objetos neste contexto estarão disponíveis
mesmo em sucessivas requisições Ajax a partir de componentes visuais a partir do
navegador web.
- Conversation: Este contexto é considerado o grande diferencial do JBoss
Seam, o qual agrega valor no desenvolvimento de aplicações Web com JSF. O
contexto de conversação permite armazenar objetos que terão um tempo de vida
32
maior que uma requisição (event) e menor que uma sessão (session). Com este
contexto é possível definir um escopo para objetos que são usados para
implementar um fluxo de telas que realizam um caso de uso. Em um Componente
Seam é possível anotar o início da conversação e em outro método usar outra
anotação para demarcar o fim da conversação. (@Begin e @End). Funcionando
dessa forma é possível abrir várias janelas de navegação para uma mesma tela JSF
e cada janela representar uma conversação diferente (contexto diferente de objetos)
para execução simultânea do mesmo caso de uso. Cada janela é um contexto
separado que não influência um outro contexto aberto.
- Session: Este contexto é equivalente ao contexto Java EE de mesmo nome.
Define um escopo para manter objetos no contexto enquanto o usuário estiver
logado na aplicação
- Business Process: Define um contexto para objetos que são associados a
um processo de negócio gerenciado pelo jBPM. Objetos armazenados neste
contexto pertencem a um processo e podem ser compatilhados entre vários usuários
que acessam o mesmo processo de negócio. Só faz sentido usar este escopo se a
máquina de processos implementada pelo jBPM estiver em uso numa aplicação
Java EE em conjunto com o JBoss Seam.
- Application: É equivalente ao contexto Java EE de mesmo nome. Objetos
armazenados neste contexto estarão disponíveis para todas as conversações e
usuários que acessam a aplicação. É útil ao armazenar objetos com conteúdo que
não mudam com freqüência para compatilhar para toda aplicação. Muitos objetos
internos do próprio Seam são armazenados neste contexto.
Todos os contextos acima definem namespaces para dar nome ao objeto
armazenado. Os nomes para os objetos armazenados nestes contextos são
chamados de context variable. Em uma página JSF, ao usar uma expression
language (EL) para associar um componente visual a um objeto (seam component)
armazenado em um destes contextos, o Seam realiza a busca do objeto a partir do
nome indicado na expressão em uma ordem de prioridade (event, page,
conversation, session, business process, application). Também é possível indicar
programaticamente (dentro de um método do Managed Bean ou Seam Component)
qual contexto deve obter o objeto sem realizar uma busca nos vários contextos
simplesmente utilizando anotação (@Scope).
3.5 Eventos Seam
O Seam introduz dois novos tipos de eventos ao modelo de eventos do JSF:
- Ações de Página (Page Actions): são eventos disparados logo depois que
uma requisição web é realizada e respondida antes que a página seja renderizada.
Estas ações são implementadas como métodos de um managed beans JSF ou
métodos de um componente Seam.
- Eventos voltados ao componente: fornecem um esquema de notificação
geral de eventos para os componentes Seam. Um conjunto de nomes de eventos
podem ser definidos e os métodos de componentes podem ser registrados como
33
callbacks desses eventos. Assim, qualquer componente pode disparar um evento
em qualquer lugar no código de negócio e qualquer operação pode ser invocada.
O JBoss Seam implementa os chamados Action Listeners, que são utilizados
como alvo de formulários de submissão e links em aplicações web. Eles agem como
parte do controlador no padrão MVC suportados pelo JSF. Os Actions Listeners são
capazes de executar qualquer regra de negócio que é necessária para lidar com os
dados fornecidos pelo usuário em suas solicitações.
O Seam também suporta o uso de JavaBeans ou POJO’s como action
listeners. Este tipicamente implementam regras de negócio, e não apenas simples
operações de persistência.
3.6 Seam Data Validation
SALTER(2009), afirma que o Seam vai muito além de fornecer recursos ao
JSF servindo como Bean de apoio. O Seam fornece ferramentas de validação, com
fito a impedir a inserção de dados inválidos que possam comprometer a segurança
da aplicação.
Este modelo de validação é realizado utilizando o Hibernate Validator. Para
tanto são utilizadas as seguintes anotações, entre outras:
@Pattern – Especifica uma validação através do uso de expressão regular
(regex);
@Range – Especifica que o valor deve estar entre um mínimo e um máximo;
@AssertFalse - Verifica se anotação é false;
@AssertTrue - Verifica se anotação é true;
@Email - Verifica se a seqüência especificada é um endereço de e-mail
válido;
@Length(min=, max=) - Precisa ser uma string. Validar que a string está
entre min e max incluído;
@Max - Verifica se o valor anotado é inferior ou igual ao valor máximo
especificado;
@Min - Verifica se o valor anotado é maior do que ou igual ao mínimo
especificado;
@NotNull - Verifique se o valor anotado não é nulo;
@NotEmpty - Precisa ser uma string. Verifica se a string não é nulo ou vazio;
@Null - Verifique se o valor anotado é nulo;
@Pattern(regex=, flag=) - Precisa ser uma string. Verifica se a cadeia
anotada corresponde à expressão regular regex;
@Size(min=, max=) - Verifica se o tamanho do elemento anotado é entre
mínimo e máximo. Tamanho da coluna será definido para max;
@Valid - Realizar a validação recursivamente sobre o objeto associado, ou
seja com objetos que tenham relacionamento;
Um exemplo da aplicação é visto no trecho de código abaixo:
34
public class Cidade {
@Length(max=2, min=2)
private Char uf;
@NotNull
private String nome;
@Length(max=8)
@Pattern("^\d*$")
private String cep;
/*Getters e Setters*/
}
Dessa forma não é mais necessário especificar o tipo de validação a ser
utilizado na página JSF. Em vez disso utiliza-se apenas a tag <s:validate> ou
<s:validateAll>, como nos trechos de código a seguir:
<h:form>
<div>
<h:messages/>
</div>
<div>
Estado:
<h:inputText value="#{cidade.uf}">
<s:validate/>
</h:inputText>
</div>
<div>
Nome da Cidade:
<h:inputText value="#{cidade.nome}">
<s:validate/>
</h:inputText>
</div>
<div>
Cep:
<h:inputText value="#{cidade.cep}">
<s:validate/>
</h:inputText>
</div>
<div>
<h:commandButton/>
</div>
</h:form>
Ou simplesmente:
<h:form>
<div>
<h:messages/>
</div>
<s:validateAll>
<div>
Estado:
35
<h:inputText value="#{cidade.uf}"/>
</div>
<div>
Nome da Cidade:
<h:inputText value="#{cidade.nome}"/>
</div>
<div>
Cep:
<h:inputText value="#{cidade.cep}"/>
</div>
<div>
<h:commandButton/>
</div>
<s:validateAll>
</h:form>
3.7 Página de Navegação
A navegação entre páginas com JSF fornece um conjunto limitado de
recursos. O JBoss Seam fornece uma linguagem de navegação concisa que
incorpora o gerenciamento do escopo de conversação, segurança, tratamento de
exceções, os parâmetros de requisição, notificação de eventos, e muito mais. No
Seam o que define o fluxo de navegação é o namespace de navegação, usado para
configurar os componentes de navegação.
O namespace é usado dentro do arquivo WEB-INF/pages.xml. Este unifica a
lógica de navegação e é controlado pelo Seam. Esta lógica inclui parâmetros de
página, gerenciamento de conversa e permite que a navegação seja baseada na
avaliação de Expression Language (EL) em vez de depender de valores de retorno.
Além disso, é possível notificar eventos, manipular exceções genéricas, aplicar
restrições de segurança, etc.
3.7.1 ELEMENTOS DE NAVEGAÇÃO
De acordo com ORSHALICK(2009), o esquema em XML do JBoss Seam usa
as seguintes notações para indicar os elementos necessários e possíveis para
realizar a navegação:
<pages> é o elemento raiz que define a configuração geral aplicado a todas as
páginas.
<page> Define a navegação, bem como o controle da ógica associada a um view-id.
<conversation> Configura um escopo de conversação quando chamado.
<exception> Define a manipulação para um tipo específico de exceção.
<http-error> Especifica um código de erro HTTP e que este seja retornado para
o usuário.
<mensagem> Especifica uma mensagem que deve ser exibida para o usuário.
<restrict> Configura uma restrição de segurança para uma página definida
através de EL.
36
<description> Fornece uma descrição para a página que será exibida no
ConversationSwitcher. Sem essa descrição a conversação não vai aparecer no
componente.
<param> Define um parâmetro de página a ser definido a partir de solicitação GET.
<action> Define uma ação a ser executada.
<header> Especifica cabeçalhos de HTTP a ser adicionado a uma página.
<navigation> Define as regras de navegação associadas a uma página.
<rule> Especifica uma ação específica. Seu conteúdo deve retornar um valor
booleano resultado de uma expressão em que a navegação deve ocorrer.
<redirect> Redireciona o usuário para o valor especificado em view-id.
<render> Especifica um view-id para ser processado.
<raise-event> Configura um evento a ser gerado quando da exibição da página
ou de navegação.
<beginconversation> Inicia uma conversação de longa duração.
<endconversation> Termina uma conversação longa.
Figure 13 - Elementos da página de navegação
Fonte: ORSHALICK (2009)
Exemplo de sua aplicação pode ser visto no trecho de código abaixo:
<page login-required="true" view-id="/ManterAgenda.xhtml">
<restrict>#{s:hasRole(‘admin’)}
<action execute="#{redirect.captureCurrentView()}"/>
<navigation>
<begin-conversation />
<rule if-outcome="editarAgenda">
<redirect view-id="/Agenda/Agenda.xhtml"/>
</rule>
<rule if-outcome="mostrarAgenda">
37
<redirect view-id="/Agenda/AgendaView.xhtml"/>
</rule>
</navigation>
</page>
...
<exception class="org.jboss.seam.security.AuthorizationException”>
<end-conversation/>
<redirect view-id=”/generalError.xhtml”>
<message>
Você não tem autorização para acessar o recurso
</message>
</redirect>
</exception>
O modelo de nagegação entre páginas do JBoss Seam também dá suporte a
gestão de pageflow (fluxo de navegação) da aplicação usando jPDL(Linguagem de
Definição de Processo jBPM). Como sugere o nome, jPDL faz parte do jBPM
(Gestão de Processos de Negócio) que é a ferramenta JBoss para definição de
workflows e orquestração de tarefas dentro de um processo de negócio. (FARLEY,
2008).
Ademais, o JBoss Seam permite misturar a navegação JSF e pageflow jBPM
na mesma aplicação Seam, além de possibilitar o uso do escopo de conversação.
3.8 Biblioteca de Tags do JBoss Seam
Uma biblioteca estendida de tags JSF é definida pelo Seam para fornecer
controle sobre a navegação de conversação, menu simplificado, validação de beans
bem como para formatação componente.
Para possibilitar esta integração e o uso da biblioteca de Tags do Seam é
necessário declarar seu uso. Isso pode ser feito através de facelets:
/* Na versão 2.3.0.Final */
xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.org/schema/seam/taglib"
/* Nas versões anteriores */
xmlns=”http://www.w3.org/1999/xhtml”
xmlns:s=”http://jboss.com/products/seam/taglib”
3.8.1 TAGS DE NAVEGAÇÃO
ORSHALICK(2009) informa que o Seam fornece um conjunto de
componentes controlar a propagação da conversação em ambos solicitações GET e
POST. Esses componentes também estendem as capacidades do JSF para permitir
que solicitações GET desencadeiem ações junto aos actions listeners.
38
<s:link> Link que executa um pedido GET para invocar uma ação e permite a
propagação da convesação.
<s:button> Botão que executa uma requisição GET para invocar uma ação e
permite a propagação da convesação.
<s:conversationId> Adiciona um ID a conversação em para um link ou botão JSF.
<s:conversation Propagation> Permite a propagação da conversação podendo
ser controlado por um link ou botão de comando do JSF.
<s:defaultAction> Configura um botão (por exemplo, <h:commandButton>) como
ação padrão quando o formulário é enviado usando a tecla Enter (Return).
O trecho de código abaixo exemplifica o uso da tag <s:link>:
<s:link view-id=”/inicio.xhtml” propagation=”none” value=”Voltar ao
Início” />
3.8.2 TAGS DE SELEÇÃO
Em JSF sempre é necessário usar componentes de seleção para escolher
valor em uma lista de objetos ou uma enumeração de valores. Com o padrão JSF é
necessário o desenvolvimento de conversores e mesmo o tratamento deste objetos
a fim de possibilitar seu uso. O Seam torna esta tarefa simples por meio das tags
<s:selectItems>, <s:enumItem>, <s:convertEntity> e <s:selectItems>.
Assim é possível associar diretamente um atributo da entidade JPA ao componente.
<s:convertEntity> Converte uma entidade gerenciada para o seu identificador
único. Usado para selecionar entidades em um componente de seleção.
<s:convertEnum> Converte um enum para a sua representação constante.
Geralmente utilizado para a seleção de enums em um componente de seleção.
<s:enumItem> Cria um SelectItem de um valor enumerado permitindo que o rótulo
seja exibido.
<s:selectItems> Cria um SelectItem a partir de uma List, Set, DataModel ou
Array. Itera sobre a coleção com uma variavél permitindo que o itemLabel e
ItemValue seja definido através de EL.
No trecho de código abaixo é exibido um exemplo de seu emprego:
<h:selectOneMenu id=”ddCargo” value=”#{associado.cargo}”
required=”true”>
<s:selectItems noSelectionLabel=”--Selecione--” var=”type”
value=”#{creditCardTypes}” itemLabel=”#{type.description}”/>
<s:convertEntity />
</h:selectOneMenu>
39
3.8.3 TAGS DE FORMATAÇÃO
As seguintes tags de formatação permitem decorar campos inválidos com
estilos e mensagens. Além da formatação da mensagem, o Seam também dispõe de
tags para formatação de componentes:
<s:decorate> "decora" um campo de entrada JSF quando a validação falhar ou
quando a tag required for igual a "true". É definida usando Facelets.
<s:label> "decora" um campo de entrada(input) com uma etiqueta(label). Esta tag
é colocada no interior do elemento HTML, e está associado com o componente de
entrada mais próximo.
<s:message> "decora" um campo de entrada com a mensagem de erro de
validação associada a esse campo.
<s:div> Renderiza um componente <div>. Permite que o <div> seja
opcionalmente renderizado.
<s:span> Renderiza um componente <span>. Permite que o <span> seja
opcionalmente renderizado.
<s:fragment> Permite renderizar opcionalmente um fragmento HTML.
Estas foram apenas algumas das tags possíveis de serem utilizadas com o
Seam Framework. Segue abaixo uma lista completa das tags disponibilizadas pelo
JBoss Seam:
- s:button
- s:cache
- s:conversationId
- s:conversationName
- s:conversationPropagation
- s:convertAtomicBoolean
- s:convertAtomicInteger
- s:convertAtomicLong
- s:convertDateTime
- s:convertEntity
- s:convertEnum
- s:decorate
- s:defaultAction
- s:div
- s:download
- s:enumItem
- s:fileUpload
- s:formattedText
- s:fragment
- s:graphicImage
- s:label
- s:link
- s:message
- s:remote
- s:resource
- s:selectItems
- s:selection
- s:span
- s:taskId
- s:token
- s:transformImageBlur
- s:transformImageSize
- s:transformImageType
- s:validate
- s:validateAll
- s:validateEquality
- s:validateFormattedText
40
3.9 RichFaces
De acordo com a descrição no site oficial do RichFaces, este é um framework
que contém uma biblioteca de componentes ricos para JavaServer Faces. O
RichFaces extende as capacidades Ajax Framework do JSF com recursos
avançados.
O RichFaces aproveita várias partes da estrutura do JSF 2, incluindo ciclo de
vida, validação, instalações de conversão e gerenciamento de recursos estáticos e
dinâmicos. Oferece suporte a Ajax e é personalizável podendo ser incorporado em
qualquer aplicação JSF.
Além disso, a estrutura do RichFaces é projetado para ser usado de forma
integrada com outras bibliotecas na mesma página, proprocionando mais opções
para o desenvolvimento de aplicações.
O Kit de Desenvolvimento de Componentes (CDK), utilizado para a criação da
interface do usuário da biblioteca RichFaces inclui um recurso de geração de código
e um mecanismo de templates usando XHTML (eXtend hyper-text markup
language). Isso proporciona o manuseio de recursos para gerar imagens, sons,
planilhas do Microsoft Excel, e muito mais durante tempo de execução (runtime).
Possibilita ainda a personalização da aplicação por meio de temas,
proporcionando sua alteração em tempo de execução. Para isso, o RichFaces trás
consigo uma série de skins, contudo permite ao usuário criar a sua própria.
O RichFaces consiste das seguintes partes:
- Componentes ricos e Ajax dividido em duas bibliotecas de tags (a4j:,
rich:);
- Skins;
- Extensão para validação de objetos no lado do cliente utilizando Bean
Validation (JSR 303);
- CDK (Component Development Kit).
3.9.1 BIBLIOTECA DE TAGS DOS COMPONENTES RICHFACES
Os componentes RichFaces são divididos em duas bibliotecas de tags:
- a4j:
- rich:
Para habilitá-las nas páginas XHTML é preciso incluir os seguintes
namespaces:
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
A biblioteca de tags a4j: fornece suporte Ajax em nível de página e outras
tags de suporte. Fornece recursos básicos como enviar um pedido, o que enviar
para o servidor, e o que atualizar. As seguintes tags são fornecidas:
41
- a4j:actionparam
- a4j:ajaxListener
- a4j:commandButton
- a4j:commandLink
- a4j:facet
- a4j:form
- a4j:htmlCommandLink
- a4j:include
- a4j:jsFunction
- a4j:keepAlive
- a4j:loadBundle
- a4j:loadScript
- a4j:loadStyle
- a4j:log
- a4j:mediaOutput
- a4j:outputPanel
- a4j:page
- a4j:poll
- a4j:portlet
- a4j:push
- a4j:queue
- a4j:region
- a4j:repeat
- a4j:status
- a4j:support
A biblioteca de tags rich: fornece tags de componentes ricos. Pode-se
entender componentes ricos como tags HTML padrão que fornecem recursos
avançados, como por exemplo, um tab panel. Muitos componentes ricos também
possuem embutido suporte a Ajax. Estes componentes disparam pedidos Ajax e
fazem atualizações parciais de página automaticamente. A maioria destes
componente podem ser personalidados usando a4j: tags. As seguintes tags são
fornecidas:
- rich:ajaxValidator
- rich:beanValidator
- rich:calendar
- rich:changeExpandListener
- rich:colorPicker
- rich:column
- rich:columnGroup
- rich:columns
- rich:comboBox
- rich:componentControl
- rich:contextMenu
- rich:currentDateChangeListener
- rich:dataDefinitionList
- rich:dataFilterSlider
- rich:dataGrid
- rich:dataList
- rich:dataOrderedList
- rich:dataTable
- rich:datascroller
- rich:dndParam
- rich:dragIndicator
- rich:dragListener
- rich:dragSupport
- rich:dropDownMenu
- rich:dropListener
- rich:progressBar
- rich:recursiveTreeNodesAdaptor
- rich:scrollableDataTable
- rich:scrollerListener
- rich:separator
- rich:simpleTogglePanel
- rich:sliderListener
- rich:spacer
- rich:subTable
- rich:suggestionbox
- rich:tab
- rich:tabPanel
- rich:toggleControl
- rich:togglePanel
- rich:toolBar
- rich:toolBarGroup
- rich:toolTip
- rich:tree
- rich:treeNode
- rich:treeNodesAdaptor
- rich:virtualEarth
42
O intuito aqui não é explorar em detalhes cada tag do RichFaces, mas
apenas dar uma visão geral sobre seu emprego e suas vantagens. Os detalhes e
referência sobre cada tag pode ser amplamente encontrada no website JSF Toolbox
(http://www.jsftoolbox.com/documentation/richfaces/09-TagReference/index.jsf),
especializado em desenvolvimento com JavaServer Faces.
Embora existam inúmeras tags em RichFaces, existem apenas três conceitos
fundamentais:
- O envio de requisições AJAX;
- Renderização parcial do JSF;
- Processamento de parte da página JSF.
Tudo isso é muito importante para a criação de regiões Ajax na página,
validação e desempenho.
3.9.2 TEMAS RICHFACES
É possível criar temas com diferentes esquemas de cores. Os temas podem
ser personalizados, criados novos temas e substituídos em nível de CSS. O recurso
é baseado na tecnologia XCSS que fornece flexibilidade e dinâmica. RichFaces
fornece um conjunto de temas pré-definidos:
- DEFAULT
- plain
- emeraldTown
- blueSky
- wine
- japanCherry
- ruby
- classic
- deepMarine
- Laguna
- GlassX
- DarkX
Como se viu o RichFaces extende os componentes do JavaServer Faces, por
isso também é considerado como uma biblioteca de componentes para JSF. É
notório que este framework é muito mais que isso.
O RichFaces contribui para fazer do JBoss Seam uma ferramenta ainda mais
poderosa, por agregar mais componentes visuais com foco a interfaces ricas e
suporte Ajax.
Finalizando este capítulo é possível concluir sobre o JBoss Seam que ele
integra as tecnologias mais cogitadas do mercado open source como AJAX, JSF,
EJB 3.0, BPM, entre outras em um único framework, para facilitar o desenvolvimento
de aplicações RIA (Rich Internet Application), de maneira integrada e eliminando a
complexidade dessas API’s. Com isso, o Seam possibilita a criação de aplicações
43
complexas com poucas classes java, interfaces com usuário poderosas e com
arquivos XML de configuração.
44
4 METODOLOGIA
O objetivo do trabalho é apresentar o Seam Framework como solução para o
desenvolvimento de projetos para web e verificar a viabilidade de seu uso. Para este
feito foi proposto, depois de realizada uma revisão teórica acerca das tecnologias
que envolvem a solução, implementar uma aplicação utilizando o JBoss Seam.
O tipo de estudo a ser aplicado será o estudo de caso, cujos resultados serão
apresentados na forma de uma aplicação web onde os passos para sua construção
serão descritos de acordo com a tecnologia/componente utilizado e avaliado sua
viabilidade.
4.1 Cenário
Conforme a proposta deste trabalho houve a necessidade de levantar um
local ou empreendimento que necessitasse de uma aplicação para controle de seus
fluxos e armazenamento de informações. Para tanto, o local escolhido foi uma
associação de classe de servidores públicos, cuja necessidade inicial era o controle
de seus associados. Contudo, como associação ela não necessita apenas do
controle de seus associados, mas também de seus colaboradores, bens e serviços
oferecidos.
Sem o intuito de divulgar o local onde foi realizado o trabalho, este será
tratado apenas como “Associação de Classe”. Esta congrega pessoas e interesses
de uma classe de servidores públicos do Estado de Mato Grosso e está sediada em
Cuiabá/MT. Coloca a disposição de seus associados uma ampla área de lazer, hotel
e áreas para eventos privados – área de churrasqueira, salão de festas, campo de
futebol, etc. Para manter em funcionamento toda a estrutura a associação mantém
um grupo de funcionários responsáveis por cuidar da área administrativa,
jardinagem, limpeza e manutenção (serviços gerais). No local também funciona o
sindicato da classe que utiliza o mesmo cadastro de associados mantido pela
associação.
4.2 Descrição da Proposta
Com o intuito de atender as necessidades de controle da Associação de
Classe e cumprir com os objetivos deste trabalho, após o levantamento e análise de
requisitos, foi proposto o desenvolvimento de uma aplicação web que realizasse o
controle dos associados como função principal e dispusesse das seguintes
funcionalidades: controle de fornecedores, cadastro de funcionários(colaboradores),
controle de patrimônio, agenda para uso das áreas privativas, controle das
hospedagens no hotel, agenda de contatos, geração de relatórios em PDF e
possibilidade do sistema enviar mensagens eletrônicas (e-mail) a seus associados.
Além disso a aplicação deve possibilitar o acesso via web (utilizando um navegador)
de modo a não ficar preso a instalação da aplicação nos computadores e
possibilitasse seu acesso externo (fora da sede da associação).
De posse dessas informações, verificou-se a viabilidade do uso Seam
Framework como solução para o desenvolvimento da aplicação requerida. Passo
45
importante, foi a especificaçãos das ferramentas utilizadas, na qual especifica as
características e razões de escolha de cada uma.
Seguindo os passoas para desenvolvimento de software, em especial
orientado a objetivos foi realizado o levantamento de requisitos e em seguida a
elaboração de alguns diagramas da UML como forma de modelar a aplicação e
uniformizar a especificação dos artefatos. Dessa forma, foram selecionados os
Diagramas de Caso de Uso e o Diagrama de Classe para delimitar as
funcionalidades da aplicação, bem como a estrutura e suas relações
respectivamente.
Também, foram descritas as etapas do desenvolvimento com a explicitação
de algumas telas com fito a demonstrar a aplicabilidade do JBoss Seam e suas
interações.
Por fim, foi realizada a análise da aplicação do Seam Framework no
desenvolvimento de um projeto web com vistas a cumprir o objetivo proposto para
este trabalho.
46
5 ESTUDO DE CASO: PROJETO JBOSS SEAM
Este capítulo destina-se a descrever e demonstrar os aspectos relacionados
ao desenvolvimento de um projeto web utilizando o Seam Framework. Para este
feito, o sistema a ser desenvolvido visa atender as necessidade de controle de uma
“Associação de Classe” conforme cenário descrito no capítulo anterior e acatando o
levantamento de requisitos realizado.
5.1 Ferramentas (Tecnologia)
Antes de iniciar o desenvolvimento do projeto foi necessário realizar uma
seleção das ferramentas a serem utilizadas. Tais ferramentas estão focadas na
necessidade do desenvolvimento e produção da aplicação considerando desde o
conteiner web até a IDE de desenvolvimento. A escolha das ferramentas pode
seguir critérios específicos em razão das necessidade e disponibilidade de recursos
da empresa. Neste caso, foram adotadas ferramentas open source como se segue
nos tópicos a seguir.
5.1.1 SERVIDOR DE APLICAÇÃO JBOSS AS
Um dos requisitos da aplicação é que seja acessado via web por meio de um
browser. Com o uso do Seam Framework, a escolha natural de um servidor de
aplicação é pelo JBoss Application Server. Contudo convém esclarecer que seria
possível o uso de qualquer outro conteiner web que suportasse Java EE como
descrito no capítulo 2.
A versão do JBoss AS escolhida foi a 7.1 em razão da compatibilidade com a
versão do JBoss Seam empregada e por suportar o uso das versões mais recentes
dos componentes assessórios.
Figura 14 - JBoss AS 7.1
47
5.1.2 SEAM FRAMEWORK
Este framework foi largamente explorado no capítulo 3 deste trabalho.
Contudo, o Jboss Seam destaca-se por ser um framework para aplicações web
desenvolvido pela JBoss uma divisão da Red Hat, para o desenvolvimento de
aplicações Java EE de maneira fácil, por meio da integração com tecnologias como
JavaServer Faces, Java Persistence API, Enterprise JavaBeans(EJB 3.0), AJAX e o
Gerenciamento de processos de negócio. Como visto, este framework extende o
Java EE possibilitando um desenvolvimento mais consistente, rápido, utilizando os
padrões de projeto já consagrados e permitindo ao desenvolvedor preocupar-se
mais com as regras de negócio.
A versão utilizada foi a 2.3.0.Final em razão de sua melhor aceitação no
mercado comparado com a versão 3.1.0.Final. Outrossim, a versão 2.3.0.Final
mantém a linha do projeto inicial do framework e suporta as versões mais recentes
do JSF (JSF 2.1) e da especificação do JPA (JPA 2).
Figura 15 - JBoss Seam 2.3.0.Final
48
5.1.3 SISTEMA GERENCIADOR DE BANCO DE DADOS POSTGRESQL
O PostgreSQL é um SGBD (Sistema Gerenciador de Banco de Dados)
objeto-relacional de código aberto. É extremamente robusto e confiável, além de ser
extremamente flexível e rico em recursos.
A opção por este SGBD se deu por ser uma solução de nível corporativo, com
funcionalidades sofisticadas, multiplataforma, com performance admirável e
altamente escalável. Além disso, integra-se muito bem com aplicações
desenvolvidas em Java.
A versão utilizada é a 9.1 com a ferramenta de administração PGAdmin III.
Figura 16 - PostgreSql 9.1
5.1.4 ECLIPSE IDE
O Eclipse foi a IDE (Integrated Development Environment) escolhida para
realizar o desenvolvimento da aplicação. Oferece em seu estado mais básico os
recursos mínimos para o desenvolvimento de aplicações. Como ambiente integrado
de desenvolvimento oferece inúmeras facilidades e possibilita o uso extensivo de
plugins que automatizam algumas tarefas de desenvolvimento e gestão de recursos.
Dos plugins utilizados destaca-se o JBoss Tools por apresentar um conjunto
de ferramentas da JBoss especializadas para o desenvolvimento de aplicações web
e corporativas em Java, dentre as quais pode-se citar:
- Hibernate Tools: ferramentas para se trabalhar com o framework ORM
Hibernate;
- Seam Dev Tools: ferramentas para se trabalhar com Seam framework;
49
- Visual Web Tools: editor visual que permite trabalhar com qualquer
tecnologia web, tais como JSF (suporte a Richfaces), Seam, JSP, HTML e outros;
- JBoss Server Manager: ferramentas para gerenciamento do servidor de
aplicações JBoss;
- JSF Tools: ferramentas para desenvolvimento JSF;
- entre outras.
A versão utilizada neste projeto foi o Eclipse Juno SR1.
Figura 17 - IDE Eclipse Juno SR1
5.1.5 IREPORTS E JASPERREPORTS
O framework JasperReports foi a escolha para a produção de relatórios. Esta
ferramenta tem sido largamente utilizada para geração de relatórios em aplicações
Java. O iReports é uma ferramenta visual para a edição de relatórios baseados em
JasperReports. Este conjunto possibilita a geração dos documentos não somente no
formato PDF, mas também RTF, HTML, XML, XLS, etc
A versão utilizada deste conjunto de ferramentas foi a 5.0.1.
Figura 18 - iReport 5.0.1
50
Por fim, convém ressaltar que este conjunto de ferramentas permite o
desenvolvimento de aplicações corporativas em seus mais diversos níveis de
complexidade. O ambiente de desenvolvimento configurado dessa forma possibilita
e atende todas as necessidades da aplicação proposta.
5.2 Levantamento de Requisitos
O levantamento de requisitos foi realizado in loco na Associação de Classe no
dia 19 de abril de 2013 com a participação dos principais stakeholders, a saber o
presidente da associação, o presidente do sindicado e os servidores do setor
administrativo.
Para elicitação dos requisitos foram utilizadas as seguintes técnicas:
a) Levantamento orientado a Ponto de Vista: neste modelo os stakeholder
informaram seu interesse no sistema seguindo seu próprio ponto de vista, os quais
foram utilizados para estruturar e organizar o processo de levantamento e os
próprios requisitos. As seguintes fases foram seguidas:
- Brainstorming
- Estruturação da idéias
- Documentação
b) Etnografia: Com esta técnica foi possível compreender os requisitos
sociais e organizacionais através da inserção do analista no cenário onde o sistema
será utilizado e os requisitos foram levantados.
c) Entrevista: Com a anuência do presidente da associação foram realizadas
entrevistas com os servidores do setor administravo, que serão os principais
usuários do sistema, para que elicitassem as funcionalidades desejadas e se
concordavam com aquilo que já havia sido proposto por outros colegas.
d) Análise de documentos: Os stakeholders a todo momento apresentaram
documentos e planilhas que realizavam os controles de forma manual. Tais
documentos foram analisados e considerados na elicitação dos requisitos.
Todo este trabalho está consolidado nos apêndices A, B e C, denominados
“Especificação dos requisitos funcionais”, “Especificação dos requisitos nãofuncionais” e “Regras de Negócio”, respectivamente.
Concluido os documentos foram submetidos a apreciação dos stakeholders
na pessoa do presidente da associação. No dia 22 de abril de 2013, o documento foi
revisado, realizado alguns ajustes e finalizado.
51
5.3 Modelagem do Sistema
A modelagem de um software é a atividade de construir modelos que
expliquem as características ou o comportamento de um software. Para isso podem
ser usados modelos gráficos na identificação das características e funcionalidades
que o software deverá prover (análise de requisitos), e no planejamento de sua
construção.
NOGUEIRA(2009) bem explica a utilização da modelagem na análise de
requisitos:
O princípio básico da análise de requisitos é identificar
e documentar o que é realmente necessário, desta
forma comunicando a todos os envolvidos no projeto da
forma mais clara possível, de maneira não-ambígua de
modo que os riscos sejam identificados sem correr riscos
de imprevistos (Nogueira,2013). (Grifo nosso)
Segundo a IEEE (1990), a análise de requisitos é um processo que envolve o
estudo das necessidades do usuário para se encontrar uma definição correta
ou completa do sistema ou requisito de software.
Estes modelos gráficos que simbolizam os artefatos dos componentes de
software utilizados e os seus interrelacionamentos servirão justamente para
encontrar, identificar e documentar tais requisitos. A modelagem de programas
orientados a objeto normalmente usa a linguagem gráfica UML.
Através do desenvolvimento dos diagramas de Caso de Uso e do diagrama
de Classe da UML foram delimitadas as funcionalidades, a estrutura e as relações
dos componentes da aplicação proposta.
5.3.1 DIAGRAMA DE CASO DE USO
O diagrama de caso de uso define as funcionalidades propostas para sistema
baseado no levantamento de requisitos.
No apêndice D está disposto o diagrama de caso de uso proposto para a
Associação de Classe.
No apêndice E estão as especificações do caso de uso nas quais encontramse os cenários principais e alternativos de cada funcionalidade.
5.3.2 DIAGRAMA DE CLASSE
O diagrama de classe exibe de forma estática a estrutura e relação entre as
classes. O diagrama de classe extraído a partir da análise das funcionalidades
requeridas está disposto no apêndice F.
52
5.4 Implementação
A implementação do projeto foi realizada utilizando o Eclipse IDE com plugin
JBoss Tools em razão das facilidades que oferece, permitindo, assim, maior
produtividade. A utilização deste plugin também facilita o uso do JBoss AS,
agilizando as tarefas de Build e Deploy nesta fase de desenvolvimento.
O JBoss Seam também disponibiliza em seu framework a ferramenta SeamGen que realiza todas estas tarefas de modo simplificado e permite a criação de
templates automatizados, configuração do web.xml e demais configurações
necessárias.
Com o ambiente configurado foi criado um novo projeto utilizando o plugin
JBoss Tools através da opção: New Seam Web Project como se observa na figura a
abaixo.
Figura 19 - Criação de Seam Web Project com o plugin JBoss Tools
Com isso, o Eclipse IDE cria a estrutura básica de diretórios já incluindo as
bibliotecas necessárias, conforme figura a seguir.
53
Figura 20 - Estrutura de pacotes
Neste projeto optou-se pelo uso de componentes Seam puros ao invés do
uso de EJB 3. Isso permite que a aplicação seja empacotada em um arquivo .war,
porém requer o uso de um conteiner Java EE completo mesmo não utilizando EJB
em razão de outras funcionalidades como o JTA.
Neste projeto também é feito uso extensivo de um serviço central para todas
as ações de persistência, o EntityManager. Este ficará responsável pelo
mapeamento objeto-relacional e proverá as API’s necessárias para consultas,
sincronização, insersão, atualização e exclusão de objetos no banco de dados. O
EntityManager se integra ao JTA no controle das transações. Para tanto, o
EntityManager utiliza o arquivo persistence.xml para definir as unidades de
persistências e a forma pela qual se conectará ao banco de dados.
Outro arquivo de configuração muito poderoso na arquitetura Seam é o
components.xml, pois ele permite a configuração de componentes que devem ser
inicializados automaticamente sem a necessidade de serem anotados com a
anotação @Name. Neste projeto é necessário que EntityManager seja um
componente automaticamente inicializado para que possa ser utilizado pelos
backing beans e demais componentes. Assim o components.xml deve conter a
seguinte entrada:
54
<persistence:managed-persistence-context
name="entityManager" auto-create="true" persistence-unit-jndi
name="java:/amdepolEntityManagerFactory"/>
<persistence:entity-manager-factory name="entityManagerFactory"
persistence-unit-name="amdepol" installed="false"/>
Dessa forma é possível injetar o componente entityManager utilizando a
anotação @In.
Uma vez compreendido a razão e a configuração destes arquivos é possível
dar início a codificação das classes.
O trabalho agora é a implementação dos Entity Beans. Aspecto importante a
ser destacado neste ponto é que as classes são anotadas com a anotação @Entity
o qual define o POJO como um Entity Bean. A anotação do JBoss Seam @Name
deve também ser acrescentada para que esta classe se transforme em um
componente Seam e permita o vínculo automático com componentes JSF. Convém
ressaltar que a anotação @Name não é completamente automática. Para que o Seam
processe essas anotações é preciso incluir um arquivo seam.properties (vazio,
conforme o caso) na raiz do projeto. Dessa forma, o Seam irá varrer o projeto em
busca desses componentes.
Os Entity Beans foram criados conforme especificação contida no diagrama
de classe do apêndice F. Abaixo segue um trecho de código da classe Pessoa.java.
O código completo podem ser visto no apêndice H que contém todo código fonte da
aplicação.
@Entity
@Table(name="PESSOA",
uniqueConstraints=@UniqueConstraint(columnNames="PES_NOME"))
@Name("pessoa")
@Inheritance(strategy=InheritanceType.JOINED)
@SequenceGenerator(name="SEQ_ID_PESSOA",
sequenceName="SEQ_ID_PESSOA", allocationSize=1, initialValue=1)
public class Pessoa implements Serializable{
...
}
Depois de criadas todas as Entity Beans, o passo seguinte é a criação dos
componentes de negócio. O próprio Seam se responsabiliza em integrar estes
componentes com a camada de visão (JSF). O interessante é que este componente
pode ser puramente Seam ou também um Session Bean EJB 3, que não é o caso.
Estes componentes nada mais são que Managed Beans e Backing Beans,
contudo, é necessário que estas classes trabalhem dentro de um contexto. O JSF
dispõe de recursos limitados neste sentido, ao passo que o Seam extende suas
possibilidades quando acrescenta dois conceitos extremamente importantes à
solução: o contexto de conversação e a Bijeção.
55
Pode-se considerar que o cadastro, edição ou exclusão de um associado é
uma conversação. Isto porque para realização dessas ações necessita-se de um
escopo menor que a sessão e maior que um simples evento. Para tanto, o Seam
possibilita o uso da anotação @Scope(ScopeType.CONVERSATION)para definir o
escopo de conversação. É Importante destacar as anotações @Begin e @End,
responsáveis pelo início e fim da conversação, respectivamente.
Estas funcionalidades do Seam foram amplamente utilizadas no projeto como
se vê no trecho de código da classe AssociadoAction.java.
@Name("associadoAction")
@Scope(ScopeType.CONVERSATION)
public class AssociadoAction{
...
@Begin(join=true)
public String novo(){
setAssociado(new Associado());
return ("editarAssociado");
}
@End
public String salvar(){
try{
associado = entityManager.merge(associado);
entityManager.flush();
facesMessages.add("#{messages.salvaSucesso}");
return "mostrarAssociado";
}catch (PersistenceException e) {
facesMessages.add("#{messages.duplicidade}");
return null;
}
}
...
}
Utilizando a anotação @Scope(ScopeType.CONVERSATION fica definido
qual o escopo do componente. Ao ser acionado o método public String novo()
a conversação é inicada e ao clicar em public String salvar()é encerrada.
Não são somente estas anotações que tem poderes para iniciar e finalizar
uma conversação. O Seam também dispõe de outros componentes com a mesma
possibilidade, porém serão exemplificados mais a frente.
A bijeção também é outro ponto forte do Seam, pois possibilita atualizações
dinâmicas de um componente. Quando foram criados os Entity Bean, estes foram
anotados com a anotação @Name, o que os transformou em componentes Seam.
Com isso, agora é possível aplicar o conceito da bijeção, mantendo o componente
sempre atualizado e possibilitando o acesso pela página JSF diretamente mapeando
o Entity Bean, não sendo mais necessária sua instância no Managed Bean como
acontece no JSF puro.
56
Possibilita ainda, que outros componente que estejam disponíveis sejam
injetados na instância da classe simplesmente utilizando a anotação @In, como se
vê na injeção do componente EntityManager e FacesMessages.
@Name("associadoAction")
@Scope(ScopeType.CONVERSATION)
public class AssociadoAction{
public AssociadoAction() {
}
@In
private EntityManager entityManager;
@In(required=false)
private EnderecoList enderecoList;
@In
private FacesMessages facesMessages;
@In(required=false, create=true)
@Out(required=false)
private Associado associado;
...
}
Na definição do atributo associado foi utilizado o conceito da bijeção, o qual
possibilita que o componente Seam “associado" esteja sempre atualizado, mesmo
que tenha sido alterado por outra classe ou mesmo esta classe promova a alteração.
Para tratar e controlar valores clicáveis apresentados em componentes do
tipo
dataTable
o
Seam
dispõe
das
anotações
@DataModel
e
@DataModelSelection que podem ser utilizadas em List, Map, Set ou Object[].
Um List anotado com @DataModel funciona com o mesmo princípio da
bijeção, possibilitando que o valor clicado quando exibido em um dataTable seja
injetado por um objeto anotado com @DataModelSelection, como no exemplo
extraído da classe AssociadoAction.java.
@DataModel
private List<Associado> associados;
@DataModelSelection
private Associado associadoSelecionado;
Figure 21 - componente dataList
57
A criação das páginas JSF segue o mesmo padrão das aplicações JSF com
destaque ao uso de componentes específicos do Seam Framework, Richfaces e
Facelets.
Nesta aplicação foi utilizado o template padrão gerado pelo Seam-Gen
utilizando facelets e aplicadas as adaptações necessárias. Estas páginas já vem
com o namespace correspondente configurado como se vê abaixo:
<!DOCTYPE
composition
PUBLIC
"-//W3C//DTD
XHTML
Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:s="http://jboss.org/schema/seam/taglib"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
template="/layout/template.xhtml" >
<ui:define name="body">
...
1.0
A partir da daí é possível o uso dos diversos recurso que os frameworks
disponibilizam, como nos trechos de código abaixo da página Associado.xhtml:
<h:outputLabel value="Data de Nascimento:" />
<h:column >
<rich:calendar id="dt_nascimento" showWeeksBar="false"
value="#{associado.dtNascimento}" locale="pt_BR" popup="true"
datePattern="dd/MM/yyyy" enableManualInput="true"
inputClass="maskDate" inputSize="20"/>
<rich:jQuery id="mskDataN" selector=".rf-cal-inp" timing="domready"
query="mask('99/99/9999',{placeholder:'_'})" />
</h:column>
<h:message for="dt_nascimento" errorClass="errors"/>
No exemplo acima foi utilizado o componente <rich:calendar> do
RichFaces para criação do campo Data de Nascimento e do componente
<rich:jQuery> para invocar a biblioteca do jQuery para formatação do campo.
Figure 22 - Componente rich:calendar
58
<h:outputLabel value="Sexo:" />
<h:selectOneRadio id="sexo" value="#{associado.sexo}"
required="true">
<f:selectItems value="#{comboSexo}" var="sex"
label="#{sex.descricao}"/>
<s:convertEnum />
</h:selectOneRadio>
<h:message for="sexo" errorClass="errors"/>
No trecho acima uma tag Seam foi utilizada junto com o componente
<h:selectOneRadio> com a finalidade de invocar um converter do Seam
Framework, poupando o programador da implementação de um converter que o
caso requer.
Figure 23 – Componente usando s:convertEnun
<rich:list id="listDocumentos" var="doc"
value="#{associado.documentos}" >
<a4j:commandLink onclick="return confirm('Confirma?');”
action="#{associadoAction.remDocumento(doc)}
render="listDocumentos" immediate="true">
<h:graphicImage value="/img/limpar.png"/>
</a4j:commandLink>
<h:outputText
<h:outputText
<h:outputText
<h:outputText
value="#{doc.tipoDocumento.descricao}"/>
value="#{doc.numero}"/>
value="#{doc.orgaoEmissor}" />
value="#{doc.uf.sigla}"
rendered="#{not empty doc.uf.sigla}"
/>
</rich:list>
Nesse trecho obseva-se o uso de recursos Ajax da biblioteca do RichFaces,
na qual uma lista de valores é exibida. Um link com uma imagem possibilita a
exclusão de valores da lista e atualização automática da lista. Isto acontece por meio
de chamadas Ajax sem o reload da página.
Figure 24 – Componente a4j:commandLink
Ao longo do projeto foram inúmeros os usos de tags oriundas das bibliotecas
do Seam e do RichFaces. Abaixo um último exemplo que permite a finalização do
escopo de conversação através de um link.
59
<s:link id="menuAssociado" action="manterAssociado" value="PESSOAS"
rendered="#{identity.loggedIn}" propagation="none" style="textdecoration: none; color:black"/>
Este código foi utilizado no arquivo menu.xhtml e exemplifica, mais uma vez,
o uso de uma tag Seam, no caso para criação de um link. O componente
<s:link>, assim como o <s:button>, tem a possibilidade de encerrar, iniciar ou
juntar conversações. No caso em pauta está impedindo a propagação da
conversação findando-a. Consequentemente, a partir deste momento nenhum
componente disponível na conversação poderá ser mais utilizado.
Figure 25 - Menu
A navegação entre as páginas no JBoss Seam fica por conta do arquivo
pages.xml que recebe o retorno dos métodos de ação contidos nos managed beans.
Este mesmo trabalho é realizado pelo faces-config.xml no JSF, contudo o Seam
dispõe de recursos mais avançados.
Um trecho do pages.xml pode ser visto abaixo gerenciando a navegação da
página Associado.xhtml.
<page login-required="true" view-id="/Associado/Associado.xhtml">
<action execute="#{redirect.captureCurrentView()}"/>
<navigation>
<rule if-outcome="manterAssociado">
<redirect view-id="/Associado/ManterAssociado.xhtml"/>
</rule>
<rule if-outcome="mostrarAssociado">
<redirect view-id="/Associado/AssociadoView.xhtml"/>
</rule>
</navigation>
</page>
Neste mesmo arquivo o Seam é capaz de fazer o tratamento de exceções,
como destacado no código abaixo:
<exception class="org.jboss.seam.framework.EntityNotFoundException">
<redirect view-id="/error.xhtml">
<message severity="warn">Registro não encontrado</message>
</redirect>
</exception>
<exception class="javax.persistence.EntityNotFoundException">
<redirect view-id="/error.xhtml">
<message severity="warn">Registro não encontrado</message>
</redirect>
</exception>
<exception class="javax.persistence.EntityExistsException">
<redirect view-id="/error.xhtml">
<message severity="warn">Registro duplicado</message>
</redirect>
</exception>
60
Pode-se dizer que estes são recursos chaves do Seam Framework, que faz
com que ele se destaque dos demais frameworks para desenvolvimento web. Porém
não esgota suas possibilidades. Os exemplos se repetem inúmeras vezes na
aplicação para associação de classe. Não convém aqui ficar replicando código, pois
dessa forma o texto ficaria muito extenso.
No apêndice H é possível observar o código fonte da aplicação com inúmeros
pontos onde os conceitos do Seam Framework foram aplicados.
5.5 Avaliação e discussão
Após conhecer as possibilidades do Seam Framework fica evidente que a
produtividade no desenvolvimento vai aumentar, primeiramente porque o conceito
inicial do Seam Framework é de simplificar a tarefa do programador. Durate a
implementação da aplicação para a associação de classe foi possível perceber que
com o JBoss Seam muitas tarefas foram simplificadas comparadas com outras
ferramentas produtivas como o próprio JavaServer Faces.
O JBoss Seam já trás no framework uma série de conversores
implementados, como é o caso do s:convertEntity e do s:convertEnun que
de outra sorte deveria ser implementado.
A boa integração com o JPA através do EntityManager e JTA e os conceitos
oriundos da implentação dos EntityBeans possibilitaram a criação da camada de
persistência de forma muito rápida. Além disso, as operações de insersão, edição,
exclusão e consulta de dados ficou simplificada e flexível.
Com a integração com o RichFaces o desenvolvimento de interfaces ricas
ficou simples, visto que além dos componentes já existentes no JSF, o framework
acrescentou componentes outrora vistos somente em aplicações desktop. Tudo isso
sem contar dos demais componentes visuais do Seam que possibilitaram integração
diretamente com a camada de negócio.
Todos estes conceitos foram possíveis de serem aplicados e trouxeram um
ganho muito grande no desenvolvimento da aplicação, pois foi possível preocuparse de fato com as regras de negócio ao invés da implementação de componentes de
baixo nível.
Ainda avaliando o uso do Seam, na versão 2.3.0.Final do JBoss Seam
utilizando JSF 2.0 e JPA 2 as requisições Ajax são nativas e isto possibilitou ainda
mais performance nas aplicações, sem dizer que o JBoss AS 7.1 também evoluiu
bastante em relação as versões anteriores de forma a carregar os serviços sob
demanda e iniciar os serviços em pouco mais de 5 segundos.
Por fim, a integração do JBoss Seam com as demais tecnologias se efetivou
de forma muito simples, sem muitas configurações de ambiente e trouxe um
resultado que pode ser dizer muito positivo em termos de produtividade no
desenvolvimento, consistência na gerência dos dados, transações e performance
nas operações. Tudo isso de modo a atender todos os requisitos não funcionais
discriminados na fase de projeto.
61
6 CONCLUSÃO
Em um mundo em que quase todas as informações estão disponíveis na web
não seria diferente se as aplicações corporativas também estivessem. Ao longo
deste trabalho foram abordados aspectos relacionados ao desenvolvimento de uma
aplicação para web – um projeto web com vistas a realizar uma apresentação e um
estudo sobre o Seam Framework.
O JBoss Seam é oriundo da plataforma Java EE que tem suas origens no
J2EE, quando ainda as aplicações web eram desenvolvidas puramente utilizando
servlets. Razão pela qual no primeiro capítulo de conteúdo foi realizada uma revisão
teórica sobre a plataforma Java EE, seus componentes e tecnologias envolvidas.
Conhecendo o Java EE é possível perceber que não existe coesão nas
soluções empregadas para o desenvolvimento de uma aplicação web java, razão
pela qual o programador precisa deter conhecimento sobre várias tecnologias além
de implementar muito código da camada de negócio.
Deste fato, surge o Seam Framework em um momento em que se
despontavam outras soluções para desenvolvimento web mais atrativas do que
usando Java EE (2005). O Seam veio promover uma arquitetura unificada de
componentes utilizando o que tem de melhor no Java EE e agregando
funcionalidades. Por isso, ele é um framework Java EE.
Conhecer o Java EE permitiu, então, compreender a frase que diz que o
“JBoss Seam extende o Java EE”, pois no capítulo seguinte a abordagem sobre o
Seam deixou claro a insersão de pontos chave deste novo framework: a injeção de
dependência (bijeção), novos contextos (escopos), melhor controle da
navegabilidade entre páginas, novos componentes para desenvolvimento de
interfaces, etc.
Com isso o Seam promoveu a integração da camada de negócio com a de
visão permitindo o desenvolvimento centrado no domínio de negócio, permitindo
ainda outras tecnologias serem utilizadas na camada de apresentação (Richfaces,
Primefaces, etc). Implementou um modelo unificado de componentes, onde não há
distinção entre componentes da camada de apresentação e da camada de negócios,
suporte nativo a Ajax sem a necessidade de codificação de javaScript.
Para compreender como tudo isso funciona foi implementado um projeto web
denominado Aplicação Associação de Classe com a finalidade de demonstrar a
aplicabilidade do Seam Framework e seus benefícios no desenvolvimento web.
Inicialmente, foi realizada algumas tarefas da parte de projeto como o levantamento
e análise de requisitos utilizando alguns diagramas da UML e em seguinda a
apresentação das fases da implementação, com destaque aos pontos de uso do
JBoss Seam.
A implementação do projeto web permitiu constatar os benefícios do
desenvolvimento web utilizando o Seam Framework, visto que promove o uso de
arquiteturas simples removendo camadas desnecessárias ao se utilizar
componentes textuais. Percebeu-se ainda que o Seam unifica as API’s tornando-as
mais acessíveis, funcionais e atrativas, além e prover novas funcionalidades como o
contexto de conversação, bijeção, gerenciamento de exceções, mecanismos de
logs, mensagens, etc.
62
Por fim, é possível afirmar que o Seam Framework atualmente constitui uma
excelente ferramenta para desenvolvimento web, unido inúmeros recursos, novos e
outros já conhecidos, com performance, segurança e produtividade, sendo
extremante viável seu emprego em qualquer projeto web.
Neste trabalho foram abrangidos apenas algumas funcionalidades do Seam
Framework. Em estudos futuros é aconselhável outras abordagens ao tema como o
uso de jBPM visto que este combina a facilidade de desenvolvimento de aplicações
web, aqui abordadas, com fluxos de trabalho, fluxos de processos corporativos em
um mecanismo de processo flexível e escalável. Além, também, de enfatizar o
desenvolvimento utilizando EJB 3, visto que inicialmente o Seam veio para integrar
JSF com EJB 3.
63
7 REFERÊNCIAS BIBLIOGRÁFICAS
ALLEN, Dan. Seam in Action. MEAP Edition. Manning Early Access Program, 2008.
BOND,Martin; HAYWOOD, Dan; LAW, Debbie; LONGSHAW, Andy; ROXBURGH,
Peter. Aprenda J2EE em 21 dias com EJB, JSP, Servlets, JNDI, JDBC e XML.
São Paulo: Pearson Education do Brasil, 2003.
FARLEY, Jim. Projetos Práticos com Jboss Seam. Rio de Janeiro: Editora Ciência
Moderna Ltda., 2008.
GREARY, David; HORSTMANN, Cay. Core JavaServer Faces Fundamentos. 2ª
Edição. Rio de Janeiro: Alta Books, 2007.
GUPTA, Arun. Java EE 6 – Pocket Guide. 1ª Edition. USA: O’Reilly Media, Inc.,
2012.
IEEE – Instituteof Eletricaland Eletronics Engineers. Standards Glossary of
Software Engineering Terminology: Std 610.12, N.Y.,1990. 84p.
K19 Treinamentos. Desenvolvimento Web com JSF2 e JPA2. São Paulo, 2012.
NOGUEIRA, Admilson. UML - Unified Modeling Language - Requisitos, Classes
e Objetos. Disponível em <http://www.linhadecodigo.com.br/artigo/776/uml-unifiedmodeling-language-requisitos-classes-e-objetos.aspx>. Acesso em 03 de junho de
2013.
OLIVEIRA, Eric C. M. Conhecendo a Plataforma J2EE – Um Breve Overview.
Disponível
em
<http://www.linhadecodigo.com.br/artigo/333/conhecendo-aplataforma-j2ee-um-breve-overview.aspx>. Acesso em 15 de maio de 2013.
ORACLE. The Java EE 6 Tutorial. Redwookd CA USA, 2013. Disponível em <Fonte:
http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabj>. Acesso em 27 de
maio de 2013.
ORSHALICK, Jacob. SeamUI.
Disponível em <http://refcardz.dzone.com/refcardz/seam-ui>. Acesso em 01 de
junho de 2013.
PACHECO, Juliano. Entendendo os Escopos no JSF (JavaServer Faces) – 2013.
Disponível
em
<http://www.pletax.com/2013/02/entendendo-os-escopos-no-jsfjavaserver-faces/>. Acesso em 15 de maio de 2013.
PITANGA, Talita. JavaServer Faces: A mais nova tecnologia Java para
desenvolvimento WEB.
64
Disponível em <http://www.guj.com.br/content/articles/jsf/jsf.pdf>. Acesso em 15 de
maio de 2013.
PRADO, Alexandro do Anjos. JEE – Um Caminho Prazeroso e Interessante.
Disponível
em
<http://www.devmedia.com.br/jee-um-caminho-prazeroso-einteressante/3747>. Acesso em 15 de maio de 2013.
PRATO, Benjamin. A la découverte de Java EE 7 – 2013. Disponível em
<http://marseille.labo-java.net/2013/02/18/a-la-decouverte-de-java-ee-7/>.
Acesso
em 15 de maio de 2013.
RAHMAN,
Reza.
Java
EE
Overview
–
2009.
Disponível
em
<http://www.theserverside.com/news/1363662/Java-EE-6-Overview>. Acesso em 15
de maio de 2013.
RICHFACES. The Next-Generation JSF Component Framework by JBoss.
Disponível em <http://www.jboss.org/richfaces>. Acesso em 01 de junho de 2013.
SALTER, David. Seam 2.x Web Development - Build Robust Web Applications
with Seam, Facelets, and RichFaces, using the JBoss Application Server.
Olton-UK: Packt Publishing Ltd., 2009.
SANTANA, Otávio Gonçalves de. Introdução Java EE 6. Disponível em
<http://www.devmedia.com.br/introducao-java-ee-6/21364>. Acesso em 15 de maio
de 2013.
SPOCK. Sobre os contextos do JBoss Seam – 2008. Disponível em
<http://blog.spock.com.br/2008/07/sobre-os-contextos-do-jboss-seam.html>. Acesso
em 20 de maio de 2013.
STORI, Daniel Augusto. Uma Breve História dos Patterns (JEE) – 2010.
Disponível em <http://coliriodamente.wordpress.com/2010/09/02/uma-breve-historiados-patterns-jee/>. Acesso em 15 de maio de 2013.
TARANTULA CONSULTING. RichFaces Tag Reference. Disponível em
<http://www.jsftoolbox.com/documentation/richfaces/09-TagReference/index.jsf>.
Acesso em 08 de junho de 2013.
VINICIUS, Samuel. Conheça o ciclo de vida do JSF – 2013. Disponível em
<http://imasters.com.br/linguagens/java/conheca-o-ciclo-fe-vida-do-jsf/>. Acesso em
13 de maio de 2013.
APÊNDICE A
ESPECIFICAÇÃO DE REQUISITOS FUNCIONAIS
ASSOCIAÇÃO DE CLASSE
Versão: 1.0
Data: 19/04/2013
LRF01
Histórico da Revisão
Data
Versão
Descrição
Autor
19/04/2013
1.0
Levantamento de requisitos in
RICARDO R BARCELAR
loco na sede da Associação
22/04/2013
1.1
Revisão pelo stakeholder
1.
RICARDO R BARCELAR
Introdução
Considerando a necessidade de levantar os requisitos funcionais da aplicação
web foi realizada uma visita à sede da associação de classe no dia 19 de abril de
2013.
Inicialmente foi realizada uma apresentação pelo presidente da associação o
qual explicou o que era a “Associação de Classe”: Esta congrega pessoas e
interesses de uma classe de servidores públicos do Estado de Mato Grosso e está
sediada em Cuiabá/MT. Coloca a disposição de seus associados uma ampla área
de lazer, hotel e áreas para eventos privados – área de churrasqueira, salão de
festas, campo de futebol, etc. Para manter em funcionamento toda a estrutura a
associação mantém um grupo de funcionários responsáveis por cuidar da área
administrativa, jardinagem, limpeza e manutenção (serviços gerais). No local
também funciona o sindicato da classe que utiliza o mesmo cadastro de associados
mantido pela associação.
Com isso, ficou claro que o domínio de negócio seria uma aplicação web que
realizasse o controle dos associados como função principal e dispusesse das
seguintes
funcionalidades:
controle
de
fornecedores,
cadastro
de
funcionários(colaboradores), controle de patrimônio, agenda para uso das áreas
privativas, controle das hospedagens no hotel, agenda de contatos, geração de
relatórios em PDF e possibilidade do sistema enviar mensagens eletrônicas (e-mail)
a seus associados. Além disso, a aplicação deveria possibilitar o acesso via web
(utilizando um navegador) de modo a não ficar preso a instalação da aplicação nos
computadores e possibilitasse seu acesso externo (fora da sede da associação).
Uma vez definido o domínio do negócio, foram aplicadas as seguintes
técnicas de levantamento de requisitos:
- Levantamento orientado a ponto de vista;
- Etnografia;
- Entrevista; e
- Análise de documentos.
Os stakeholders, presidente da Associação, Presidente do Sindicado e
servidores do setor administrativo da Associação de Classe participaram
efetivamente da elicitação dos requisitos funcionais.
Inicialmente, foi realizada uma reunião na qual os stakeholders informaram
aquilo que entendiam ser importante constar na aplicação através da técnica de
Brainstorming. Isto feito, os requisitos foram organizados e estão populados neste
documento.
Findada a reunião, passou-se a observação da rotina de trabalho através da
inserção no ambiente de trabalhos dos servidores do setor administrativo com fito a
compreender os requisitos sociais e organizacionais da instituição (Etnografia).
Em seguida, algumas entrevistas foram realizadas de forma individual com os
servidores do setor administrativo com o intuito de refinar as idéias e as
necessidades da aplicação com vistas a atender as necessidades de controle dos
serviços oferecidos pela associação. Durante a entrevista foram coletados
formulários que servirão de orientação para criação da base dados, ou seja, os
dados a serem manipulados.
1.1
Objetivo
Elicitar os requisitos funcionais de uma aplicação web para a Associação de
Classe.
1.2
Público Alvo
- Analista de sistema responsável pelo desenvolvimento
- Stakeholders
1.3
Referências
- Ficha de cadastro dos associados
- Ficha de cadastro de funcionários
- Ficha de controle de hospedagem
- Livro de patrimônio
- Planilha contendo relação de fornecedores
- Planilha contendo relação de instituições
2.
Requisitos Funcionais
RF_01: Manter cadastro dos associados – Manter uma relação completa dos
associados incluindo nos dados cadastrais endereços, telefones e e-mail’s.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_02: Manter vinculado aos associados seus dependentes – Manter uma
relação de dependentes para aqueles associados que o possuem.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_03: Manter o status do associado – Manter a informação de status do
associado em relação ao seu vínculo com a Associação de Classe e o
Sindicato, assim como em caso de pensionista o vínculo com o associado
falecido.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_04: Manter fotos do associados – Manter armazenado no cadastro do
associado a foto do mesmo.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RF_05: Manter cadastro de fornecedores – Manter um cadastro de
fornecedores que prestam serviços a associação. Neste cadastro deverão
constar os telefones, bem como o nome dos contatos nas empresas.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RF_06: Manter cadastro dos colaboradores – Manter um cadastro com os
dados de todos os colaboradores (servidores) da associação de modo a fazer
constar os documentos pessoais, função e horário de trabalho.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_08: Manter controle de hospedagens no hotel – Manter um controle das
pessoas (normalmente associados) hospedados no hotel de trânsito da
associação. Neste controle deverão constar os dados do hóspede e seus
acompanhantes, bem como informação de maioridade com o respectivo
documento de identificação. Deverá, ainda, ser possível realizar
agendamentos de apartamentos para datas futuras.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_09: Manter cadastro de outras instituições de classe – Manter um
cadastro de outras instituições de classe, bem como de instituições parceiras
de interesse. Neste cadastro deverão constar endereço, telefone para contato
e os dados dos respectivos representantes.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_10: Manter o controle do patrimônio – Manter um controle de todos bens
permanentes da associação com a qualificação completa do material, estado
de conservação, distribuição e atribuição de um identificador único e numérico
a ser denominado de “Número de Patrimônio”.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RF_11: Enviar e-mail – O sistema deverá possibilitar o envio de e-mail em
massa para os associados cadastrados no sistema. Para tanto, o sistema
deve possibilitar a seleção do conjunto de destinatários filtrando-os por
aposentados, ativos, pensionistas, etc.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RF_12: Enviar SMS – O sistema deve possibilitar o envio de SMS em massa
para os associados cadastrados no sistema. Para tanto, o sistema deve
possibilitar a seleção do conjunto de destinatários filtrando-os por
aposentados, ativos, pensionistas, etc. Deve permitir ainda o agendamento de
mensagens para datas especiais, como por exemplo, o aniversário do
associado.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[ ] Importante [X] Desejável
RF_13: Manter Agenda – Manter uma agenda que possibilite o controle dos
compromissos da associação, bem como as reservas de espaços privados
dentro do clube, tais como campo de futebol, áreas de churrasqueira e salão
de festas.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RF_14: Emissão de relatórios – O sistema deve possibilitar a emissão de
relatórios, em especial com referência a situação dos associados e dados das
funcionalidades: Agenda, Servidores, hospedagem, patrimônio, etc.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RF_15: Emissão de etiquetas de endereçamento – O sistema deve
possibilitar a emissão de etiquetas do tipo PIMACO para endereçamento de
envelopes. Deverão ser contemplados dois tipos de endereçamento: um com
o endereço residencial do associado e outro com o endereço funcional (do
local de trabalho).
3.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[ ] Importante [X] Desejável
Definições, acrônimos e abreviações
Prioridade dos requisitos:
•
Essencial: indica que o requisito é imprescindível para o funcionamento
do sistema. Requisitos essenciais devem ser implementados desde as
primeiras iterações do desenvolvimento construção do sistema.
Importante: indica que o requisito não é essencial para o
funcionamento do sistema, contudo seu funcionamento, sem
implementação do requisito, se torna insatisfatório. Requisitos
importantes devem ser implantados o mais rápido possível, porém não
impede que apenas parte do sistema seja implantada.
• Desejável: indica que o requisito não compromete as funcionalidades
básicas do sistema, podendo funcionar de forma satisfatória sem ele.
Requisitos desejáveis podem ser implantados por último, sem
comprometer o funcionamento do sistema.
•
APÊNDICE B
ESPECIFICAÇÃO DE REQUISITOS NÃO-FUNCIONAIS
ASSOCIAÇÃO DE CLASSE
Versão: 1.0
Data: 19/04/2013
LRNF01
Histórico da Revisão
Data
Versão
Descrição
Autor
19/04/2013
1.0
Levantamento de requisitos in
RICARDO R BARCELAR
loco na sede da Associação
22/04/2013
1.1
Revisão pelo stakeholder
1.
RICARDO R BARCELAR
Introdução
Considerando a necessidade de levantar os requisitos não-funcionais da
aplicação web foi realizada uma visita à sede da associação de classe no dia 19 de
abril de 2013.
Inicialmente foi realizada uma apresentação pelo presidente da associação o
qual explicou o que era a “Associação de Classe”: Esta congrega pessoas e
interesses de uma classe de servidores públicos do Estado de Mato Grosso e está
sediada em Cuiabá/MT. Coloca a disposição de seus associados uma ampla área
de lazer, hotel e áreas para eventos privados – área de churrasqueira, salão de
festas, campo de futebol, etc. Para manter em funcionamento toda a estrutura a
associação mantém um grupo de funcionários responsáveis por cuidar da área
administrativa, jardinagem, limpeza e manutenção (serviços gerais). No local
também funciona o sindicato da classe que utiliza o mesmo cadastro de associados
mantido pela associação.
Com isso, ficou claro que o domínio de negócio seria uma aplicação web que
realizasse o controle dos associados como função principal e dispusesse das
seguintes
funcionalidades:
controle
de
fornecedores,
cadastro
de
funcionários(colaboradores), controle de patrimônio, agenda para uso das áreas
privativas, controle das hospedagens no hotel, agenda de contatos, geração de
relatórios em PDF e possibilidade do sistema enviar mensagens eletrônicas (e-mail)
a seus associados. Além disso, a aplicação deveria possibilitar o acesso via web
(utilizando um navegador) de modo a não ficar preso a instalação da aplicação nos
computadores e possibilitasse seu acesso externo (fora da sede da associação).
Uma vez definido o domínio do negócio, foram aplicadas as seguintes
técnicas de levantamento de requisitos:
- Levantamento orientado a ponto de vista;
- Etnografia;
- Entrevista; e
- Análise de documentos.
Os stakeholders, presidente da Associação, Presidente do Sindicado e
servidores do setor administrativo da Associação de Classe participaram
efetivamente da elicitação dos requisitos não-funcionais.
Inicialmente, foi realizada uma reunião na qual os stakeholders informaram
aquilo que entendiam ser importante em termos de qualidade, confiabilidade,
portabilidade, segurança e utilidade. Isto feito, os requisitos foram organizados e
estão populados neste documento.
Findada a reunião, passou-se a observação da rotina de trabalho através da
inserção no ambiente de trabalhos dos servidores do setor administrativo com fito a
compreender as rotinas, os requisitos de segurança e aquilo que proporcionasse
maior ergonomia na utilização do software.
Em seguida, algumas entrevistas foram realizadas de forma individual com os
servidores do setor administrativo com o intuito de refinar as idéias e os requisitos da
aplicação com vistas a atender as necessidades de acesso, plataformas, locais de
acesso, bem como conhecer o nível de habilidade de uso de sistemas
computacionais por parte dos entrevistados.
1.1
Objetivos
Elicitar os requisitos não-funcionais de uma aplicação web para a Associação
de Classe.
1.2
Público Alvo
- Analista de sistema responsável pelo desenvolvimento
- Stakeholders
1.3
Referências
- Estatuto da Associação de Classe
2.
Requisitos Não-Funcionais
RNF_01: Mensagens amigáveis – O sistema deverá emitir mensagens
amigáveis em caso de uma ação incorreta ou não permitida por parte do
usuário, de forma a permitir a fácil compreensão por qualquer pessoa, assim
como a indicação das possibilidades de ação.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RNF_02: Acesso em múltiplas plataformas – O sistema deverá ser acessível
em qualquer tipo de sistema operacional. Foi relatado pelos stakeholders que
há a necessidade de acesso a aplicação de diferentes tipos de sistemas
operacionais e equipamentos. Isto se justifica pelo fato do presidente utilizar
computador com sistema operacionais IOS (Apple), a administração utilizar
plataforma Microsoft e não haver interesse na aquisição de licença para
servidores, que no caso utilizam Sistema Operacional Linux.
•
Fonte da Informação: Stakeholders
•
Prioridade: [X] Essencial
[ ] Importante [ ] Desejável
RNF_03: Acesso por dispositivos móveis – O sistema deverá ser acessível
em dispositivos móveis como tablets e smartphones. Isto se justifica pelo fato
da presidência necessitar de acesso aos dados da associação por meio de
seu smartphone em reuniões e eventos externos.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[ ] Importante [X] Desejável
RNF_04: Restrição no acesso não autorizado – O sistema deverá dispor de
mecanismo que filtre os acessos ao sistema somente a pessoas autorizadas
pela administração. Requisitos de segurança como a criptografia da senha
são solicitados. De igual forma algumas funcionalidades deverão ter o acesso
restringido, como por exemplo, o cadastro de novos usuários no sistema..
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RNF_05: Facilidade de uso – O sistema deverá ser ergonômico, intuitivo e
fácil de usar de modo a permitir a fácil adaptação dos usuários, facilidade no
acesso as informações e que possua o mesmo mecanismo de acesso para
todas as funcionalidades.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[X] Importante [ ] Desejável
RNF_06: Cor predominante Azul – O sistema deve ter em seu design a cor
predominante azul, de modo a dar uma identidade visual com a cor da
Associação.
3.
•
Fonte da Informação: Stakeholders
•
Prioridade: [ ] Essencial
[ ] Importante [X] Desejável
Definições, acrônimos e abreviações
Prioridade dos requisitos:
•
Essencial: indica que o requisito é imprescindível para o funcionamento
do sistema. Requisitos essenciais devem ser implementados desde as
primeiras iterações do desenvolvimento construção do sistema.
•
Importante: indica que o requisito não é essencial para o
funcionamento do sistema, contudo seu funcionamento, sem
implementação do requisito, se torna insatisfatório. Requisitos
importantes devem ser implantados o mais rápido possível, porém não
impede que apenas parte do sistema seja implantada.
•
Desejável: indica que o requisito não compromete as funcionalidades
básicas do sistema, podendo funcionar de forma satisfatória sem ele.
Requisitos desejáveis podem ser implantados por último, sem
comprometer o funcionamento do sistema.
APÊNDICE C
REGRAS DE NEGÓCIO
ASSOCIAÇÃO DE CLASSE
Versão: 1.0
Data: 19/04/2013
RN01
Histórico da Revisão
Data
Versão
Descrição
Autor
19/04/2013
1.0
Levantamento de requisitos in
RICARDO R BARCELAR
loco na sede da Associação
22/04/2013
1.1
Revisão pelo stakeholder
1.
RICARDO R BARCELAR
Introdução
Este documento apresenta os requisitos de negócio da aplicação, os
quais foram levantados junto aos stakeholders e a legislação que regula o
funcionamento da associação de classe.
1.1
Objetivos
Explicitar as regras de negócio da aplicação
1.2
Público Alvo
- Analista de sistema responsável pelo desenvolvimento
- Stakeholders
1.3
Referências
- Estatuto da Associação de Classe
2.
Regras de Negócios
RN_01: Critério de Associação – Toda pessoa para se tornar associado
deverá ser funcionário público de carreira da classe a qual a associação
representa. Para tanto no cadastro do associado no sistema deverá ser
obrigatório informação sobre seu cargo e lotação.
RN_02: Critério de Associação de Pensionista – O pensionista para se tornar
associado deverá ter parentesco de 1º grau com o associado falecido e
mesmo estar associado quando do seu falecimento. No cadastro do sistema
deverá constar o vínculo do pensionista com o servidor público associado
enquanto vivo.
RN_03: Dependentes – Para ser dependente do Associado o mesmo deverá
ter parentesco de 1º grau e ter seu cadastro vinculado ao associado. Dessa
forma, poderá gozar dos benefícios de uso das áreas privativas e gozar de
alguns serviços da associação.
RN_04: Associado Benemérito – A critério dos membros da associação
poderão ser dados títulos de associados beneméritos. Tais pessoas quando
agraciadas deverão ser registradas no sistema com a qualificação de
“Associado Benemérito”.
RN_05: Informações Funcionais – Todo associado deverá manter atualizado
junto a administração da associação seus dados funcionais. Para tanto, o
sistema deverá ser capaz de armazenar informações funcionais como
matrícula, lotação, nível na carreira, data de posse e se na situação de
aposentado a data da aposentadoria.
RN_06: Condição de sindicalização – O associado poderá gozar de todos os
serviços e benefícios oferecidos pela associação de classe, mas deverá
também se sindicalizar ou não para que seus direitos sejam defendidos na
pessoa do presidente do sindicato. Dessa forma, o sistema deverá manter a
informação dos associados que são sindicalizados ou não.
RN_07: Uso das áreas privativas – O uso das áreas privativas é restrito
somente aos associados e quando reservados ao seus convidados. Dessa
forma, o sistema deverá restringir a reserva destes locais somente ao
responsável associado.
RN_08: Hospedagem no Hotel de Trânsito – A reserva e uso do hotel é
restrito somente aos associados. Este podem trazer consigo convidados
desde que membros da família devidamente identificados. Dessa forma, o
sistema deverá restringir a reserva de hospedagem somente a associados e
quando estes estiverem acompanhados deverão identificá-los e registrá-los
na reserva com um documento de identidade válido.
RN_09: Controle de Patrimônio – O presidente da associação é o responsável
pelo controle de todos os bens permanentes devendo prestar contas de todo
o acervo quando da passagem de função em razão das eleições. Para tanto,
o sistema deverá manter o controle patrimonial atribuindo um número de
patrimônio a todo bem permanente de forma individualizada permitindo a fácil
identificação e controle do acervo.
APÊNDICE D
DIAGRAMA DE CASO DE USO
APÊNDICE E
ESPECIFICAÇÃO DE CASO DE USO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC001
Logar no Sistema
Usuário para acessar o sistema de dever informar usuário e
senha válidos
ATOR
Usuário
CENÁRIO PRINCIPAL
Sistema permite o acesso
1) Usuário para acessar o sistema deve informar a URL na qual será exibida a tela de login
do sistema.
2) Usuário informa, nos campos correspondentes e previamente cadastrado, seu usuário e
senha.
3) Sistema valida as informações.
4) Sistema concede acesso as funcionalidades.
5) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Sistema rejeita o acesso
1) Usuário para acessar o sistema deve informar a URL na qual será exibida a tela de login
do sistema.
2) Usuário informa, nos campos correspondentes e previamente cadastrado, seu usuário e
senha.
3) Sistema invalida as informações.
4) Sistema emite a mensagem “Login inválido.”
5) Sistema exibe novamente a tela de login.
6) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O nome de usuário (login) deve ser único no sistema.
PRÉ CONDIÇÃO
Usuário deve ser previamente cadastrado no sistema.
PÓS CONDIÇÃO
Usuário acessando o sistema.
NÚMERO
CASO DE USO
DESCRIÇÃO
UC002
Manter Usuário
Caso de uso responsável por manter o cadastro de usuários do
sistema.
ATOR
Admin
CENÁRIO PRINCIPAL
Cadastrar Usuário
1) Admin realiza login e obtém acesso ao sistema.
2) Admin solicita o formulário de cadastro de usuário.
3) Sistema exibe o formulário de cadastro de usuário.
4) Admin informa os dados requeridos, bem como vincula este usuário a um funcionário.
5) Sistema verifica se há duplicidade de login.
6) Sistema exibe os dados para confirmação.
7) Admin confirma o cadastro.
8) Sistema registra o Usuário.
9) Sistema emite a mensagem “Usuário cadastrado com sucesso.”
10) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar Autor (login já existente)
1) Admin realiza login e obtém acesso ao sistema.
2) Admin solicita o formulário de cadastro de usuário.
3) Sistema exibe o formulário de cadastro de usuário.
4) Admin informa os dados requeridos.
5) Sistema verifica se há duplicidade de login.
6) Sistema detecta duplicidade de login.
7) Sistema emite a mensagem “Nome de usuário (login) existente. Informe um login
diferente.”
8) Sistema verifica se há duplicidade de login.
9) Sistema exibe os dados para confirmação.
10) Admin confirma o cadastro.
11) Sistema registra o Usuário.
12) Sistema emite a mensagem “Registro realizado com sucesso.”
13) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar Usuário
1) Admin realiza login e obtém acesso ao sistema.
2) Admin aciona formulário de consulta de Usuários e informa o parâmetro de busca.
3) Sistema busca as informações e exibe o formulário com os dados do Usuário selecionado.
4) Sistema apresenta o resultado da consulta em uma lista.
5) Admin aciona a funcionalidade de edição do usuário.
6) Sistema carregas as informações do usuário selecionado.
7) Admin informa as alterações.
8) Sistema exibe os dados para confirmação.
9) Admin confirma as informações.
10) Sistema registra as alterações.
11) Sistema emite a mensagem “Alteração realizada com sucesso.”
12) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O nome de usuário (login) deve ser único no sistema.
2) Em caso de Edição não é permitido a alteração no nome do usuário (login).
PRÉ CONDIÇÃO
Cadastrado: Não especificado
Edição: Admin deve estar logado no sistema
PÓS CONDIÇÃO
Usuário cadastrado/alterado
NÚMERO
CASO DE USO
DESCRIÇÃO
UC003
Manter Apartamento
Caso de uso responsável por manter
apartamentos disponíveis no hotel.
ATOR
Admin
CENÁRIO PRINCIPAL
Cadastrar Apartamento
1) Admin solicita o formulário de cadastro de apartamento.
2) Sistema exibe o formulário de cadastro de apartamento.
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
o
cadastro
de
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar Apartamento (Apartamento já existente)
1) Admin solicita o formulário de cadastro de apartamento.
2) Sistema exibe o formulário de cadastro de apartamento.
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de apartamento para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar Apartamento
1) Admin aciona formulário de consulta de apartamento e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) apartamento(s) encontrado(s).
3) Admin aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações do apartamento selecionado.
5) Admin informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir Apartamento
1) Admin aciona formulário de consulta de apartamento e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) apartamento(s) encontrado(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do apartamento selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir Apartamento (Violação de Chave Estrangeira)
1) Admin aciona formulário de consulta de apartamento e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) apartamento(s) encontrado(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do apartamento selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Descrição do apartamento deve ser único
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
ATOR
CENÁRIO PRINCIPAL
UC004
Manter Situação do Associado
Caso de uso responsável por manter o cadastro de situação do
associado.
Admin
Cadastrar situação do associado
1) Admin solicita o formulário de cadastro de situação do associado .
2) Sistema exibe o formulário de cadastro de situação do associado .
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar situação do associado ( situação do associado já
existente)
1) Admin solicita o formulário de cadastro de situação do associado .
2) Sistema exibe o formulário de cadastro de situação do associado .
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de situação do associado para nova
tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar situação do associado
1) Admin aciona formulário de consulta de situação do associado e informa o parâmetro de
busca.
2) Sistema busca as informações e exibe uma grid com a(s) situação(ões) do(s)
associado(s) encontrado(s).
3) Admin aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações da situação do associado selecionada.
5) Admin informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir situação do associado
1) Admin aciona formulário de consulta de situação do associado e informa o parâmetro de
busca.
2) Sistema busca as informações e exibe uma grid com a(s) situação(ões) do(s)
associado(s) encontrado(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da situação do associado selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir
situação do associado (Violação de Chave
Estrangeira)
1) Admin aciona formulário de consulta de situação do associado e informa o parâmetro de
busca.
2) Sistema busca as informações e exibe uma grid com a(s) situação(ões) do(s)
associado(s) encontrado(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da situação do associado selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Descrição da situação do associado deve ser única
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC005
Manter Tipo de Associado
Caso de uso responsável por manter o cadastro de tipo de
associado.
ATOR
Admin
CENÁRIO PRINCIPAL
Cadastrar tipo de associado
1) Admin solicita o formulário de cadastro de tipo de associado .
2) Sistema exibe o formulário de cadastro de tipo de associado .
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar tipo de associado (Tipo de associado já existente)
1) Admin solicita o formulário de cadastro de tipo de associado .
2) Sistema exibe o formulário de cadastro de tipo de associado .
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de tipo de associado para nova
tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar tipo de associado
1) Admin aciona formulário de consulta de apartamento e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) tipo(s) de associado(s)
encontrado(s).
3) Admin aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações do tipo de associado selecionado.
5) Admin informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir tipo de associado
1) Admin aciona formulário de consulta de tipo de associado e informa o parâmetro de
busca.
2) Sistema busca as informações e exibe uma grid com o(s) tipo(s) de associado(s)
encontrado(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do tipo de associado selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir tipo de associado (Violação de Chave Estrangeira)
1) Admin aciona formulário de consulta de tipo de associado e informa o parâmetro de
busca.
2) Sistema busca as informações e exibe uma grid com o(s) tipo(s) de associado(s)
encontrado(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do tipo de associado selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Descrição do tipo de associado deve ser único
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC006
CASO DE USO
Manter Turma
DESCRIÇÃO
Caso de uso responsável por manter o cadastro de turma.
ATOR
Admin
CENÁRIO PRINCIPAL
Cadastrar turma
1) Admin solicita o formulário de cadastro de turma.
2) Sistema exibe o formulário de cadastro de turma.
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar turma (Turma já existente)
1) Admin solicita o formulário de cadastro de turma .
2) Sistema exibe o formulário de cadastro de turma.
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de turma para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar turma
1) Admin aciona formulário de consulta de turma e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) turma (s) encontrada(s).
3) Admin aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações da turma selecionada.
5) Admin informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir turma
1) Admin aciona formulário de consulta de turma e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) turma(s) encontrada(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da turma selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir turma (Violação de Chave Estrangeira)
1) Admin aciona formulário de consulta de turma e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) turma(s) encontrada(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da turma selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Descrição da turma deve ser única
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC007
CASO DE USO
Manter Unidade
DESCRIÇÃO
Caso de uso responsável por manter o cadastro de unidade.
ATOR
Admin
CENÁRIO PRINCIPAL
Cadastrar unidade
1) Admin solicita o formulário de cadastro de unidade .
2) Sistema exibe o formulário de cadastro de unidade .
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar turma (Unidade já existente)
1) Admin solicita o formulário de cadastro de unidade .
2) Sistema exibe o formulário de cadastro de unidade .
3) Admin informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de unidade para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar unidade
1) Admin aciona formulário de consulta de unidade e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) unidade(s) encontrada(s).
3) Admin aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações da unidade selecionada.
5) Admin informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir unidade
1) Admin aciona formulário de consulta de unidade e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) unidade(s) encontrada(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da unidade selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir unidade (Violação de Chave Estrangeira)
1) Admin aciona formulário de consulta de unidade e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) unidade(s) encontrada(s).
3) Admin aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da unidade selecionado.
5) Admin clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Nome da unidade deve ser única
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC008
CASO DE USO
Manter Associado
DESCRIÇÃO
Caso de uso responsável por manter o cadastro de associados.
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar associado
1) Usuário solicita o formulário de cadastro de associado.
2) Sistema exibe o formulário de cadastro de associado.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar associado (Associado já existente)
1) Usuário solicita o formulário de cadastro de associado.
2) Sistema exibe o formulário de cadastro de associado .
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de associado para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Cadastrar associado pensionista
1) Usuário solicita o formulário de cadastro de associado.
2) Sistema exibe o formulário de cadastro de associado.
3) Usuário informa os dados requeridos informando que o associado é pensionista.
4) Sistema chama o caso de uso ”Informar vínculo do pensionista”.
5) Usuário informa o pensionista que a vincula.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Editar associado
1) Usuário aciona formulário de consulta de associado e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) associados(s) encontrado(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações do associado selecionado.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir associado
1) Usuário aciona formulário de consulta de associados e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) associados(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do associado selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 5 Excluir associado (Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de associado e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) associado(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do associado selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Matrícula e número do associado devem ser únicos
3) Lotação, tipo de associado e situação do associado são campos obrigatórios.
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
ATOR
CENÁRIO PRINCIPAL
UC009
Informar vínculo do pensionista
Caso de uso responsável por possibilitar a inserção de vínculo
do pensionista com associado falecido
Usuário
Informar vínculo
1) Durante o cadastro ou atualização de um associado o usuário seleciona “Pensionista”
como tipo de associado.
2) Sistema renderiza um campo para o usuário informar qual o vínculo.
3) Usuário informa o vínculo.
4) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
Estar realizando o cadastro ou edição de um associado.
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC010
Manter Funcionário
Caso de uso responsável por manter o cadastro de
funcionários.
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar funcionário
1) Usuário solicita o formulário de cadastro de funcionário.
2) Sistema exibe o formulário de cadastro de funcionário.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar funcionário(Funcionário já existente)
1) Usuário solicita o formulário de cadastro de funcionário.
2) Sistema exibe o formulário de cadastro de funcionário.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de funcionário para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar funcionário
1) Usuário aciona formulário de consulta de funcionário e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) funcionário(s) encontrado(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações do funcionário selecionado.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir funcionário
1) Usuário aciona formulário de consulta de funcionário e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) funcionário(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do funcionário selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir funcionário (Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de funcionário e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) funcionário(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do funcionário selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Dados do funcionários devem ser únicos
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC011
CASO DE USO
Manter Fornecedor
DESCRIÇÃO
Caso de uso responsável por manter o cadastro de fornecedor.
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar fornecedor
1) Usuário solicita o formulário de cadastro de fornecedor.
2) Sistema exibe o formulário de cadastro de fornecedor.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar fornecedor(Fornecedor já existente)
1) Usuário solicita o formulário de cadastro de fornecedor.
2) Sistema exibe o formulário de cadastro de fornecedor.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de fornecedor para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar fornecedor
1) Usuário aciona formulário de consulta de fornecedor e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) fornecedor(es) encontrado(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações do fornecedor selecionado.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir fornecedor
1) Usuário aciona formulário de consulta de fornecedor e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) fornecedor(es) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do fornecedor selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir fornecedor(Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de fornecedor e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) fornecedore(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do fornecedor selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Descrição do fornecedor deve ser único
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC012
Manter hospedagem
Caso de uso responsável por manter o controle das
hospedagens no hotel.
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar hospedagem somente do associado
1) Usuário solicita o formulário de cadastro de hospedagem .
2) Sistema exibe o formulário de cadastro de hospedagem.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar hospedagem com acompanhante
1) Usuário solicita o formulário de cadastro de hospedagem .
2) Sistema exibe o formulário de cadastro de hospedagem.
3) Usuário informa os dados requeridos informa que há acompanhante(s).
4) Sistema chama o caso de uso “informar acompanhante”.
5) Usuário confirma os dados.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Cadastrar hospedagem (Hospedagem já registrada)
1) Usuário solicita o formulário de cadastro de hospedagem.
2) Sistema exibe o formulário de cadastro de hospedagem .
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de hospedagem para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Editar hospedagem
1) Usuário aciona formulário de consulta de hospedagem e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) hospedagem(s) encontrada(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações da hospedagem selecionada.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir hospedagem
1) Usuário aciona formulário de consulta de hospedagem e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) hospedagem(s) encontrada(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da hospedagem selecionada.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 5 Excluir hospedagem (Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de hospedagem e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) hospedagem(s) encontrada(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da hospedagem selecionada.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC013
Informar acompanhante
Caso de uso responsável por possibilitar o cadastro de
acompanhante de associado hospedado no hotel
ATOR
Usuário
CENÁRIO PRINCIPAL
Informar acompanhante
1) Durante o cadastro ou atualização de uma hospedagem o usuário seleciona a
funcionalidade de adicionar acompanhante.
2) Sistema renderiza uma tela de modo a possibilitar o cadastro dos dados do(a)
acompanhante.
3) Usuário informa os dados requeridos da acompanhante e confirma o cadastro.
4) Sistema valida as informações.
5 Sistema emite a mensagem “Acompanhante cadastrado com sucesso.”
6) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
Estar realizando um cadastro ou edição de hospedagem
UC014
Manter Agenda
Caso de uso responsável por manter o registro
compromissos e reserva de área privativa
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar agenda
1) Usuário solicita o formulário de cadastro de agenda.
2) Sistema exibe o formulário de cadastro de agenda.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar agenda (Agenda já registrada)
1) Usuário solicita o formulário de cadastro de agenda.
2) Sistema exibe o formulário de cadastro de agenda .
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de agenda para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar agenda
1) Usuário aciona formulário de consulta de agenda e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) agenda(s) encontrada(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações da agenda selecionada.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir agenda
1) Usuário aciona formulário de consulta de agenda e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) agenda(s) encontrada(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da agenda selecionada.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir agenda (Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de agenda e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) agenda(s) encontrada(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da agenda selecionada.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
de
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Não deve coincidir duas agendas na mesma data/hora
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC015
CASO DE USO
Manter Instituição
DESCRIÇÃO
Caso de uso responsável por manter o cadastro de instituição
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar instituição
1) Usuário solicita o formulário de cadastro de instituição.
2) Sistema exibe o formulário de cadastro de instituição.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar instituição(Instituição já registrada)
1) Usuário solicita o formulário de cadastro de instituição.
2) Sistema exibe o formulário de cadastro de instituição.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de instituição para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar instituição
1) Usuário aciona formulário de consulta de instituição e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) instituição(ões) encontrada(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações da instituição selecionada.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir instituição
1) Usuário aciona formulário de consulta de instituição e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) instituição(ões) encontrada(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da instituição selecionada.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir instituição (Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de instituição e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com a(s) instituição(ões) encontrada(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações da instituição selecionada.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) Descrição da instituição deve ser único
3) Os dados do representante da instituição é campo obrigatório.
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC016
CASO DE USO
Manter Patrimônio
DESCRIÇÃO
Caso de uso responsável por manter o cadastro de patrimônio
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar patrimônio
1) Usuário solicita o formulário de cadastro de patrimônio.
2) Sistema exibe o formulário de cadastro de patrimônio.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Cadastrar patrimônio (Patrimônio já registrado)
1) Usuário solicita o formulário de cadastro de patrimônio.
2) Sistema exibe o formulário de cadastro de patrimônio.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e detecta duplicidade.
5) Sistema emite a mensagem “Registro já existente”
6) Sistema exibe novamente o formulário de cadastro de patrimônio para nova tentativa
7) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Editar patrimônio
1) Usuário aciona formulário de consulta de patrimônio e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) patrimônio(s) encontrado(s).
3) Usuário aciona a funcionalidade de edição dos dados.
4) Sistema carregas as informações do patrimônio selecionado.
5) Usuário informa as alterações e confirma a alteração.
6) Sistema valida as informações e persiste os dados.
7) Sistema emite a mensagem “Registro realizado com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 3 Excluir patrimônio
1) Usuário aciona formulário de consulta de patrimônio e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) patrimônio(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do patrimônio selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e realiza a operação.
7) Sistema emite a mensagem “Registro excluído com sucesso.”
8) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 4 Excluir patrimônio (Violação de Chave Estrangeira)
1) Usuário aciona formulário de consulta de patrimônio e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) patrimônio(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema carregas as informações do patrimônio selecionado.
5) Usuário clica no botão excluir e confirma a operação.
6) Sistema verifica os vínculos e detecta violação de chave estrangeira.
7) Sistema emite a mensagem “O registro não pode ser excluído – Vínculo existente.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
2) O número de patrimônio deve ser único
3) O número de patrimônio é campo obrigatório.
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC017
CASO DE USO
Baixar Patrimônio
DESCRIÇÃO
Caso de uso responsável baixar o patrimônio inservível
ATOR
Usuário
CENÁRIO PRINCIPAL
Baixar o patrimônio
1) Usuário aciona formulário de consulta de patrimônio e informa o parâmetro de busca.
2) Sistema busca as informações e exibe uma grid com o(s) patrimônio(s) encontrado(s).
3) Usuário aciona a funcionalidade de visualização dos dados.
4) Sistema exibe os dados do patrimônio e um botão para realizar a baixa.
5) Usuário clica em baixar material e confirma a operação.
6) Sistema realiza a baixa do material.
7) Sistema emite a mensagem “Patrimônio baixado com sucesso.”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
O usuário deve estar executando o caso de uso “Manter
patrimônio”
PÓS CONDIÇÃO
Patrimônio não é apagado fisicamente, porém não é mais
acessível.
NÚMERO
CASO DE USO
DESCRIÇÃO
UC018
Enviar e-mail
Caso de uso responsável pelo envio de e-mail a partir do
cadastro de associados
ATOR
Usuário
CENÁRIO PRINCIPAL
Enviar e-mail
1) Usuário solicita o formulário de envio de e-mail.
2) Sistema exibe o respectivo formulário.
3) Usuário chama o caso de uso “Selecionar destinatários”.
4) Sistema busca os e-mails dos associados selecionados.
5) Usuário redige a mensagem e informa o assunto.
6) Usuário clica no botão “Enviar mensagem”.
7) Sistema envia a mensagem aos associados selecionados e emite a mensagem “E-mail
enviado com sucesso”
8) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
O associado selecionado deve possuir e-mail registrado em
seu cadastro.
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC019
Enviar SMS
Caso de uso responsável pelo envio de SMS a partir do
cadastro de associados
ATOR
Usuário
CENÁRIO PRINCIPAL
Enviar SMS
1) Usuário solicita o formulário de envio de SMS.
2) Sistema exibe o respectivo formulário.
3) Usuário chama o caso de uso “Selecionar destinatários”.
4) Sistema busca os números de telefone celulares dos associados selecionados.
5) Usuário redige a mensagem e informa o assunto.
6) Usuário clica no botão “Enviar mensagem”.
7) Sistema se conecta ao gateway de envio dos SMS’s.
8) Sistema envia a mensagem aos associados selecionados e emite a mensagem “SMS
enviado com sucesso”
9) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
O associado selecionado deve possuir e-mail registrado em
seu cadastro.
PÓS CONDIÇÃO
NÚMERO
CASO DE USO
DESCRIÇÃO
UC020
Selecionar destinatários
Caso de uso responsável por filtrar os associados selecionados
como destinatários de e-mail ou SMS
ATOR
Usuário
CENÁRIO PRINCIPAL
Selecionar destinatários para e-mail
1) Estando na tela de envio de e-mail o usuário inicia o filtro de associados que receberão a
mensagem.
2) Sistema filtra os associados e constrói uma lista de e-mails quando o caso de uso origem
é o “Enviar e-mail”
3) Sistema libera o envio da mensagem.
4) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 1 Selecionar destinatários para SMS
1) Estando na tela de envio de SMS o usuário inicia o filtro de associados que receberão a
mensagem.
2) Sistema filtra os associados e constrói uma lista de telefones celulares quando o caso de
uso origem é o “Enviar SMS”
3) Sistema libera o envio da mensagem.
4) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) O usuário deve estar logado no sistema
PRÉ CONDIÇÃO
O usuário deve estar executando o caso de uso “Enviar email” ou “Enviar SMS”.
PÓS CONDIÇÃO
Lista de e-mail selecionados pronto para uso
NÚMERO
CASO DE USO
DESCRIÇÃO
UC021
Manter agenda de envio
Caso de uso responsável pelo envio de SMS programado a
partir do cadastro de associados
ATOR
Usuário
CENÁRIO PRINCIPAL
Cadastrar agenda de envio
1) Usuário solicita o formulário de cadastro de agenda de envio de SMS.
2) Sistema exibe o formulário de cadastro de agenda de envio de SMS.
3) Usuário informa os dados requeridos e confirma o cadastro.
4) Sistema valida as informações e persiste os dados.
5) Sistema emite a mensagem “Registro realizado com sucesso.”
6) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Acionar o envio do SMS
1) Sistema monitora o cadastro de agenda de envio.
2) Sistema detecta que há um SMS a ser enviado.
3) Sistema aciona o caso de uso “Enviar SMS” passando como parâmetro os destinatários.
4) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
1) Deve ser usado a API do Quartz para monitorar a agenda.
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
NÚMERO
UC022
CASO DE USO
Gerar Relatório
DESCRIÇÃO
Caso de uso responsável pela geração de relatórios em PDF
ATOR
Usuário
CENÁRIO PRINCIPAL
Gerar relatório
1) Usuário solicita o formulário de geração de relatório a partir de um menu de opções.
2) Sistema exibe o formulário para parametrizar o relatório.
3) Usuário informa os dados requeridos e confirma a geração do relatório.
4) Sistema valida as informações, busca as informações no banco de dados e gera um
documento em PDF com as informações solicitadas.
5) Sistema encerra o caso de uso.
CENÁRIO ALTERNATIVO 2 Gerar etiquetas PIMACO de endereço
1) Usuário solicita o formulário de geração de relatório a partir de um menu de opções.
2) Sistema exibe o formulário para parametrizar a geração das etiquetas.
3) Usuário informa os dados requeridos e confirma a geração do relatório.
4) Sistema valida as informações, busca as informações no banco de dados e gera um
documento em PDF com a formatação própria para impressão em formulário de etiquetas
PIMACO.
5) Sistema encerra o caso de uso.
REQUISITOS ESPECIAIS
PRÉ CONDIÇÃO
PÓS CONDIÇÃO
Documento PDF gerado
APÊNDICE F
DIAGRAMA DE CLASSE
APÊNDICE G
TELAS DO SISTEMA
Figura G:1 – Tela de Login
Figura G:2 – Tela principal com exibição do menu com as funcionalidades. Menu criado a
partir do componente rich:menu
Figura G:3 – Tela de consulta de associados
Figura G:4 – Tela de edição de associado com abertuda de um Modal Panel para insersão de
documento
Figura G:5 – Tela de edição de associado com abertuda de um Modal Panel para insersão de
endereço fazendo uso do componente rich:select. A esquerda da tela uma lista de
dependentes fazendo uso do componente rich:list. Na parte inferior o envio e renderização de
fotografias
Figura G:6 – Tela de cadastro de hospedagem com adição de acompanhante por meio de um
Modal Panel
Figura G:7 – Tela de cadastro de funcionário com validação de campos e máscara
personalizada para o campo horário
Figura G:8 – Tela de envio de e-mail fazendo uso do componente rich:pickList para filtragem
dos associados
Figura G:9 – Tela de envio de SMS. Esta funcionalidade se conecta a um Gateway SMS
provedor do serviço por meio de um WebService
Figura G:10 – Tela de geração de relatório parametrizado. Esta funcionalidade utiliza o
JasperReports para gerar o arquivo PDF
Figura G:11 – Relatório de bens patrimoniais gerado pelo sistema
APÊNDICE F
CÓDIGO FONTE
Download