3. Descripción general de la arquitectura
El acceso a datos de gvSIG contiene dos grandes conjuntos de interfaces:
- El primero para los consumidores de datos o API.
- Y el segundo, para los proveedores de datos de la librería o SPI.
La descripción de cada uno de esos grupos de interfaces se realizará por separado, distinguiendo en todo momento entre los servicios que se ofrecen al consumidor de datos y al proveedor de éstos.
En la arquitectura de la librería de acceso a datos, DAL, existen tres piezas fundamentales que se encuentran interrelacionadas entre sí:
- Control de recursos, Resource. Identifica qué recursos están siendo
usados en todo momento por los distintos proveedores de datos de la
librería, pudiendo solicitar que se liberen en un momento dado.
- Acceso a los servicios de un servidor de datos, DataServerExplorer.
Permite determinar qué almacenes de datos hay en un servidor, así como
crear nuevos almacenes. Los principales tipos de servidores soportados
son:
- Sistemas de ficheros en local, FilesystemServerExplorer.
- Sistemas de bases de datos con soporte JDBC, JDBCServerExplorer.
- Sistemas remotos basados en WMS/WCS.
- Sistemas remotos basados en WFS/WFS-T, WFSServerExplorer.
- Acceso a los datos de un almacen, DataStore. Nos permite el acceso a
datos de tipos como:
- dbf/shp
- dxf
- GML
- Bases de datos PostgreSQL
El API provee de una primera capa de abstracción que representa al acceso a datos independientemente de si estamos accediendo a datos tabulares, vectoriales o coberturas raster, para luego disponer de especializaciones dependiendo de si estamos accediendo a datos vectoriales o coberturas raster.
En la primera aproximación a la librería nos encontramos una serie de clases e interfaces que son independientes del tipo de datos y de su origen. Estas son:
- DALLocator. Se trata del locator de la librería. Nos proporciona los servicios de localización del DataManager y el ResourceManager a usar por la librería.
- DataManager. Se trata de la factoría que nos da acceso al API de acceso a
datos. A partir de él podemos acceder a los almacenes de datos o explorar
los almacenes de datos que nos suministra un servidor o servicio dado. Es
el punto de entrada a todo el modelo de objetos.
- DataStore. Representa un almacén de datos. Un fichero shape o una tabla de
una base de datos, y dispone de mecanismos para acceder a sus datos, su estructura
y tipo, así como en qué forma se pueden modificar éstos.
- DataStoreParameters. Representa el conjunto de parámetros que se necesitan
para poder acceder al almacén de datos. Por ejemplo, si estamos accediendo
a un fichero dbf, contendrá la ruta al fichero.
- DataSet. Representa un conjunto de datos del almacén de datos.
El DataStore contiene mecanismos para acceder a los datos, permitiendo
aplicar filtros u órdenes a éstos, así como información contextual que
pueda ser útil a la hora de decidir cómo ha de realizarse de forma óptima
la recuperación de éstos desde el almacén.
- DataQuery. Representa el conjunto de valores que conforman las condiciones
en las que se basará el DataSet para recuperar y devolver los datos.
- DataServerExplorer. Nos permite obtener la lista de almacenes disponibles en un
servidor o servicio dado. Así podemos pedirle que nos dé la lista de tablas
de una base de datos o de ficheros susceptibles de ser tratados como almacenes,
por ejemplo shapes, dbfs o dxfs, que existan en una capeta dada. A partir
de la información que nos suministre sobre cada almacén, podremos crear
el DataStore adecuado para acceder a sus datos.
- DataExplorerParameters. Representa el juego de parámetros necesario para
poder acceder al servidor o servicio y poder consular los almacenes de datos
que éste sirve.
Así, puede pasarle un DataStoreParameters al DataManager para obtener un DataStore, y a partir de éste realizar consultas contra ese almacén o modificar sus datos. Una consulta devolverá un DataSet y a partir de él podrá acceder a los datos. Si queremos saber qué almacenes de datos tenemos en un servidor podemos pedirle un DataServerExplorer al DataManager y éste nos informará de los almacenes de datos que hay disponibles.
A partir de esta primera capa de abstracción que provee la librería, aparecen dos
grandes especializaciones de ella:
- Por un lado aparece una especialización que nos da acceso a datos de tipo
tabular, bien sean de tipo alfanumérico o vectorial.
- Por otro, una especialización que nos abre el acceso a datos de tipo
coberturas raster.
En adelante describiremos cada una de estas especializaciones, primero
centrándonos en el acceso a datos tabulares y después a los raster.
También trataremos más adelante cómo llevar la gestión de los recursos usados por
la librería, ficheros, conexiones a BBDD, conexiones a servicios remotos, ...