Beruflich Dokumente
Kultur Dokumente
Exemplo Prático
“Sistema de Biblioteca”
Sistema de Biblioteca
● O nosso sistema exemplo é destinado a atender
as necessidades de uma Biblioteca, e deve
contemplar as seguintes funcionalidades:
– Manutenção dos cadastros de livros, dos usuários
da biblioteca (aqueles que podem pegar emprestado
livros da biblioteca) e dos usuários do sistema
– Registrar o empréstimo de livros
– Registrar a devolução de livros
● Cálculo de multa em função de devolução em atraso
– Registrar o pagamento de multa por atrasos
– Pesquisar livros (por título, autor e editora)
2
Sistema de Biblioteca
● Algumas regras do negócio:
– A biblioteca serve a alunos, professores e servidores
de uma instituição de ensino
– Limites de empréstimo de livros: 5 (cinco) se for
aluno ou funcionário e 10 (dez) se for professor
– As multas podem ser pagas no ato da devolução ou
a posteriori a critério do usuário
– Para pegar livros emprestados o usuário não pode
estar devendo o pagamento de multas
– O usuário que doar um livro a biblioteca pode abater
até R$ 20,00 de multa
3
Esquema da Aplicação
Implementado Anteriromente
4
Primeira Versão do Modelo de
Domínio do Sistema da Biblioteca
5
Elementos a Serem Implementados
● Beans de entidade a serem implementados:
– Livro
– Atendente
– Usuario
● Beans de sessão a serem implementados:
– Acervo
● Gerencia os livros pertencentes ao acervo da biblioteca
– GerenteCadastros
● Gerencia os cadastros dos usuários da biblioteca e dos
usuários do sistema
6
Código 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 titulo;
private String isbn;
@Id
@GeneratedValue
public int getId() { return id; }
public void setId(int novo) { id = novo; }
8
Código da Entidade Atendente
package exemplo.biblioteca.modelo;
import javax.persistence.*;
// Consulta nomeada para retornar todos os atendentes...
@Entity
@Table(name=“TABELA_ATENDENTE”)
public class Atendente implements java.io.Serializable {
private int id;
private String nome;
private String login;
private String senha;
@Id
@GeneratedValue
@Column(name=“ATENDENTE_ID”, columnDefinition=“integer”)
public int getId() { return id; }
...
@Column(name=“LOGIN”, length=20)
public String getLogin() { return login; }
...
} 9
Código Entidade Usuario
package exemplo.biblioteca.modelo;
11
Descritor de Mapeamento
Objeto/Relacional
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<entity class="exemplo.biblioteca.modelo.Usuario"
access="PROPERTY">
<named-query name="findAllUsuarios">
<query>SELECT
query u FROM Usuario u</query>
/query
</named-query>
/named-query
<attributes>
attributes
<id name="id">
<generated-value strategy="IDENTITY"/>
</id>
</attributes>
/attributes
</entity>
/entity
</entity-mappings>
/entity-mappings
12
Descritor de Implantação dos Beans
de Entidade
● O persistence.xml também 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-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="BibliotecaEJB">
<provider>org.hibernate.ejb.HibernatePersistence<
provider /provider>
/provider
<jta-data-source>java:/DefaultDS<
jta-data-source /jta-data-source>
/jta-data-source
<properties>
properties
<property name="hibernate.hbm2ddl.auto"
value="update"/>
</properties>
/properties
</persistence-unit>
/persistence-unit
</persistence>
/persistence
13
Interface Remota do Bean de
Sessão sem Informação de Estado
package exemplo.biblioteca;
import java.util.List;
import javax.ejb.Remote;
import exemplo.biblioteca.modelo.Livro;
@Remote
public interface Acervo {
public List<Livro> getLivros();
public Livro getLivroById(int id);
public void adicionaLivro(Livro novo);
public void removeLivro(Livro aRemover);
public Livro atualizaLivro(Livro atual);
}
14
Classe do Bean de Sessão sem
Informação de Estado
package exemplo.biblioteca;
// Imports...
public @Stateless class AcervoBean implements Acervo {
@PersistenceContext(unitName="BibliotecaEJB")
private EntityManager em;
@SuppressWarnings("unchecked")
public List<Livro> getLivros() {
if (em != null) {
Query query = em.createNamedQuery("findAllLivros");
em.createNamedQuery("findAllLivros")
List<Livro> resultList = query.getResultList();
query.getResultList()
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 Sessão sem
Informação 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
Implementação do Bean de Sessão
sem Estado - GerenteCadastos
● Implemente do bean de sessão sem estado
GerenteCadastros
– Interface remota
– Classe do bean
● Este bean deverá ter as seguintes funções:
– Recuperação, inserção, atualização e remoção dos
usuários da biblioteca (Usuario)
Usuario e dos usuários do
sistema (Atendente)
Atendente
● Utilize os mesmos conceitos aplicados no bean
de sessão Acervo
17
Implementação da Camada de
Apresentação
● Construa, no Módulo Web,
Web da biblioteca os JSPs
e Servltes necessários às funcionalidades:
– Página para listar todos os Livros
● Opções para inserir, remover e atualizar um Livro
– Página para listar todos os Atendentes
● Opções para inserir, remover e atualizar um Atendente
– Página para listar todos os Usuarios
● Opções para inserir, remover e atualizar um Usuario
● Implante e teste a aplicação
18