Floggy-JustJava-2008-09-10

23
Simplicidade na persistência de dados em JavaME Thiago Rossato Thiago Moreira

description

 

Transcript of Floggy-JustJava-2008-09-10

Page 1: Floggy-JustJava-2008-09-10

Simplicidade na persistência de dados em JavaME

Thiago RossatoThiago Moreira

Page 2: Floggy-JustJava-2008-09-10

Persistência em JavaME

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

• RMS– Na maioria das vezes é a única opção!

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

suportam• Bancos de dados– Poucas opções proprietárias destinados a

determinados dispositivos

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

Page 3: Floggy-JustJava-2008-09-10

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

trabalhosaAgora 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-JustJava-2008-09-10

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

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-JustJava-2008-09-10

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ê!5

Page 6: Floggy-JustJava-2008-09-10

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ê!6

Page 7: Floggy-JustJava-2008-09-10

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ê!7

Page 8: Floggy-JustJava-2008-09-10

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ê!8

Page 9: Floggy-JustJava-2008-09-10

• 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ê!9

Como desenvolver

Page 10: Floggy-JustJava-2008-09-10

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ê!10

Entidade Phone

Page 11: Floggy-JustJava-2008-09-10

import net.sourceforge.floggy.persistence.Persistable;

public class Person implements Persistable {

private String name;private Date birthday;private char gender;private Phone[] phones;

// Transient and static fields aren't persisted

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ê!11

Entidade Person

Page 12: Floggy-JustJava-2008-09-10

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

try { // A new object ID is generated. // You can use it in future operations. int id = PersistableManager.getInstance().save(p);} catch (FloggyException e) { ...}

Page 13: Floggy-JustJava-2008-09-10

Editando e SalvandoPerson person = new Person();

try { // To load an object, use the object ID // generated previously by a save() operation. PersistableManager.getInstance().load(person, id);

// Now, edit and save the object. // The same object ID is returned. person.setName(...); id = PersistableManager.getInstance().save(person);} catch (FloggyException e) { ...}

Page 14: Floggy-JustJava-2008-09-10

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 sobrecarregado

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 15: Floggy-JustJava-2008-09-10

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 16: Floggy-JustJava-2008-09-10

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; }

}

// Sorting persons by their age (younger first)ObjectSet persons = pm.find(Person.class, null, new AgeCompator());

Page 17: Floggy-JustJava-2008-09-10

ExcluindoPerson person = new Person();

try { // To load an object, use the object ID // generated previously by a save() operation. PersistableManager.getInstance().load(person, id);

// Delete the object. PersistableManager.getInstance().delete(person);} catch (FloggyException e) { ...}

Page 18: Floggy-JustJava-2008-09-10

Excluindo todas entidades de um tipo definido

try { // Delete all objects based on its class. PersistableManager.getInstance().deleteAll(Person.class);} catch (FloggyException e) { ...}

Page 19: Floggy-JustJava-2008-09-10

Excluindo todas entidades de todos os tipos

try { // Delete all objects. PersistableManager.getInstance().deleteAll();} catch (FloggyException e) { ...}

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

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ê!20

Page 21: Floggy-JustJava-2008-09-10

Ajuda

• 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ê!21

Page 22: Floggy-JustJava-2008-09-10

Colaborando

• Código-fonte• Traduçã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ê!22

Page 23: Floggy-JustJava-2008-09-10

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ê!23

Obrigado!

http://floggy.org