Floggy-IIBoot-2008-09-25
Upcoming SlideShare
Loading in...5
×
 

Floggy-IIBoot-2008-09-25

on

  • 1,682 views

 

Statistics

Views

Total Views
1,682
Views on SlideShare
1,680
Embed Views
2

Actions

Likes
1
Downloads
19
Comments
0

2 Embeds 2

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

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Floggy-IIBoot-2008-09-25 Floggy-IIBoot-2008-09-25 Presentation Transcript

  • Simplicidade na persistência de dados em JavaME Thiago Rossato Thiago Moreira Priscila Tavares Lugon
  • 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.
  • 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ê!
  • 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ê!
  • 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ê!
  • 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ê!
  • 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ê!
  • 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ê!
  • 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ê!
  • 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ê!
  • Estrutura 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 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.
    • 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ê!
    • 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.
  • Salvando
    • Person p = new Person();
    • p.setName(...);
    • p.setBirthday(...);
    • p.setGender(...);
    • p.setPhones(...);
    • try {
    • int id = PersistableManager.getInstance().save(p);
    • } catch (FloggyException e) {
    • ...
    • }
  • 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.
  • Editando e Salvando
    • Person person = new Person();
    • try {
    • PersistableManager.getInstance().load(person, id);
    • person.setName(...);
    • id = PersistableManager.getInstance().save(person);
    • } catch (FloggyException e) {
    • ...
    • }
  • 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)
  • 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);
    • ...
    • }
  • 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;
    • }
    • }
    • ObjectSet persons = pm.find(Person.class, null, new AgeCompator());
  • Excluindo
    • Person person = (…);
    • try {
    • PersistableManager.getInstance().delete(person);
    • } catch (FloggyException e) {
    • ...
    • }
  • Excluindo todas entidades de um tipo definido
    • try {
    • PersistableManager.getInstance().deleteAll(Person.class);
    • } catch (FloggyException e) {
    • ...
    • }
  • Excluindo todas entidades de todos os tipos
    • try {
    • PersistableManager.getInstance().deleteAll();
    • } catch (FloggyException e) {
    • ...
    • }
  • 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
  • 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ê!
  • 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ê!
  • 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ê!
  • Floggy na mídia! 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ê!
  • Mapa de Acessos 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ê!
  • Estatísticas de Acesso 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