Floggy-GUJavaSC-2008-09-20

34
Simplicidade na persistência de dados em JavaME Thiago Rossato Thiago Moreira Priscila Tavares Lugon

description

 

Transcript of Floggy-GUJavaSC-2008-09-20

Page 1: Floggy-GUJavaSC-2008-09-20

Simplicidade na persistência de dados em JavaME

Thiago RossatoThiago Moreira

Priscila Tavares Lugon

Page 2: Floggy-GUJavaSC-2008-09-20

Arquitetura JavaME

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!2

Configurações:Especificação que detalha a JVM e o conjunto básico de APIs.Perfis:Inclui APIs mais específicas como interface gráfica, persistência, gerenciamento do ciclo de vida.Pacotes Opcionais:Provém funcionalidade específica que não está associada a uma configuração ou a um perfil. Ex.: Bluetooth.

Page 3: Floggy-GUJavaSC-2008-09-20

Persistência em JavaME

Como persistir os dados em um dispositivo móvel e com recursos limitados?

• RMS (Record Management System)– Na maioria das vezes é a única opção!

• Sistema de arquivos– JSR 75 (opcional) – nem todos os dispositivos

suportam.

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!3

Page 4: Floggy-GUJavaSC-2008-09-20

RMS

• Vantagens– API simples e funcional– Suportada por todos os dispositivos JavaME /

MIDP

• Desvantagens– Dados são manipulados na forma mais pura (array

de bytes)– Conseqüentemente a codificação torna-se

trabalhosa (serialização)Agora você não precisa mais escrever centenas de linhas de código de persistência.

Deixe que o Floggy faça o trabalho sujo para você!4

Page 5: Floggy-GUJavaSC-2008-09-20

Exemplo com RMS

public class Person { private String name;private Date birthday;private char gender;

(...)}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!5

Page 6: Floggy-GUJavaSC-2008-09-20

Exemplo com RMSpublic void save(Person p) {

byte[] data = null;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

DataOutputStream dos = new DataOutputStream(baos);

try {

dos.writeUTF(p.getName());

dos.writeLong(p.getBirthday().getTime());

dos.writeChar(p.getGender());

data = baos.toByteArray();

dos.close();

} catch (IOException e) {}

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(“Person”, true);

int id = rs.addRecord(data, 0, data.length);

rs.closeRecordStore();

} catch (RecordStoreException e) {}

}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!6

Page 7: Floggy-GUJavaSC-2008-09-20

Exemplo com RMSpublic Person load(int id) {

Person p;try {

RecordStore rs = RecordStore.openRecordStore(“Person”, true);byte[] data = rs.getRecord(id);ByteArrayInputStream bais = new ByteArrayInputStream(data);DataInputStream dis = new DataInputStream(bais);

try {p = new Person();p.setName(dis.readUTF());p.setBirthday(new Date(dis.readLong()));p.setGender(dis.readChar());dis.close();

} catch (IOException e) {}

rs.closeRecordStore();} catch (RecordStoreException e) {}

return p;}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!7

Page 8: Floggy-GUJavaSC-2008-09-20

Motivação

• Como desenvolvedores JavaME não agüentávamos mais escrever tantas linhas para persistir dados com RMS

• Na época (2004/2005) não encontramos nenhuma solução que atendesse aos requisitos de um framework de persistência

• Unimos o útil ao agradável no trabalho de conclusão de curso (TCC) pela UFSC

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!8

Page 9: Floggy-GUJavaSC-2008-09-20

Floggy

• O que é?– Framework de persistência de dados orientado a

objetos para JavaME– Permite ao desenvolvedor trabalhar com

persistência em alto nível

• O que não é?– Um banco de dados para JavaME

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!9

Page 10: Floggy-GUJavaSC-2008-09-20

Bastidores

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!10

Page 11: Floggy-GUJavaSC-2008-09-20

Tipos Compatíveis

• Tipos primitivos e wrappers:– int, ...

• Tipos da classe java.lang:– String, StringBuffer

• Tipos da classe java.util:– Date, Calendar, Vector, TimeZone, Stack

• Arrays unidimensional

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!11

Page 12: Floggy-GUJavaSC-2008-09-20

Estrutura• Pacote net.sourceforge.floggy.persistence• Persistência

– Persistable– PersistableManager

• Busca– ObjsetSet– Filter– Comparator

• Exceção– FloggyException

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!12

Page 13: Floggy-GUJavaSC-2008-09-20

Ambientes de Desenvolvimento

• Eclipse• Netbeans• Ant• Maven• Linha de Comando

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!13

Page 14: Floggy-GUJavaSC-2008-09-20

• Por onde começar?• Quais são as classes que devem ser

estendidas?• Quais as interfaces que devem ser

implementadas?

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!14

Como desenvolver

Page 15: Floggy-GUJavaSC-2008-09-20

import net.sourceforge.floggy.persistence.Persistable;

public class Phone implements Persistable {

private String number;

private String extension;

private int type; // Mobile, Home, Work, etc

...

}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!15

Entidade Phone

Page 16: Floggy-GUJavaSC-2008-09-20

import net.sourceforge.floggy.persistence.Persistable;

public class Phone implements Persistable {

private String number;

private String extension;

private int type; // Mobile, Home, Work, etc

...

}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!16

Entidade Phone

Interface de marcação identifica as classes persistentes.

Page 17: Floggy-GUJavaSC-2008-09-20

import net.sourceforge.floggy.persistence.Persistable;

public class Person implements Persistable {

private String name;

private Date birthday;

private char gender;

private Phone[] phones;

private transient int age;

public static int SOME_STATIC_FIELD = 1;

...

}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!17

