Java Controle Biblioteca

18

Click here to load reader

Transcript of Java Controle Biblioteca

Page 1: Java Controle Biblioteca

Java Persistence APIJava Persistence API

Exemplo PráticoExemplo Prático“Sistema de Biblioteca”“Sistema de Biblioteca”

Centro Federal de Educação Profissional e Tecnológica do RNDepartamento Acadêmico de Tecnologia da Informação

Curso de Tecnologia em Análise e Desenvolvimento de Sistemas

Page 2: Java Controle Biblioteca

2

Sistema de BibliotecaSistema 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)

Page 3: Java Controle Biblioteca

3

Sistema de BibliotecaSistema 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

Page 4: Java Controle Biblioteca

4

Esquema da Aplicação Esquema da Aplicação Implementado AnteriromenteImplementado Anteriromente

Page 5: Java Controle Biblioteca

5

Primeira Versão do Modelo de Primeira Versão do Modelo de Domínio do Sistema da BibliotecaDomínio do Sistema da Biblioteca

Page 6: Java Controle Biblioteca

6

Elementos a Serem ImplementadosElementos a Serem Implementados

● Beans de entidade a serem implementados:– LivroLivro– AtendenteAtendente– UsuarioUsuario

● Beans de sessão a serem implementados:– AcervoAcervo

● Gerencia os livros pertencentes ao acervo da biblioteca– GerenteCadastrosGerenteCadastros

● Gerencia os cadastros dos usuários da biblioteca e dos usuários do sistema

Page 7: Java Controle Biblioteca

7

Código da Entidade LivroCódigo da Entidade Livro

package exemplo.biblioteca.modelo;import javax.persistence.*;@NamedQueries({@NamedQueries({ @NamedQuery(name="findAllLivros",@NamedQuery(name="findAllLivros",

query="SELECT l FROM Livro l")})query="SELECT l FROM Livro l")})@Entity@Entitypublic class Livro implements java.io.Serializable {

private int id;private String titulo;private String isbn;@Id@Id@GeneratedValue@GeneratedValuepublic int getId() { return id; }public void setId(int novo) { id = novo; }// Demais acessadores e modificadores...// Demais acessadores e modificadores...

}

Page 8: Java Controle Biblioteca

8

Tabela Correspondente à Entidade Tabela Correspondente à Entidade AtendenteAtendente

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

);

● A referida tabela deverá ser criada no banco de dados antes da implantação da aplicação:

Page 9: Java Controle Biblioteca

9

Código da Entidade AtendenteCódigo da Entidade Atendente

package exemplo.biblioteca.modelo;import javax.persistence.*;// Consulta nomeada para retornar todos os atendentes...// Consulta nomeada para retornar todos os atendentes...@Entity@Entity@Table(name=“TABELA_ATENDENTE”)@Table(name=“TABELA_ATENDENTE”)public class Atendente implements java.io.Serializable {

private int id;private String nome;private String login;private String senha;@Id@Id@GeneratedValue@GeneratedValue@Column(name=“ATENDENTE_ID”, columnDefinition=“integer”)@Column(name=“ATENDENTE_ID”, columnDefinition=“integer”)public int getId() { return id; }...@Column(name=“LOGIN”, length=20)@Column(name=“LOGIN”, length=20)public String getLogin() { return login; }...

}

Page 10: Java Controle Biblioteca

10

Código Entidade UsuarioCódigo Entidade Usuario

package exemplo.biblioteca.modelo;public class Usuario implements java.io.Serializable {

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 String getNome() { return nome; }public void setNome(String novo) { nome = novo; }public String getMatricula() { return matricula; }public void setMatricula(String novo) { matricula = novo; }public String getTelefone() { return telefone; }public void setTelefone(String novo) { telefone = novo; }

}

Page 11: Java Controle Biblioteca

11

Descritor de Mapeamento Descritor de Mapeamento Objeto/RelacionalObjeto/Relacional

● A classe Usuario não tem nenhuma anotação que indique que é um bean de entidade

● A definição desta classe como bean de entidade é feita através do arquivo específico para mapeamento objeto-relacional – orm.xmlorm.xml– Este arquivo é procurado, por padrão, no ato da

