Floggy-GUJavaSC-2008-09-20
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,707
On Slideshare
1,704
From Embeds
3
Number of Embeds
2

Actions

Shares
Downloads
18
Comments
0
Likes
1

Embeds 3

http://www.slideshare.net 2
http://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Simplicidade na persistência de dados em JavaME Thiago Rossato Thiago Moreira Priscila Tavares Lugon
  • 2. 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ê! 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.
  • 3. 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ê!
  • 4. 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ê!
  • 5. 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ê!
  • 6. Exemplo com RMS
    • public 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ê!
  • 7. Exemplo com RMS
    • public 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ê!
  • 8. 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ê!
  • 9. 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ê!
  • 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ê!
  • 11. 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ê!
  • 12. 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ê!
  • 13. 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ê!
  • 14.
    • 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ê!
  • 15.
    • 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ê!
  • 16.
    • 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ê! Interface de marcação identifica as classes persistentes.
  • 17.
    • 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;
    • ...
    • }
    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ê!
  • 18.
    • 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;
    • ...
    • }
    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ê! Atributos identificados como transientes e atributos estáticos não serão persistidos.
  • 19. Salvando
    • Person p = new Person();
    • p.setName(...);
    • p.setBirthday(...);
    • p.setGender(...);
    • p.setPhones(...);
    • try {
    • int id = PersistableManager.getInstance().save(p);
    • } catch (FloggyException e) {
    • ...
    • }
  • 20. Salvando
    • Person 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.
  • 21. Editando e Salvando
    • Person person = new Person();
    • try {
    • PersistableManager.getInstance().load(person, id);
    • person.setName(...);
    • id = PersistableManager.getInstance().save(person);
    • } catch (FloggyException e) {
    • ...
    • }
  • 22. Editando e Salvando
    • Person 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)
  • 23. 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 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);
    • ...
    • }
  • 24. 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);
    • ...
    • }
  • 25. 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;
    • }
    • }
    • ObjectSet persons = pm.find(Person.class, null, new AgeCompator());
  • 26. Excluindo
    • Person person = (…);
    • try {
    • PersistableManager.getInstance().delete(person);
    • } catch (FloggyException e) {
    • ...
    • }
  • 27. Excluindo todas entidades de um tipo definido
    • try {
    • PersistableManager.getInstance().deleteAll(Person.class);
    • } catch (FloggyException e) {
    • ...
    • }
  • 28. Excluindo todas entidades de todos os tipos
    • try {
    • PersistableManager.getInstance().deleteAll();
    • } catch (FloggyException e) {
    • ...
    • }
  • 29. Comparaçã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ê! 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
  • 30. Onde obter informações?
    • Site
      • 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ê!
  • 31. 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ê!
  • 32. 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ê!
  • 33. 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ê!
  • 34. 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