Recordecpsas PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 29

Almacenamiento Persistente

Juan Manuel Fernndez Luna


Departamento de Ciencias de la Computacin e
Inteligencia Artificial
Programacin de Dispositivos Mviles con J2ME
Septiembre/Octubre de 2006

Introduccin
 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

Almacn de registros
 Un almacn de registros (record store) consiste en
una coleccin de registros que persistirn a lo largo
de mltiples invocaciones de un MIDlet.
 Los almacenes de registros se crean en zonas
dependientes de la plataforma, que no estn
expuestos directamente a los MIDlets.
 El espacio de nombres del almacn de registro se
controla en el mbito del MIDlet Suite.
 Los MIDlets dentro de una MIDlet suite tienen permitido
crear mltiples almacenes y acceder a ellos. El resto no.
Persistencia en MIDP

Almacn de registros
 Slo se permite la manipulacin de los
almacenes de registros a las suites de MIDlets
que los poseen.
 No se ofrece ningn mecanismo para
compartir registros entre MIDlets que
pertenezcan a suites diferentes.

Persistencia en MIDP

Almacn de registros
 Los nombres de los almacenes de registros es
sensible a las maysculas y puede consistir en
cualquier combinacin de hasta 32 caracteres
Unicode.
 No se suministran operaciones de bloqueo.
 La implementacin de los almacenes de registros
asegura que todas las operaciones sobre los
mismos son atmicas, sncronas y serializadas, por
lo que no puede llegar a ocurrir que se corrompan
con accesos mltiples.
Persistencia en MIDP

Almacn de registros
 El almacn guarda el da y hora de ltima
modificacin.
 Mantiene una versin (cada vez que hay un
cambio se incrementa sta).
 Esto es til para sincronizacin de
aplicaciones.
 Cuando una aplicacin se elimina del
dispositivo tambin se elimina los almacenes
que tuviera.
Persistencia en MIDP

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

Registros
 Los registros de identifican unvocamente 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 almacn tendrn
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

Almacn de registros 1
Primary key
Almacn
de registros 2

Registro
Registro

Record ID
Data
(int) Primary key
(byte[])
Almacn
de registros
3
Record ID
Data
(int)Primary key(byte[])

Registro
Registro

Record ID
(int)
Registro
Registro

1
2

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

Gestin del almacn









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

Persistencia en MIDP

11

Gestin del almacn


 Apertura de un almacn:
static RecordStore openRecordStore
(recordStoreName, createIfNecessary)

 Abre (y en su caso crea) un almacn de


registros asociado con la correspondiente
suite MIDlet.
 Excepciones:
 RecordStoreException, RecordStoreFullException,
RecordStoreNotFoundException
Persistencia en MIDP

12

Gestin del almacn


 Cierre de un almacn:
void closeRecordStore()
 Excepciones:
 RecordStoreException,
RecordStoreNotOpenException

 Listado de almacenes:
static String[] listRecordStores()
 Devuelve un vector de nombres de almacenes
de registros posedos por el MIDlet suite.
Persistencia en MIDP

13

Gestin del almacn


 Un almacn de registros debera cerrarse tan
pronto como se acabe de usar, ya que
consume recursos.
 El mtodo closeRecordStore() realmente no
cierra el almacn, sino que informa que el
proceso o hilo ha dejado de usarlo.
 El almacn se cierra slo cuando todos los
procesos / hilos que lo utilizaban han
llamado al mtodo de cierre.

Gestin del almacn


 Borrado de un almacn:
static void deleteRecordStore (recordStoreName)

 Excepciones:

 RecordStoreException, RecordStoreNotFoundException

 Versin

(se incrementa en uno en cada modificacin del almacn)

int getVersion()

 Fecha de ltima modificacin:


long getLastModified()
Persistencia en MIDP

15

Manipulacin de registros
 Manipulacin bsica:
 addRecord(), deleteRecord(), and getRecord(),
setRecord()

 Informacin sobre un almacn:


 getNumRecords() , getRecordSize()

 Informacin sobre un registro:


 getSize(), getSizeAvailable()

 Enumeracin:
 getNextRecordID()
Persistencia en MIDP

16

Manipulacin de registros
 Aadir un registro:
int addRecord(byte[] data, int offset, int numBytes)

 Aade un nuevo registro al almacn.


 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 aade a la lista de registros libres para
su posterior uso. No se utilizan los antiguos
recordIds.
Persistencia en MIDP

17

Manipulacin de registros:
 Obtener un registro:
int getRecord(int recordId, byte[] buffer, int offset)
 Devuelve el dato almacenado en el registro
dado.
 Devuelve el nmero de bytes copiados en el
buffer.

byte[] getRecord(int recordId)

Persistencia en MIDP

18

Manipulacin de registros:
 Asignar valor a un registro:
void setRecord(int recordId, byte[] newData, int offset,
I

int nBytes)

 Asigna nuevos datos al registro ya


existente.

Persistencia en MIDP

19

Monitorizacin de cambios
 RecordListener
 recordAdded(recordStore, recordID)
 recordChanged(recordStore, recordID)
 recordDeleted(recordStore, recordID)

 RecordStore
 addRecordListener(listener)
 removeRecordListener(listener)

Persistencia en MIDP

20

Informacin de tamao
 Nmero de registros:
int getNumRecords()

 Devuelve el nmero de registros en el


almacn.

 Tamao del registro:


int getRecordSize(int recordId)

 Devuelve el tamao (en bytes) de los


datos del MIDlet disponible en el registro.
Persistencia en MIDP

21

Informacin de tamao.
 getSize
int getSize()
 Devuelve la cantidad de espacio, en bytes,
que ocupa el registro.

 getSizeAvailable

int getSizeAvailable()
getSizeAvailable
 Devuelve la cantidad de espacio adicional (en
bytes) disponible para que el almacn crezca.
Persistencia en MIDP

22

Enumeracin
 getNextRecordID
int getNextRecordID()
 Devuelve el recordId del siguiente registro
que ser aadido al almacn.

Persistencia en MIDP

23

Emumeracin
 Interfaz que mantiene una secuencia de
los recordids de los registros
almacenados.
 Mtodos:






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

Persistencia en MIDP

24

Emumeracin
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
algn criterio.
 Se debe implementar el siguiente
mtodo:
boolean matches(byte[] candidate)

 Devuelve verdadero si el candidato se


corresponde con el criterio.

Comparacin de registros
 Interfaz que define un comparador de dos
registros para determinar un orden relativo
entre registros.
 Define un mtodo para comparar.
int compare(byte[] rec1, byte[] rec2)
 Devuelve:
 PROCEEDS, FOLLOWS, EQUIVALENT

Persistencia en MIDP

27

Comparacin 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

También podría gustarte