La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo.

Presentaciones similares


Presentación del tema: "DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo."— Transcripción de la presentación:

1 DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo

2 Introducción RecordStore Record AGENDA

3 La información hasta ahora manejada ha sido de tipo no persistente, de tal forma que al terminar la aplicación y volverla a ejecutar, no se pueden recuperar los datos. Para lograr persistencia se requiere de la manipulación de archivos, elemento que no está presente en la mayoría de los dispositivos móviles con CLDC/MIDP. INTRODUCCIÓN

4 Para lograr la persistencia se requiere de un motor de persistencia conocida como RMS (Record Management System) que no es otra cosa que una pequeña base de datos empotrada en el dispositivo. La unidad básica de almacenamiento de la información es el registro (record), ubicado en un almacén de registros (record store). INTRODUCCIÓN

5 Sencillo sistema de almacenamiento. Almacenamiento permanente. Compuesto por Record Stores. Registro accesible desde cualquier MIDlet. RMS

6 Antes de operar un registro se debe abrir o crear. Las operaciones pueden ser de lectura y escritura. Se utiliza el paquete javax.microedition.rms.* RMS

7 Colección de registros La plataforma mantiene su integridad Borrar MIDlet borra RecordStore Manipulación de RecordStore: openRecordStore: abre/crea un RecordStore openRecordStore closeRecordStore: cierra un RecordStore closeRecordStore deleteRecordStore: borra un RecordStore deleteRecordStore RecordStore

8 Identificados por recordID:int 1er registros recordID =1 Manipulación de registros: addRecord: añade un registro addRecord deleteRecord: borra un registro deleteRecord getRecord: obtiene los datos de un registro getRecord setRecord: establece los datos de un registro setRecord Records

9 Record Store

10 Se cuentan con las interfaces de: RecordEnumeration RecordComparator RecordFilters RecordListener Los datos a agregar deben estar en formato de un arreglo de bytes rs.addRecord(bytes, 0, bytes.length) RMS

11 La interface RecordListener permite monitorizar los cambios en un RecordStore. Cuando se modifica un RecordStore se lanza un evento al RecordListener asociado. Hay 3 tipos de eventos: recordAdded(RecordStore rs,int recordId) recordChanged(RecordStore rs,int recordId) recordDeleted(RecordStore rs,int recordId) RMS

12 La clase RecordStore no dispone de ningún constructor, pero posee el método estático: static RecordStore openRecordStore(String name, boolean createIfNeccesary) Este método nos abre el Record Store con el nombre pasado como parámetro o nos crea uno si no existe cuando el parámetro createIfNeccesary es true. Además, existen otras dos versiones alternativas de este método: static RecordStore openRecordStore(String name, boolean createIfNeccesary, int autorización, boolean writable) static RecordStore openRecordStore(String name, String vendorName, String suiteName) CREACION DE UN RECORD STORE

13 El primero de ellos usa los siguientes parámetros: Autorización: AUTHMODE_PRIVATE: Sólo permite el acceso al Record Store a la MIDlet suite que lo creó. AUTHMODE_ANY: Permite el acceso a cualquier MIDlet del dispositivo. Este modo hay que usarlo con mucho cuidado ya que podría provocar problemas de privacidad y seguridad. writable: Indicamos si el Record Store puede ser modificado por cualquier MIDlet que pueda acceder a él. El segundo método lo usaremos para abrir un Record Store que está asociado a alguna MIDlet suite especificada por los parámetros vendorName y suiteName. El acceso vendrá limitado por el tipo de autorización del Record Store cuando fue creado CREACION DE UN RECORD STORE

14 Cuándo terminemos de usar el Record Store, hay que cerrar la comunicación con él. Esto lo haremos mediante el método: public void closeRecordStore() throws RecordStoreNotFoundException, RecordStoreException Para cerrar correctamente la comunicación con un Record Store, es necesario invocar este método tantas veces como llamadas se haya realizado al método openRecordStore(). CIERRE DE UN RECORD STORE

15 for (int i=1;i<=rs.getNumRecords();i++){ longitud = rs.getRecordSize(i); registro = rs.getRecord(i); System.out.println(Registro +i+: + new String(registro,0,longitud)); } Interfaz RecordEnumeration RECORRIENDO UN RECORD STORE

16 RecordEnumeration re = rs.enumerateRecords(null,null,false); while (re.hasNextElement()){ registro = re.nextRecord(); //Realizo las operaciones que quiera... } RECORRIENDO UN RECORD STORE

17 Para realizar una búsqueda eficiente de registros en un Record Store vamos a utilizar la interfaz RecordFilter. Esta interfaz se encarga de devolver al RecordEnumeration únicamente los registros que coincidan con un determinado patrón de búsqueda. Para usar esta interfaz hemos de implementar necesariamente el método: public boolean matches(byte [] candidato) que se encarga de comparar el registro candidato pasado como parámetro con el valor que queremos buscar y devolvemos true en caso de que coincidan. En el siguiente ejemplo vamos a crear un RecordFilter y así podremos ver su funcionamiento BUSQUEDA EN UN RECORD STORE

18 public class Filtro implements RecordFilter{ private String cadenaabuscar = null; public Filtro(String cadena){ this.cadenaabuscar = cadena.toLowerCase(); } public boolean matches(byte[] candidato){ boolean resultado = false; String cadenacandidata; ByteArrayInputStream bais; DataInputStream dis; try{ bais = new ByteArrayInputStream(candidato); dis = new DataInputStream(bais); cadenacandidata = dis.readUTF().toLowerCase(); } catch (Exception e){ return false; } if ((cadenacandidata != null) && (cadenacandidata.indexOf(cadenaabuscar) != -1)) return true; else return false; } BUSQUEDA EN UN RECORD STORE

19 Si usamos este RecordFilter a la hora de invocar a enumerateRecords(): //Creo un objeto de tipo RecordFilter Filtro buscar = new Filtro(Antonio); //Obtengo el RecordEnumeration usando el filtro anterior RecordEnumeration re = rs.enumerateRecords(buscar,null,false); //Si encuentro algún registro dado el patrón de búsqueda if (re.numRecords() > 0) System.out.println(Patron Antonio encontrado); el resultado será que el RecordEnumeration devuelto sólo contendrá los registros en los que se haya encontrado el patrón de búsqueda. BUSQUEDA EN UN RECORD STORE

20 La ordenación de registros se realiza a través del interfaz RecordComparator. Esta interfaz funciona básicamente igual que el RecordFilter. Existe un método public int compare(byte[] reg1, byte[] reg2) que ha de ser implementado obligatoriamente. Este método es el encargado de realizar la comparación entre los campos que deseemos de los registros y el entero que nos devuelve nos indica si reg1 va antes o después que reg2. El valor devuelto por este método puede ser: EQUIVALENT: Los registros pasados al método compare son equivalentes. FOLLOWS: El primer registro sigue al segundo. PRECEDES: El primer registro precede al segundo. ORDENACION DE UN RECORD STORE

21 La ordenación de registros se realiza a través del interfaz RecordComparator. Esta interfaz funciona básicamente igual que el RecordFilter. Existe un método public int compare(byte[] reg1, byte[] reg2) que ha de ser implementado obligatoriamente. Este método es el encargado de realizar la comparación entre los campos que deseemos de los registros y el entero que nos devuelve nos indica si reg1 va antes o después que reg2. El valor devuelto por este método puede ser: EQUIVALENT: Los registros pasados al método compare son equivalentes. FOLLOWS: El primer registro sigue al segundo. PRECEDES: El primer registro precede al segundo. ORDENACION DE UN RECORD STORE

22 public class Compara implements RecordComparator{ public boolean compare(byte[] reg1, byte[] reg2){ ByteArrayInputStream bais; DataInputStream dis; String cad1, cad2; try{ bais = new ByteArrayInputStream(reg1); dis = new DataInputStream(bais); cad1 = dis.readUTF(); bais = new ByteArrayInputStream(reg2); dis = new DataInputStream(bais); cad2 = dis.readUTF(); int resultado = cad1.compareTo(cad2); if (resultado == 0) return RecordComparator.EQUIVALENT; else if (result < 0) return RecordComparator.PRECEDES; else return RecordComparator.FOLLOWS; } catch (Exception e){ return RecordComparator.EQUIVALENT; } } } ORDENACION DE UN RECORD STORE

23 Esta clase puede usarse a la hora de crear el RecordEnumeration para recorrer los elementos de manera ordenada: //Creo un objeto de tipo RecordComparator Compara comp = new Compara(); //Obtengo el RecordEnumeration usando el objeto anterior, y // con los registros ordenados RecordEnumeration re = rs.enumerateRecords(null,comp,false); ORDENACION DE UN RECORD STORE


Descargar ppt "DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo."

Presentaciones similares


Anuncios Google