Gestão Academica em Java - aula9 - persistencia

Gestão Academica em Java - aula9 - persistencia

UFU/FACOM POO1 Ref: 2015/2 Prática: Persistência de objetos em Java

O objetivo da persistência de objetos é armazenar de forma persistente, em memória não volátil, os objetos instanciados durante a execução de um programa e suas relações. Para isto, o meio ideal seria utilizar um sistema de banco de dados orientado a objetos, para que se possa manipular grande quantidade de informações.

Comumente, o que ocorre é o armazenamento dos atributos dos objetos em bancos de dados relacionais, o que demanda grande trabalho do desenvolvedor no sentido de converter informações no formato O em relacional.

Nesta aula será apresentada uma forma simples de persistência de objetos, em arquivos em disco, o que permitirá de forma simples e direta armazenar e recuperar os objetos instanciados e suas inter-relações de forma prática. Para isto, crie a classe Persist.java. Esta classe fornece os métodos necessários à gravação e recuperação de objetos em disco. Como os métodos utilizam o tipo Object, podem trabalhar com qualquer tipo de objeto existente na aplicação.

package persistencia; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Persist{ public static boolean gravar(Object a, String arquivo ){ try {

//Gera o arquivo para armazenar os objetos

FileOutputStream arquivoGrav = new FileOutputStream(arquivo);

//Classe responsavel por inserir os objetos

ObjectOutputStream objGravar = new ObjectOutputStream(arquivoGrav);

//Grava o objeto cliente no arquivo objGravar.writeObject(a); objGravar.flush(); objGravar.close(); arquivoGrav.flush(); arquivoGrav.close(); return true; } catch(Exception e){ return false; } public static Object recuperar(String arquivo){

Object obj = null; FileInputStream arquivoLeitura = null; ObjectInputStream objLeitura = null; try {

//Carrega o arquivo arquivoLeitura = new FileInputStream(arquivo);

//Classe responsavel por recuperar os objetos do arquivo objLeitura = new ObjectInputStream(arquivoLeitura);

//Le o objeto obj = objLeitura.readObject(); objLeitura.close(); arquivoLeitura.close(); } catch( Exception e ){ return null;

Para realizar a persistência em arquivo, cada classe específica da camada de persistência deverá implementar o uso dos métodos da classe Persist.java. Um exemplo de como a classe DadosAlunos pode implementar a persistência em arquivo:

package persistencia; import java.util.*; import modelo.*; public class DadosAlunos{ private static ArrayList<Aluno> alunos; static{ alunos = (ArrayList<Aluno>)Persist.recuperar("alunos.dat"); if (alunos == null) alunos = new ArrayList<Aluno>(); } public static void cadastrar(Aluno a){ alunos.add(a); boolean r = Persist.gravar(alunos, "alunos.dat"); }

Como esta classe faz uso de um bloco de código estático (carregado antes da entrada no método main()) o arquivo “alunos.dat” já deverá estar criado, mesmo que seja vazio. Um aspecto importante é que as classes a serem persistidas, devem ser serializáveis, para que sejam enviadas para o dispositivo de armazenamento através de um stream (sequencia de bytes). Para isto, basta que a classe implemente a interface Serializable, do pacote java.io. Por exemplo, na classe Aluno:

import java.io.Serializable; public class Aluno implements Serializable { …}

Desta forma, poderemos persistir os alunos em disco através de ObjectOutputStream e ObjectInputStream.

Exercício Implemente a persistência em arquivo para os demais dados manipulados pela aplicação.

Comentários