PDF de programación - Almacenamiento Persistente - Programación de Dispositivos Móviles con J2ME

Imágen de pdf Almacenamiento Persistente - Programación de Dispositivos Móviles con J2ME

Almacenamiento Persistente - Programación de Dispositivos Móviles con J2MEgráfica de visualizaciones

Publicado el 14 de Enero del 2017
802 visualizaciones desde el 14 de Enero del 2017
185,2 KB
29 paginas
Creado hace 17a (03/10/2006)
Almacenamiento Persistente

Juan Manuel Fernández Luna
Departamento de Ciencias de la Computación e
Inteligencia Artificial

Programación de Dispositivos Móviles con J2ME
Septiembre/Octubre de 2006

Introducción

 MIDP ofrece un mecanismo para que los

MIDlets almacenen datos de manera
persistente y los recuperen posteriormente.

 Este mecanismo de almacenamiento

persistente, llamado Record Management
System (RMS), se modela mediante una
“base de datos” simple basada en registros.

Persistencia en MIDP

2

Almacén de registros

 Un almacén de registros (record store) consiste en
una colección de registros que persistirán a lo largo
de múltiples invocaciones de un MIDlet.

 Los almacenes de registros se crean en zonas

dependientes de la plataforma, que no están
expuestos directamente a los MIDlets.

 El espacio de nombres del almacén de registro se

controla en el ámbito del MIDlet Suite.
 Los MIDlets dentro de una MIDlet suite tienen permitido
crear múltiples almacenes y acceder a ellos. El resto no.

Persistencia en MIDP

3

Almacén de registros

 Sólo se permite la manipulación de los

almacenes de registros a las suites de MIDlets
que los poseen.

 No se ofrece ningún mecanismo para
compartir registros entre MIDlets que
pertenezcan a suites diferentes.

Persistencia en MIDP

4

Almacén de registros

 Los nombres de los almacenes de registros es
sensible a las mayúsculas y puede consistir en
cualquier combinación de hasta 32 caracteres
Unicode.

 No se suministran operaciones de bloqueo.
 La implementación de los almacenes de registros

asegura que todas las operaciones sobre los
mismos son atómicas, síncronas y serializadas, por
lo que no puede llegar a ocurrir que se corrompan
con accesos múltiples.

Persistencia en MIDP

5

Almacén de registros

 El almacén guarda el día y hora de última

modificación.

 Mantiene una versión (cada vez que hay un

cambio se incrementa ésta).

 Esto es útil para sincronización de

aplicaciones.

 Cuando una aplicación se elimina del

dispositivo también se elimina los almacenes
que tuviera.

Persistencia en MIDP

6

Registros

 Registros: vectores de bytes.
 Se puede usar: DataInputStream y

DataOutputStream, así como
ByteArrayInputStream y
ByteArrayOutputStream para empaquetar
y desmpaquetar diferentes tipos de datos en y
desde un vector de bytes.

Persistencia en MIDP

7

Registros

 Los registros de identifican unívocamente dentro del

registro al que pertenecen por medio de su
recordId, que es un valor entero.

 RecordId se usa como clave primaria del registro.
 El primer registro que se crea en un almacén tendrán

un recordId igual a 1, y cada nuevo registro se
incrementará en una unidad.

 Los MIDlets pueden crear sus índices utilizando la

clase RecordEnumeration.

Persistencia en MIDP

8

Almacén de registros 1

Primary key
Almacén de registros 2
Record ID

Data

(int)

Almacén de registros 3

Primary key
Record ID

(byte[])

Registro
Registro

(int)

1
2

Registro
Registro

Registro
Registro

Data

(byte[])

(int)

Primary key
Record ID

Data

(byte[])

Clases para la persistencia

 Paquete:

 javax.microedition.rms

 Clases:

 RecordStore, RecordEnumeration

 Interfaces:

 RecordComparator, RecordFilter, RecordListener

 Excepciones:

 RecordStoreException, RecordStoreFullException,

RecordStoreNotFoundException, InvalidRecordException,
RecordStoreNotOpenException

Persistencia en MIDP

10

Gestión del almacén

 openRecordStore()
 closeRecordStore()
 listRecordStore()
 deleteRecordStore()
 getVersion()
 getLastModified()

Persistencia en MIDP

11

Gestión del almacén

 Apertura de un almacén:

static RecordStore openRecordStore

(recordStoreName, createIfNecessary)

 Abre (y en su caso crea) un almacén de

registros asociado con la correspondiente
suite MIDlet.
 Excepciones:

 RecordStoreException, RecordStoreFullException,

RecordStoreNotFoundException

Persistencia en MIDP

12

Gestión del almacén

 Cierre de un almacén:

void closeRecordStore()
 Excepciones:

 RecordStoreException,

RecordStoreNotOpenException

 Listado de almacenes:

staticString[] listRecordStores()

 Devuelve un vector de nombres de almacenes

de registros poseídos por el MIDlet suite.

Persistencia en MIDP

13

Gestión del almacén

 Un almacén de registros debería cerrarse tan