Entidade Person

Page 18: Floggy-GUJavaSC-2008-09-20

import net.sourceforge.floggy.persistence.Persistable;

public class Person implements Persistable {

private String name;

private Date birthday;

private char gender;

private Phone[] phones;

private transient int age;

public static int SOME_STATIC_FIELD = 1;

...

}

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!18

Entidade Person

Atributos identificados como

transientes e atributos estáticos

não serão persistidos.

Page 19: Floggy-GUJavaSC-2008-09-20

SalvandoPerson p = new Person();p.setName(...);p.setBirthday(...);p.setGender(...);p.setPhones(...);

try {

int id = PersistableManager.getInstance().save(p);

} catch (FloggyException e) { ...}

Page 20: Floggy-GUJavaSC-2008-09-20

SalvandoPerson p = new Person();p.setName(...);p.setBirthday(...);p.setGender(...);p.setPhones(...);

try {

int id = PersistableManager.getInstance().save(p);

} catch (FloggyException e) { ...}

Ao salvar um objeto um identificador

único (ID) é retornado.

Page 21: Floggy-GUJavaSC-2008-09-20

Editando e SalvandoPerson person = new Person();

try {

PersistableManager.getInstance().load(person, id);

person.setName(...);

id = PersistableManager.getInstance().save(person);

} catch (FloggyException e) { ...}

Page 22: Floggy-GUJavaSC-2008-09-20

Editando e SalvandoPerson person = new Person();

try {

PersistableManager.getInstance().load(person, id);

person.setName(...);

id = PersistableManager.getInstance().save(person);

} catch (FloggyException e) { ...}

Para carregar um objeto utilize o

identificador único (ID)

Page 23: Floggy-GUJavaSC-2008-09-20

Listando todos os objetosPersistableManager pm = PersistableManager.getInstance();ObjectSet persons = pm.find(Person.class, null, null);for (int i = 0; i < persons.size(); i++) { Person p = (Person) persons.get(i); ...}

Ou dependendo do contexto use o método otimizado

Person person = new Person();PersistableManager pm = PersistableManager.getInstance();ObjectSet persons = pm.find(Person.class, null, null);for (int i = 0; i < persons.size(); i++) { persons.get(i, person); ...}

Page 24: Floggy-GUJavaSC-2008-09-20

Filtrando os objetospublic class MaleFilter implements

net.sourceforge.floggy.persistence.Filter {

public boolean matches(Persistable persistable) { Person p = (Person) persistable; return p.getGender() == 'M'; } }

ObjectSet persons = pm.find(Person.class, new MaleFilter(), null);

for (int i = 0; i < persons.size(); i++) { Person p = (Person) persons.get(i); ...}

Page 25: Floggy-GUJavaSC-2008-09-20

Ordenando os objetospublic class AgeComparator implements

net.sourceforge.floggy.persistence.Comparator {

public int compare(Persistable o1, Persistable o2) {Person p1 = (Person) o1;Person p2 = (Person) o2;

if (p1.getBirthday().getTime() <

p2.getBirthday().getTime()) {return PRECEDES;

}

if (p1.getBirthday().getTime() > p2.getBirthday().getTime()) {

return FOLLOWS; }

return EQUIVALENT;}

}

ObjectSet persons = pm.find(Person.class, null, new AgeCompator());

Page 26: Floggy-GUJavaSC-2008-09-20

ExcluindoPerson person = (…);

try {

PersistableManager.getInstance().delete(person);

} catch (FloggyException e) { ...}

Page 27: Floggy-GUJavaSC-2008-09-20

Excluindo todas entidades de um tipo definido

try {

PersistableManager.getInstance().deleteAll(Person.class);

} catch (FloggyException e) { ...}

Page 28: Floggy-GUJavaSC-2008-09-20

Excluindo todas entidades de todos os tipos

try {

PersistableManager.getInstance().deleteAll();

} catch (FloggyException e) {...

}

Page 29: Floggy-GUJavaSC-2008-09-20

Comparação

RMS Floggy

Orientado a registros Orientado a objetos

Comandos de baixo nível Comandos de alto nível

Aproximadamente 10 linhas para salvar a classe Person

Somente 1 linha para salvar a classe Person

Controle total dos dados armazenados Controle limitado dos dados armazenados

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!29

Page 30: Floggy-GUJavaSC-2008-09-20

Onde obter informações?

• Site– Documentação– FAQ

• Lista de discussão do SF.net– [email protected]

• Sistema de gestão de incidentes do SF.net

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!30

Page 31: Floggy-GUJavaSC-2008-09-20

Colaborando

• Para doar R$ 5,00 ligue para 0800-555-555• Para doar R$ 10,00 ligue para 0800-101-010• Para doar R$ 50,00 ligue para 0800-505-050• Para valores superiores

– Banco do Brasil– Agência: 1234-5– Conta: 98765-4

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!31

Page 32: Floggy-GUJavaSC-2008-09-20

Colaborando

• Código fonte• Tradução do site• Críticas e sugestões

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!32

Page 33: Floggy-GUJavaSC-2008-09-20

Floggy na mídia!

• Edição 30 da revista MUNDO JAVA• Workshop no JustJava 2008• Mês de Java 2008 – Florianópolis/SC• II Boot –Xanxerê/SC

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!33

Page 34: Floggy-GUJavaSC-2008-09-20

Agora você não precisa mais escrever centenas de linhas de código de persistência.Deixe que o Floggy faça o trabalho sujo para você!34

Obrigado!

http://floggy.org