Floggy-JustJava-2008-09-10

1,057 views
999 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,057
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Floggy-JustJava-2008-09-10

  1. 1. Simplicidade na persistência de dados em JavaME Thiago Rossato Thiago Moreira
  2. 2. Persistência em JavaME <ul><li>Como persistir os dados em um dispositivo móvel e com recursos limitados? </li></ul><ul><li>RMS </li></ul><ul><ul><li>Na maioria das vezes é a única opção ! </li></ul></ul><ul><li>Sistema de arquivos </li></ul><ul><ul><ul><li>JSR 75 (opcional) - nem todos os dispositivos suportam </li></ul></ul></ul><ul><li>Bancos de dados </li></ul><ul><ul><li>Poucas opções proprietárias destinados a determinados dispositivos </li></ul></ul>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. 3. RMS <ul><li>Vantagens </li></ul><ul><ul><li>API simples e funcional </li></ul></ul><ul><ul><li>Suportada por todos os dispositivos JavaME / MIDP </li></ul></ul><ul><li>Desvantagens </li></ul><ul><ul><li>Dados são manipulados na forma mais pura: array de bytes </li></ul></ul><ul><ul><li>Conseqüentemente a codificação torna-se trabalhosa </li></ul></ul>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. 4. Motivação <ul><li>Como desenvolvedores JavaME não agüentávamos mais escrever tantas linhas para persistir dados com RMS </li></ul><ul><li>Na época (2004/2005) não encontramos nenhuma solução que atendesse aos requisitos de um framework de persistência </li></ul>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. 5. Floggy <ul><li>O que é? </li></ul><ul><ul><li>Framework de persistência de dados orientado a objetos para JavaME </li></ul></ul><ul><ul><li>Permite ao desenvolvedor trabalhar com persistência em alto nível </li></ul></ul><ul><li>O que não é? </li></ul><ul><ul><li>Um banco de dados para JavaME </li></ul></ul>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. 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. 7. Estrutura <ul><li>Pacote net.sourceforge.floggy.persistence </li></ul><ul><li>Persistência </li></ul><ul><ul><li>Persistable </li></ul></ul><ul><ul><li>PersistableManager </li></ul></ul><ul><li>Busca </li></ul><ul><ul><li>ObjsetSet </li></ul></ul><ul><ul><li>Filter </li></ul></ul><ul><ul><li>Comparator </li></ul></ul><ul><li>Exceção </li></ul><ul><ul><li>FloggyException </li></ul></ul>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. 8. Ambientes de Desenvolvimento <ul><li>Eclipse </li></ul><ul><li>Netbeans </li></ul><ul><li>Ant </li></ul><ul><li>Maven </li></ul><ul><li>Linha de Comando </li></ul>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. 9. <ul><li>Por onde começar? </li></ul><ul><li>Quais são as classes que devem ser estendidas. </li></ul><ul><li>Quais as interfaces que devem ser implementadas. </li></ul>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. 10. <ul><li>import net.sourceforge.floggy.persistence.Persistable; </li></ul><ul><li>public class Phone implements Persistable { </li></ul><ul><li>private String number; </li></ul><ul><li>private String extension; </li></ul><ul><li>private int type; // Mobile, Home, Work, etc </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>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. 11. <ul><li>import net.sourceforge.floggy.persistence.Persistable; </li></ul><ul><li>public class Person implements Persistable { </li></ul><ul><li>private String name; </li></ul><ul><li>private Date birthday; </li></ul><ul><li>private char gender; </li></ul><ul><li>private Phone[] phones; </li></ul><ul><li>// Transient and static fields aren't persisted </li></ul><ul><li>private transient int age; </li></ul><ul><li>public static int SOME_STATIC_FIELD = 1; </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>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. 12. Salvando <ul><li>Person p = new Person(); </li></ul><ul><li>p.setName(...); </li></ul><ul><li>p.setBirthday(...); </li></ul><ul><li>p.setGender(...); </li></ul><ul><li>p.setPhones(...); </li></ul><ul><li>try { </li></ul><ul><li>// A new object ID is generated. </li></ul><ul><li>// You can use it in future operations. </li></ul><ul><li>int id = PersistableManager.getInstance().save(p); </li></ul><ul><li>} catch (FloggyException e) { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  13. 13. Editando e Salvando <ul><li>Person person = new Person(); </li></ul><ul><li>try { </li></ul><ul><li>// To load an object, use the object ID </li></ul><ul><li>// generated previously by a save() operation. </li></ul><ul><li>PersistableManager.getInstance().load(person, id); </li></ul><ul><li>// Now, edit and save the object. </li></ul><ul><li>// The same object ID is returned. </li></ul><ul><li>person.setName(...); </li></ul><ul><li>id = PersistableManager.getInstance().save(person); </li></ul><ul><li>} catch (FloggyException e) { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  14. 14. Listando todos os objetos <ul><li>PersistableManager pm = PersistableManager.getInstance(); </li></ul><ul><li>ObjectSet persons = pm.find(Person.class, null, null); </li></ul><ul><li>for (int i = 0; i < persons.size(); i++) { </li></ul><ul><li>Person p = (Person) persons.get(i); </li></ul><ul><li>... </li></ul><ul><li>} </li></ul><ul><li>Ou dependendo do contexto use o método sobrecarregado </li></ul><ul><li>Person person = new Person(); </li></ul><ul><li>PersistableManager pm = PersistableManager.getInstance(); </li></ul><ul><li>ObjectSet persons = pm.find(Person.class, null, null); </li></ul><ul><li>for (int i = 0; i < persons.size(); i++) { </li></ul><ul><li>persons.get(i, person); </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  15. 15. Filtrando os objetos <ul><li>public class MaleFilter implements net.sourceforge.floggy.persistence.Filter { </li></ul><ul><li>public boolean matches(Persistable persistable) { </li></ul><ul><li>Person p = (Person) persistable; </li></ul><ul><li>return p.getGender() == 'M'; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>ObjectSet persons = pm.find(Person.class, new MaleFilter(), null); </li></ul><ul><li>for (int i = 0; i < persons.size(); i++) { </li></ul><ul><li>Person p = (Person) persons.get(i); </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  16. 16. Ordenando os objetos <ul><li>public class AgeComparator implements net.sourceforge.floggy.persistence.Comparator { </li></ul><ul><li>public int compare(Persistable o1, Persistable o2) { </li></ul><ul><li>Person p1 = (Person) o1; Person p2 = (Person) o2; </li></ul><ul><li>if (p1.getBirthday().getTime() < p2.getBirthday().getTime()) { </li></ul><ul><li>return PRECEDES; </li></ul><ul><li>} </li></ul><ul><li>if (p1.getBirthday().getTime() > p2.getBirthday().getTime()) { </li></ul><ul><li>return FOLLOWS; </li></ul><ul><li>} </li></ul><ul><li>return EQUIVALENT; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>// Sorting persons by their age (younger first) </li></ul><ul><li>ObjectSet persons = pm.find(Person.class, null, new AgeCompator()); </li></ul>
  17. 17. Excluindo <ul><li>Person person = new Person(); </li></ul><ul><li>try { </li></ul><ul><li>// To load an object, use the object ID </li></ul><ul><li>// generated previously by a save() operation. </li></ul><ul><li>PersistableManager.getInstance().load(person, id); </li></ul><ul><li>// Delete the object. </li></ul><ul><li>PersistableManager.getInstance().delete(person); </li></ul><ul><li>} catch (FloggyException e) { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  18. 18. Excluindo todas entidades de um tipo definido <ul><li>try { </li></ul><ul><li>// Delete all objects based on its class. </li></ul><ul><li>PersistableManager.getInstance().deleteAll(Person.class); </li></ul><ul><li>} catch (FloggyException e) { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  19. 19. Excluindo todas entidades de todos os tipos <ul><li>try { </li></ul><ul><li>// Delete all objects. </li></ul><ul><li>PersistableManager.getInstance().deleteAll(); </li></ul><ul><li>} catch (FloggyException e) { </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  20. 20. Tipos Compatíveis <ul><li>Tipos primitivos e wrappers : </li></ul><ul><ul><li>int, ... </li></ul></ul><ul><li>Tipos da classe java.lang: </li></ul><ul><ul><li>String, StringBuffer </li></ul></ul><ul><li>Tipos da classe java.util: </li></ul><ul><ul><li>Date, Calendar, Vector, TimeZone, Stack </li></ul></ul><ul><li>Arrays unidimensional </li></ul>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. 21. Ajuda <ul><li>Documentação </li></ul><ul><li>FAQ </li></ul><ul><li>Lista de discussão do SF.net </li></ul><ul><ul><li>[email_address] </li></ul></ul><ul><li>Sistema de gestão de incidentes do SF.net </li></ul>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. 22. Colaborando <ul><li>Código-fonte </li></ul><ul><li>Tradução </li></ul>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. 23. 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

×