You are on page 1of 19

Centro Federal de Educao Profissional e Tecnolgica do RN Departamento Acadmico de Te

cnologia da Informao Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas


Java Persistence API Exemplo Prtico Sistema de Biblioteca

Sistema de Biblioteca

O nosso sistema exemplo destinado a atender as necessidades de uma Biblioteca, e


deve contemplar as seguintes funcionalidades:

Manuteno dos cadastros de livros, dos usurios da biblioteca (aqueles que podem pega
r emprestado livros da biblioteca) e dos usurios do sistema Registrar o emprstimo
de livros Registrar a devoluo de livros


Clculo de multa em funo de devoluo em atraso

Registrar o pagamento de multa por atrasos Pesquisar livros (por ttulo, autor e e
ditora)
2

Sistema de Biblioteca

Algumas regras do negcio:

A biblioteca serve a alunos, professores e servidores de uma instituio de ensino L


imites de emprstimo de livros: 5 (cinco) se for aluno ou funcionrio e 10 (dez) se
for professor As multas podem ser pagas no ato da devoluo ou a posteriori a critrio
do usurio Para pegar livros emprestados o usurio no pode estar devendo o pagamento
de multas O usurio que doar um livro a biblioteca pode abater at R$ 20,00 de mult
a
3

Esquema da Aplicao Implementado Anteriromente


4

Primeira Verso do Modelo de Domnio do Sistema da Biblioteca


5

Elementos a Serem Implementados

Beans de entidade a serem implementados:



Livro Atendente Usuario Acervo

Beans de sesso a serem implementados:

Gerencia os livros pertencentes ao acervo da biblioteca Gerencia os cadastros do


s usurios da biblioteca e dos usurios do sistema
6

GerenteCadastros

Cdigo da Entidade Livro


package exemplo.biblioteca.modelo; import javax.persistence.*; @NamedQueries({ @
NamedQuery(name="findAllLivros", query="SELECT l FROM Livro l")}) @Entity public
class Livro implements java.io.Serializable { private int id; private String ti
tulo; private String isbn; @Id @GeneratedValue public int getId() { return id; }
public void setId(int novo) { id = novo; } } // Demais acessadores e modificado
res...
7

Tabela Correspondente Entidade Atendente

A referida tabela dever ser criada no banco de dados antes da implantao da aplicao:
create table TABELA_ATENDENTE ( ATENDENTE_ID integer primary key not null, NOME
varchar(255) not null, LOGIN varchar(20) not null, SENHA varchar(20) not null );
8

Cdigo da Entidade Atendente


package exemplo.biblioteca.modelo; import javax.persistence.*; // Consulta nomea
da para retornar todos os atendentes... @Entity @Table(name=TABELA_ATENDENTE) publ
ic class Atendente implements java.io.Serializable { private int id; private Str
ing nome; private String login; private String senha; @Id @GeneratedValue @Colum
n(name=ATENDENTE_ID, columnDefinition=integer) public int getId() { return id; } ...
@Column(name=LOGIN, length=20) public String getLogin() { return login; } ... }
9

Cdigo Entidade Usuario


package exemplo.biblioteca.modelo; public class Usuario implements java.io.Seria
lizable { private int id; private String nome; private String matricula; private
String telefone; public int getId() { return id; } public void setId(int novo)
{ id = novo; } public public public public public public }
10
String getNome() { return nome; } void setNome(String novo) { nome = novo; } Str
ing getMatricula() { return matricula; } void setMatricula(String novo) { matric
ula = novo; } String getTelefone() { return telefone; } void setTelefone(String
novo) { telefone = novo; }

Descritor de Mapeamento Objeto/Relacional

A classe Usuario no tem nenhuma anotao que indique que um bean de entidade A definio
desta classe como bean de entidade feita atravs do arquivo especfico para mapeamen
to objeto-relacional orm.xml

Este arquivo procurado, por padro, no ato da implantao de um mdulo EJB

O arquivo orm.xml se encontra no diretrio /META-INF do projeto contendo as entida


des
11

Descritor de Mapeamento Objeto/Relacional


<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="h
ttp://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.c
om/xml/ns/persistence/orm_1_0.xsd" version="1.0"> <entity class="exemplo.bibliot
eca.modelo.Usuario" access="PROPERTY"> <named-query name="findAllUsuarios"> <que
ry>SELECT u FROM Usuario u</query> query /query </named-query> /named-query <att
ributes> attributes <id name="id"> <generated-value strategy="IDENTITY"/> </id>
</attributes> /attributes </entity> /entity </entity-mappings> /entity-mappings
12

Descritor de Implantao dos Beans de Entidade

O persistence.xml tambm fica no /META-INF


<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://
java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
tance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.su
n.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="Bibliotec
aEJB"> <provider>org.hibernate.ejb.HibernatePersistence</provider> provider /pro
vider <jta-data-source>java:/DefaultDS</jta-data-source> jta-data-source /jta-da
ta-source <properties> properties <property name="hibernate.hbm2ddl.auto" value=
"update"/> </properties> /properties </persistence-unit> /persistence-unit </per
sistence> /persistence
13

Interface Remota do Bean de Sesso sem Informao de Estado


package exemplo.biblioteca; import java.util.List; import javax.ejb.Remote; impo
rt exemplo.biblioteca.modelo.Livro; @Remote public interface Acervo { public Lis
t<Livro> getLivros(); public Livro getLivroById(int id); public void adicionaLiv
ro(Livro novo); public void removeLivro(Livro aRemover); public Livro atualizaLi
vro(Livro atual); }
14

Classe do Bean de Sesso sem Informao de Estado


package exemplo.biblioteca; // Imports... public @Stateless class AcervoBean imp
lements Acervo { @PersistenceContext(unitName="BibliotecaEJB") private EntityMan
ager em; @SuppressWarnings("unchecked") public List<Livro> getLivros() { if (em
!= null) { Query query = em.createNamedQuery("findAllLivros"); em.createNamedQue
ry("findAllLivros") List<Livro> resultList = query.getResultList(); query.getRes
ultList() return resultList; } return null; } public Livro getLivroById(int id)
{ if (em != null) { return em.find(Livro.class, id); id) } return null; 15 }

Classe do Bean de Sesso sem Informao de Estado


public void adicionaLivro(Livro novo) { if (em != null) { em.persist(novo); } }
public void removeLivro(Livro aRemover) { if (em != null) { em.remove(aRemover);
} } public Livro atualizaLivro(Livro atual) { if (em != null) { return em.merge
(atual); } return null; } }
16

Implementao do Bean de Sesso sem Estado - GerenteCadastos

Implemente do bean de sesso sem estado GerenteCadastros



Interface remota Classe do bean Recuperao, insero, atualizao e remoo dos usurios da
oteca (Usuario) e dos usurios do Usuario sistema (Atendente) Atendente

Este bean dever ter as seguintes funes:

Utilize os mesmos conceitos aplicados no bean de sesso Acervo


17

Implementao da Camada de Apresentao

Construa, no Mdulo Web, da biblioteca os JSPs Web e Servltes necessrios s funcional


idades:

Pgina para listar todos os Livros

Opes para inserir, remover e atualizar um Livro Opes para inserir, remover e atualiz
ar um Atendente Opes para inserir, remover e atualizar um Usuario

Pgina para listar todos os Atendentes

Pgina para listar todos os Usuarios

Implante e teste a aplicao


18

You might also like