miércoles, 20 de octubre de 2010

Java ME y DB Objects III: Buscadores y Resultados

Hola de nuevo, después de tiempo, vamos a seguir con este tema de persistencia nativa para celulares usando Java ME. En el artículo anterior expliqué la idea general de esta librería, complementando asi el primer post que quedaron pendientes 2 objetos más: DataFinder y DataResult.

Ya habiamos diseñado a un objeto genérico DataManager para el control del ciclo de vida de los objetos persistentes. En él, se usaban a los buscadores y a los resultados, como auxiliares para poder gestionar a los objetos de datos DataObject.

El DataFinder debería ser un objeto que pueda recoger las definiciones de búsqueda y pueda realizar la comparación entre objetos de datos DataObject. Java ME dispone de dos objetos para definir filtros (criterios de selección de objetos) y comparadores. El prototipo de un DataFinder sería asi:


package com.saphi.mdba;
import javax.microedition.rms.RecordComparator;
import javax.microedition.rms.RecordFilter;
 
public interface DataFinder {
    public RecordFilter getFilter();
    public RecordComparator getComparator();
    public boolean isKeepUpdated();
}
El DataResult seria similar a un objeto ResultSet de Java ODBC (especificación de Java SE para conexión uniforme de programas Java a base de datos relacionales). Bueno copiando un poco esta misma filosofía, el DataResult sería como una colección o lista de objetos DataObject, con ciertos métodos para operar sobre él como ordenamiento de objetos, obtención de algún atributo de algún objeto DataObject, etc. El prototipo quedaría asi:


package com.saphi.mdba;
import java.util.Enumeration;
 
public interface DataResult {
    public boolean exist(int key);
    public boolean exist(DataObject dataObject);
    public boolean isEmpty();
    public Enumeration dataObjects();
    public Enumeration keys();
    public DataObject get(int key);
    public DataObject dataObjectAt(int pos);
    public void sort();
    public void sort(int col);
    public void sort(int[] col);
    public int count();
    public Object[][] getValues();
}
Con esto quedaria completo el objeto DataManager expuesto anteriormente en el primer post:


package com.saphi.mdba;
import javax.microedition.rms.RecordStoreException;
 
public interface DataManager {
    public Class getDataObject();
    public String getRecordStoreName();
    public DataObject getInstance();
    public DataObject findByKey(int key) throws RecordStoreException;
    public DataResult find() throws RecordStoreException;
    public DataResult find(DataFinder finder) throws RecordStoreException;
}
En resumen, se tiene un modelo que proporciona un gestor (DataManager) para la administración completa del ciclo de vida de objetos de datos (DataObjet), un buscador genérico (DataFinder), que también contiene un filtro para la búsqueda de datos y un resultado de la búsqueda (DataResult) que contiene todos los objetos de datos del resultado de las consultas (note los métodos de ordenamiento).

Con esto ya tenemos la base para realizar la implementación de los objetos de datos. En el próximo post, desarrollaré una implementación básica muy útil que facilitará aún más la aplicación de estos conceptos. Hasta luego.