implantação de um módulo EJB● O arquivo orm.xmlorm.xml se encontra no diretório

/META-INF/META-INF do projeto contendo as entidades

Page 12: Java Controle Biblioteca

12

Descritor de Mapeamento Descritor de Mapeamento Objeto/RelacionalObjeto/Relacional

<entity-mappings 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">

<entityentity class="exemplo.biblioteca.modelo.Usuario" access="PROPERTY">

<named-querynamed-query name="findAllUsuarios"><queryquery>SELECT u FROM Usuario u</query/query>

</named-query/named-query><attributesattributes>

<idid name="id"><generated-valuegenerated-value strategy="IDENTITY"/>

</id></attributes/attributes>

</entity/entity></entity-mappings/entity-mappings>

Page 13: Java Controle Biblioteca

13

Descritor de Implantação dos Beans Descritor de Implantação dos Beans de Entidadede Entidade

<?xml version="1.0" encoding="UTF-8"?><persistencepersistence 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-unitpersistence-unit name="BibliotecaEJB"> <providerprovider>org.hibernate.ejb.HibernatePersistence</provider/provider> <jta-data-sourcejta-data-source>java:/DefaultDS</jta-data-source/jta-data-source> <propertiesproperties> <propertyproperty name="hibernate.hbm2ddl.auto"

value="update"/> </properties/properties> </persistence-unit/persistence-unit></persistence/persistence>

● O persistence.xmlpersistence.xml também fica no /META-INF/META-INF

Page 14: Java Controle Biblioteca

14

Interface Remota do Bean de Interface Remota do Bean de Sessão sem Informação de EstadoSessão sem Informação de Estado

package exemplo.biblioteca;package exemplo.biblioteca;import java.util.List;import java.util.List;import javax.ejb.Remote;import javax.ejb.Remote;import exemplo.biblioteca.modelo.Livro;import exemplo.biblioteca.modelo.Livro;@Remote@Remotepublic interface Acervo {public interface Acervo {

public List<Livro> getLivros();public List<Livro> getLivros();public Livro getLivroById(int id);public Livro getLivroById(int id);public void adicionaLivro(Livro novo);public void adicionaLivro(Livro novo);public void removeLivro(Livro aRemover);public void removeLivro(Livro aRemover);public Livro atualizaLivro(Livro atual);public Livro atualizaLivro(Livro atual);

}}

Page 15: Java Controle Biblioteca

15

Classe do Bean de Sessão sem Classe do Bean de Sessão sem Informação de EstadoInformação de Estado

package exemplo.biblioteca;// Imports...// Imports...public @Stateless@Stateless class AcervoBean implements Acervo {

@PersistenceContext(unitName="BibliotecaEJB")@PersistenceContext(unitName="BibliotecaEJB")private EntityManager em;@SuppressWarnings("unchecked")@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)em.find(Livro.class, id);

}return null;

}

Page 16: Java Controle Biblioteca

16

Classe do Bean de Sessão sem Classe do Bean de Sessão sem Informação de EstadoInformação de Estado

public void adicionaLivro(Livro novo) {if (em != null) {

em.persist(novo);em.persist(novo); }

}public void removeLivro(Livro aRemover) {

if (em != null) {em.remove(aRemover);em.remove(aRemover);

}}public Livro atualizaLivro(Livro atual) {

if (em != null) {return em.merge(atual);

}return null;

}}

Page 17: Java Controle Biblioteca

17

Implementação do Bean de Sessão Implementação do Bean de Sessão sem Estado - GerenteCadastossem Estado - GerenteCadastos

● Implemente do bean de sessão sem estado GerenteCadastrosGerenteCadastros– 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 (UsuarioUsuario) e dos usuários do sistema (AtendenteAtendente)

● Utilize os mesmos conceitos aplicados no bean de sessão AcervoAcervo

Page 18: Java Controle Biblioteca

18

Implementação da Camada de Implementação da Camada de ApresentaçãoApresentação

● Construa, no Módulo WebMódulo Web, da biblioteca os JSPsJSPs e ServltesServltes 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