Simplicidade na persistência de dados em JavaME Thiago Rossato Thiago Moreira
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ê!
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 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ê!
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ê!
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ê!
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ê!
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ê!
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ê!
Por onde começar? Quais são as classes que devem ser estendidas. Quais as interfaces que devem ser implementadas. Como desenvolver 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ê!
import net.sourceforge.floggy.persistence.Persistable; public class Phone implements Persistable { private String number; private String extension; private int type; // Mobile, Home, Work, etc ... } Entidade Phone 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ê!
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; ... } Entidade Person 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ê!
Salvando Person 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) { ... }
Editando e Salvando Person 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) { ... }
Listando todos os objetos PersistableManager 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); ... }
Filtrando os objetos public 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); ... }
Ordenando os objetos public 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());
Excluindo Person 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) { ... }
Excluindo todas entidades de um tipo definido try { // Delete all objects based on its class. PersistableManager.getInstance().deleteAll(Person.class); } catch (FloggyException e) { ... }
Excluindo todas entidades de todos os tipos try { // Delete all objects. PersistableManager.getInstance().deleteAll(); } catch (FloggyException e) { ... }
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ê!
Ajuda Documentação FAQ Lista de discussão do SF.net [email_address] 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ê!
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ê!
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ê! Obrigado! http://floggy.org

Floggy-JustJava-2008-09-10

  • 1.
    Simplicidade na persistênciade dados em JavaME Thiago Rossato Thiago Moreira
  • 2.
    Persistência em JavaMEComo 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ê!
  • 3.
    RMS Vantagens APIsimples 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 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.
    Motivação Como desenvolvedoresJavaME 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ê!
  • 5.
    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ê!
  • 6.
    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ê!
  • 7.
    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ê!
  • 8.
    Ambientes de DesenvolvimentoEclipse 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ê!
  • 9.
    Por onde começar?Quais são as classes que devem ser estendidas. Quais as interfaces que devem ser implementadas. Como desenvolver 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.
    import net.sourceforge.floggy.persistence.Persistable; publicclass Phone implements Persistable { private String number; private String extension; private int type; // Mobile, Home, Work, etc ... } Entidade Phone 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.
    import net.sourceforge.floggy.persistence.Persistable; publicclass 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; ... } Entidade Person 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.
    Salvando Person 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) { ... }
  • 13.
    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) { ... }
  • 14.
    Listando todos osobjetos PersistableManager 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); ... }
  • 15.
    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); ... }
  • 16.
    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());
  • 17.
    Excluindo Person 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) { ... }
  • 18.
    Excluindo todas entidadesde um tipo definido try { // Delete all objects based on its class. PersistableManager.getInstance().deleteAll(Person.class); } catch (FloggyException e) { ... }
  • 19.
    Excluindo todas entidadesde todos os tipos try { // Delete all objects. PersistableManager.getInstance().deleteAll(); } catch (FloggyException e) { ... }
  • 20.
    Tipos Compatíveis Tiposprimitivos 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ê!
  • 21.
    Ajuda Documentação FAQLista de discussão do SF.net [email_address] 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ê!
  • 22.
    Colaborando Código-fonte TraduçãoAgora 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.
    Agora você nãoprecisa mais escrever centenas de linhas de código de persistência. Deixe que o Floggy faça o trabalho sujo para você! Obrigado! http://floggy.org