pronto como se acabe de usar, ya que
consume recursos.

 El método closeRecordStore() realmente no

cierra el almacén, sino que informa que el
proceso o hilo ha dejado de usarlo.

 El almacén se cierra sólo cuando todos los

procesos / hilos que lo utilizaban han
llamado al método de cierre.

Gestión del almacén

 Borrado de un almacén:

static void deleteRecordStore (recordStoreName)

 Excepciones:

 RecordStoreException, RecordStoreNotFoundException

 Versión (se incrementa en uno en cada modificación del almacén)

int getVersion()

 Fecha de última modificación:

long getLastModified()

Persistencia en MIDP

15

Manipulación de registros

 Manipulación básica:

 addRecord(), deleteRecord(), and getRecord(),

setRecord()

 Información sobre un almacén:

 getNumRecords() , getRecordSize()

 Información sobre un registro:

 getSize(), getSizeAvailable()

 Enumeración:

 getNextRecordID()

Persistencia en MIDP

16

Manipulación de registros

 Añadir un registro:

int addRecord(byte[]data, intoffset, intnumBytes)

 Añade un nuevo registro al almacén.
 Se devuelve el recorId del nuevo registro.

 Borrar un registro:

void deleteRecord(int recordId)
 Se borra el registro indicado. No se libera espacio,
sino que se añade a la lista de registros libres para
su posterior uso. No se utilizan los antiguos
recordIds.

Persistencia en MIDP

17

Manipulación de registros:

 Obtener un registro:

int getRecord(intrecordId, byte[]buffer, intoffset)

 Devuelve el dato almacenado en el registro

dado.

 Devuelve el número de bytes copiados en el

buffer.

byte[] getRecord(intrecordId)

Persistencia en MIDP

18

Manipulación de registros:

 Asignar valor a un registro:
void setRecord(intrecordId, byte[]newData, intoffset,

I

intnBytes)

 Asigna nuevos datos al registro ya

existente.

Persistencia en MIDP

19

Monitorización de cambios

 RecordListener

 recordAdded(recordStore, recordID)
 recordChanged(recordStore, recordID)
 recordDeleted(recordStore, recordID)

 RecordStore

 addRecordListener(listener)
 removeRecordListener(listener)

Persistencia en MIDP

20

Información de tamaño

 Número de registros:

int getNumRecords()

 Devuelve el número de registros en el

almacén.

 Tamaño del registro:

int getRecordSize(intrecordId)

 Devuelve el tamaño (en bytes) de los

datos del MIDlet disponible en el registro.

Persistencia en MIDP

21

Información de tamaño.

 getSize

int getSize()
 Devuelve la cantidad de espacio, en bytes,

que ocupa el registro.

 getSizeAvailable
int getSizeAvailable
getSizeAvailable()
getSizeAvailable
getSizeAvailable

 Devuelve la cantidad de espacio adicional (en
bytes) disponible para que el almacén crezca.

Persistencia en MIDP

22

Enumeración

 getNextRecordID

int getNextRecordID()

 Devuelve el recordId del siguiente registro

que será añadido al almacén.

Persistencia en MIDP

23

Emumeración

 Interfaz que mantiene una secuencia de

los recordids de los registros
almacenados.

 Métodos:

 hasNextElement(), hasPreviousElement()
 nextRecord(), nextRecordId()
 previousRecord(), previousRecordId()
 numRecords()
 …

Persistencia en MIDP

24

Emumeración

try {
RecordEnumeration re =

rs.enumerateRecords(null,null,false) ;

System.out.println("Hay " + re.numRecords()

+ " en RecordStore") ;

while(re.hasNextElement()) {

byte tmp[] = re.nextRecord() ;
System.out.println(tmp[0] + " " + tmp[1]) ;

}

} catch (Exception e) { …}

Persistencia en MIDP

25

Filtrado de registros

 RecordFilter es un interfaz que se

utiliza para seleccionar registros (para
actualizarlos o eliminarlos), mediante
algún criterio.

 Se debe implementar el siguiente

método:
boolean matches(byte[]candidate)

 Devuelve verdadero si el candidato se

corresponde con el criterio.

Comparación de registros

 Interfaz que define un comparador de dos

registros para determinar un orden relativo
entre registros.

 Define un método para comparar.

int compare(byte[]rec1, byte[]rec2)

 Devuelve:

 PROCEEDS, FOLLOWS, EQUIVALENT

Persistencia en MIDP

27

Comparación de registros

RecordComparator c = new AddressRecordComparator();

// clase que implementa RecordComparator

if (c.compare(recordStore.getRecord(rec1),

recordStore.getRecord(rec2)) ==
RecordComparator.PRECEDES)

return rec1;

Persistencia en MIDP

28

Fuentes

 http://developers.sun.com/techtopics

/mobility/articles/databaserms
  • Links de descarga
http://lwp-l.com/pdf808

Comentarios de: Almacenamiento Persistente - Programación de Dispositivos Móviles con J2ME (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad