DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME...

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

Transcript of DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME...

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

DESARROLLO DE SOLUCIONES

EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN

DESARROLLO DE SOLUCIONES

EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN

APLICACIONES MOVILESCON J2ME

RMS

Ing. Ronald Criollo

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

Introducción RecordStore Record

AGENDA

AGENDA

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

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

INTRODUCCIÓN

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

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

INTRODUCCIÓN

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

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

RMSRMS

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

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.*

RMSRMS

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

Colección de registros La plataforma mantiene su integridad Borrar MIDlet borra RecordStore Manipulación de RecordStore:

openRecordStore: abre/crea un RecordStore

closeRecordStore: cierra un RecordStore deleteRecordStore: borra un RecordStore

RecordStoreRecordStore

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

Identificados por recordID:int 1er registros recordID =1 Manipulación de registros:

addRecord: añade un registro deleteRecord: borra un registro getRecord: obtiene los datos de un

registro setRecord: establece los datos de un

registro

RecordsRecords

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

Record StoreRecord Store

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

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)

RMSRMS

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

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)

RMSRMS

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

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 STORECREACION DE UN RECORD STORE

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

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 STORECREACION DE UN RECORD STORE

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

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 STORECIERRE DE UN RECORD STORE

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

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 STORERECORRIENDO UN RECORD STORE

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

RecordEnumeration re = rs.enumerateRecords(null,null,false);

while (re.hasNextElement()){ registro = re.nextRecord(); //Realizo las operaciones que quiera ...

}

RECORRIENDO UN RECORD STORERECORRIENDO UN RECORD STORE

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

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 STOREBUSQUEDA EN UN RECORD STORE

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

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 STOREBUSQUEDA EN UN RECORD STORE

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

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 STOREBUSQUEDA EN UN RECORD STORE

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

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 STOREORDENACION DE UN RECORD STORE

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

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 STOREORDENACION DE UN RECORD STORE

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

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 STOREORDENACION DE UN RECORD STORE

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

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 STOREORDENACION DE UN RECORD STORE