Db4objects base de datos orientada a objetos 0 Índice



Descargar 42,23 Kb.
Fecha de conversión05.08.2017
Tamaño42,23 Kb.

db4objects

  • BASE DE DATOS
  • ORIENTADA A OBJETOS
  • v1.0

ÍNDICE

  • MHProject
  • Bases de datos
  • (Introducción)
  • db4objects
  • db4o
  • por dentro
  • Créditos
  • Y
  • Bibliografía
  • RDBMS
  • Vs
  • OODBMS
  • OODBMS
  • Nativas
  • Vs
  • No-Nativas
  • Introducción
  • Características
  • Comparativas
  • Estadísticas
  • Gráficos
  • Casos de Uso
  • Ejemplos
  • Casos de Éxito
  • Motor
  • Instalación
  • Documentación
  • Tratamiento
  • De
  • Objetos
  • Consultas
  • QBE
  • NQ
  • SODA
  • Objetos
  • Estructurados
  • Colecciones
  • Arrays
  • Herencia
  • Transacciones
  • Tecnología
  • De
  • Cliente/Servidor
  • La API
  • RDBMS
  • El paradigma
  • Relacional

BASES DE DATOS INTRODUCCIÓN

  • PERSISTENCIA DE DATOS

Persistencia

  • Una de las tareas más críticas en la programación es salvar y recuperar datos
  • La persistencia es el almacenamiento de los datos en memoria, para una posterior recuperación de los mismos
  • En sistemas orientados a objetos, existen varios métodos para hacer los objetos persistentes.
  • La elección del método es de vital importancia.
  • .
  • ORDMBS
  • RDBMS
  • OODBMS
  • SERIALIZACIÓN
  • PERSISTENCIA
  • DE
  • OBJETOS
  • DATABASES

BASES DE DATOS INTRODUCCIÓN

  • RDBMS vs OODBMS

RDBMS vs OODBMS

  • 2 Tecnologías cara a cara
    • Tecnología Relacional
    • Tecnología de Objetos
      • Orientada a Objetos
      • Centrada en servicios

RDBMS vs OODBMS

  • Tecnología Relacional
    • Los datos constituyen un ente propio y van completamente separados de las funciones que los manejan.
    • De hecho uno puede existir perfectamente sin la existencia del otro.
    • Esto crea una complejidad añadida a la hora de manejar esos datos.

RDBMS vs OODBMS

  • Tecnología de Objetos
    • Los datos coexisten junto a los procesos que los tratan.
    • Estas entidades son los Objetos
    • Simplifica el tratamiento de los datos.

BASES DE DATOS INTRODUCCIÓN

  • RDBMS
  • EL PARADIGMA RELACIONAL

El Paradigma Relacional

  • Los datos son independientes de las entidades que los procesan
  • Dichos datos deben ser almacenados en bases de datos relacionales compuestas principalmente de Tablas, Filas (registros), y Campos.
  • Dichos datos deben mantener una relación coherente entre ellos (Relación impuesta por la Base de datos).

El paradigma relacional

  • ¿Qué pasa si queremos almacenar Objetos creados por un lenguaje orientado a Objetos en una base de datos Relacional?
  • En este instante se produce lo que vamos a llamar la
  • (Entre Objetos y Datos Relacionales)
  • Inadaptación de Impedancia

Esquema del Paradigma Relacional

  • RDBMS
  • TABLA1
  • TABLA2
  • OBJETO3
  • OBJETO1
  • OBJETO2
  • CLASE
  • X
  • X
  • X
  • ENTORNO DE OBJETOS
  • ENTORNO DE DATOS
  • PARADIGMA

El paradigma relacional Solución Adoptada

  • ¿Qué pasa si queremos almacenar Objetos creados por un lenguaje orientado a Objetos en una base de datos Relacional?
  • La solución comunmente aceptada pasa por lo que llamaremos

Esquema del Paradigma Relacional (Solución)

  • CLASE
  • ENTORNO DE OBJETOS
  • ENTORNO DE DATOS
  • MAPEO
  • RDBMS
  • TABLA1
  • TABLA2
  • REGISTRO1
  • REGISTRO2
  • REGISTRO3
  • OBJETO3
  • OBJETO1
  • OBJETO2
  • VERTICAL
  • HORIZONTAL

Esquema del Paradigma Relacional (Solución)

  • Mapeo (Objeto – Relacional)
    • Nos permite mapear los objetos a registros en las tablas de base de datos.
    • Esto se realiza mediante una hoja de mapeo en la que “convertimos” cada clase en una tabla, cada objeto en un registro (fila) de la base de datos y cada atributo en una columna de la misma.
    • Tenemos que manejar las relaciones entre Clases (Tablas) mediante las típicas claves principales, primarias y/o externas.

BASES DE DATOS INTRODUCCIÓN

  • OODBMS
  • (Object oriented Data Base Manager System)

OODBMS

  • Nos permiten almacenar Objetos directamente (no hay registros ni tablas).
  • Nos dan transparencia a la hora de almacenarlos.
  • Nos ofrecen mayor flexibilidad ante los posibles cambios.
  • Los datos coexisten con los objetos.
  • Velocidad OODBMS ≥ RDBMS

OODBMS Identificadores de Objetos

  • OID’s : Identificadores de objetos, almacenados dentro de los objetos para indicar con cuales está relacionado
  • El OID no es visible ni para el usuario, ni para el programador de la Base de datos
  • Un objeto permanece como el mismo objeto incluso cuando su estado toma completamente nuevos valores

OODBMS Identificadores de Objetos II

  • La Identidad de los Objetos medida en base a su OID.
    • Equivalentes: Mismo OID
    • Iguales: Mismos valores de estado
  • La igualdad puede existir a diferente nivel
    • Igualdad superficial: Mismos valores de estado (ej. 2 objetos OrdenCliente tienen los mismos valores)
    • Igualdad profunda: Sus valores y los de objetos relacionados son iguales entre ellos. (ej.2 OrdenCliente iguales y sus OrderItems iguales también)

OODBMS Standards

  • The Object Oriented Database Manifesto (1989)
  • Mandatory features:
  • Complex objects (OO feature)
    • objects can contain attributes which are themselves objects.
  • Object identity (OO)
  • Encapsulation (OO)
  • Classes (OO)
  • Inheritance (OO): class hierarchies
  • Overriding, Overloading, Late Binding (OO)
  • Computational completeness (OO
  • Persistence (DB)
    • data must remain after the process that created it has terminated
  • Secondary Storage Management (DB)
  • Concurrency (DB)
  • Recovery (DB)
  • Ad hoc query facility (DB)

OODBMS Standards

  • The ODMG Proposed Standard
  • One of the crucial factors in the commercial success of RDBMSs is the relative standardisation of the data model
  • The Object Data Management Group (ODMG) was formed by a group of industry representatives to define a proposed standard for the object data model.
  • It is still far from being as widely recognised as the relational database standards.
  • The ODMG proposed standard defines the following aspects of an OODBMS:
    • basic terminology
    • data types
    • classes and inheritance
    • objects
    • collection objects (including sets, bags, lists, arrays)
    • structured objects (Date, Interval, Time, Timestamp – similar to SQL)
    • relationships
    • object definition language (ODL)
    • object query language (OQL)

OODBMS Ventajas

  • Objetos y Relaciones Complej@s
  • Jerarquía de clases
  • Sin desadaptación de impedancia
  • Sin necesidad de claves primarias
  • Un Modelo de datos
  • Un Lenguaje de programación
  • Sin necesidad de lenguaje de Conslutas
  • Alto rendimiento en ciertas tareas

OODBMS Desventajas

  • Cambios de esquemas
  • Falta de consenso en standards
  • Falta de ad-hoc querying
    • En General RDMBS es más adecuando para bases de datos con variedad de consultas y requerimientos de interface de usuario (ej. sistema de gestión de business). Mientras que OODBMS es más propio de aplicaciones con complejos y/o irregulares datos donde se siguen patrones previsibles (ej. CAD/CAM)

OODBMS Java Data Objects (JDO)

  • Aplicaciones escritas para uso de JDO pueden tratar con cualquier Base de datos que implemente JDO
  • Las consultas (queries) están escritas en un lenguaje parecido-a-Java (JDOQL)
  • El mapeo de objetos a la base de datos están definidos en descriptores XML
  • Algunos proovedores de OODBMS basan sus productos en JDO (Lo hace db4o?)

OODBMS Nativas vs. No-Nativas

  • OODBMS No-Nativas
    • La interface nos permite un tratamiento transparente de los objetos como tales.
    • La base de datos se encarga de transformar esos objetos por nosotros.
  • OODBMS Nativas
    • La interface permite el tratamiento nativo de los objetos como tales.
    • La base de datos almacena esos objetos como tales.

db4OBJECTS www.db4o.com

  • INTRODUCCIÓN

Db4o: Introducción

  • Base de datos orientada a objetos completamente nativa de alto rendimiento.
  • Desarrollada en el corazón de Sillicon Valley.
  • Compacta y válida como Base de datos embedida en la aplicación.
  • Soporta aplicaciones Standalone así como Cliente/Servidor (Aplicaciones distribuidas).
  • Disponible para entornos Java o .Net

Db4o: Características

  • Mínimo consumo de recursos
    • Pequeña FootPrint (Huella)
  • Alto rendimiento
  • Fácil Implementación (Mínimo código)
  • Portabilidad
    • Corre sobre Java 1.x hasta 5.0, en .Net sobre J2EE, J2SE, J2ME:CDC, Symbian…
  • Confiabilidad (ACID)
  • Transparencia

Db4o: Características II

  • Velocidad: hasta 44 veces más rápido que Hibernate/MySQL
  • Soporte al cambio de Versiones
  • Administración Nula
  • Soporte a JSP / Servlets
  • Código Abierto (Bajo 2 licencias)

Db4o: Características III

  • Con db4o eliminamos el proceso de diseño, implementación y mantenimiento de la base de datos pues:
    • El modelo de clases es el esquema de base de datos.

Db4o: Características III

  • .
  • Db4o nos permite:
    • Embeder la base de datos (applicaciones Standalone)
    • Conexión parcial Cliente a Servidor
    • Conexión distribuida entre servidores (Sincronización de datos)
  • db4o
  • Embedido (400kb)
  • Standalone
  • Parcial
  • Client to Server
  • Distribuido
  • Server to Server

Db4o: Características IIII

  • .
  • Db4o nos ofrece 3 tipos de consultas:
    • Query by Example (QBE): Consultas por ejemplo o prototipo
    • Simple Object Database Access (SODA): Consultas dinámicas basadas en nodos
    • Native Queries (NQ): Consultas a datos con lenguaje nativo
      • Con todo lo que supone esto (TypeSafe, No-Strings, No Learn…)
  • Db4o.queries
  • QBE
  • Query By Example
  • SODA
  • NQ
  • Native Queries
  • Exportamos a
  • XML
  • (Xstream)

Db4o: Comparativas, Estadísticas y Gráficos

  • Velocidad de escritura, lectura, consulta y borrado.
  • Estadísticas realizadas con PolePosition.

Db4o: Comparativas, Estadísticas y Gráficos

  • Otros Bancos de Pruebas.
  • Estadísticas realizadas con PolePosition.

Db4o: Casos de Uso

  • Podemos utilizar db4objects para:
    • Dispositivos móviles
      • (Móviles,Pda’s,Tablet Pc’s…)
    • Dispositivos médicos y biotecnología
    • Industria del transporte
    • Software enlatado
    • Aplicaciones Web (JSP / Servlets)
    • Sistemas en tiempo real

Db4o: Casos de Uso II

  • Podemos utilizar db4objects para:
    • Instituciones educativas y de enseñanza en Colegios y/o Universidades.
        • (Conseguimos con ello centrarnos en el lenguaje Java o .Net sin distraernos en la BD)
    • Juegos Standalone y Online
    • Televsión Interactiva? (MHP) ?

Db4o: Ejemplos de Clientes

  • Novell
  • BMW Car IT
  • Indra Systems
  • Massie Labas
  • Bosch
  • TMT
  • Eastern Data
  • Electrabel
  • Web Radiance
  • Hertz

Db4objects POR DENTRO

  • MOTOR
  • INSTALACION
  • DOCUMENTACION

Db4o por dentro Motor, Instalación, Documentación

  • El motor de la base de datos consiste tan solo en un pequeño archivo .jar de menos de 400kb.
  • La instalación supone agregar el motor de la base de datos (db4o-.jar) a nuestro CLASSPATH.
  • La documentación de la base de datos está creada mediante JavaDoc y viene incluida en el mismo paquete.

Db4o POR DENTRO

  • La API

Db4o Por dentro: La API

  • .
  • En principio solo los paquetes com.db4o y com.db4o.query son necesarios para un correcto funcionamiento.
  • com.db4o
  • com.db4o.
  • Db4o
  • com.db4o.
  • ObjectContainer
  • Métodos estáticos nos permiten:
  • Abrir y Cerrar db. - Conectarnos a servidor.
  • - Configurar la db.
  • La interface + importante:
  • - Es nuestra propia dB ya sean en single o client mode.

Db4o Por dentro: La API

  • com.db4o.ObjectContainer.
    • Puede ser una dB tanto en single-mode como en client to server connection.
    • Todos los ObjectContainer manejan una transacción. Todo trabajo es transaccional.
    • Cada ObjectContainer mantiene sus propias referencias a objetos almacenados e instanciados.
    • Un ObjectContainer esta diseñado para permanecer abierto mientras se trabaja con ellos, cuando cerramos una dB todas las referencias a objetos desaparecen de la memoria RAM.

Db4o Por dentro: La API

  • .
  • com.db4o.ext nos extiende y proporciona las funciones avanzadas de com.db4o. (2 pasos)
  • com.db4o
  • com.db4o.ext
  • com.db4o.config
  • com.db4o.query
  • Razones:
  • Es más fácil y rápido empezar a utilizar la db.
  • Será más fácil para otros productos copiar la interface básica de la db.
  • Es un sencillo ejemplo de cómo de ligera puede llegar a ser nuestra dB.
  • -Paquete que contiene tipos y clases que nos permiten configurar y/o tunear la base de datos a nuestro gusto.
  • -La configuración de la base de datos se hace por norma general antes de abrir la sesión en la misma.
  • com.db4o.config nos permite configurar y/o tunear la base de datos a nuestro gusto
  • com.db4o.query nos ofrece el interface de consultas mediante 3 tipos de consultas
  • -Paquete que alberga la clase predicado para realizar consultas mediante Native Query (NQ).
  • -NQ permite mejor y más rápida implementación pero reduce el rendimiento de consultas.

Db4o POR DENTRO

  • TRATAMIENTO
  • DE
  • OBJETOS

dbo4: Tratamiento de Objetos

  • .
  • Abrir y cerrar la base de datos
    • Simplemente llamamos a .openFile( )
    • Cerramos con una llamada a .close()
  • ObjectContainer db = Db4o.openFile(“Archivo.yap”);
  • try {      // hacer algo con la db
  • finally {
  •     db.close(); // cerrar la base de datos antes de salir }
  • Representa la base de datos

dbo4: Tratamiento de Objetos

  • .
  • Almacenar objetos
    • Simplemente llamamos a .set( ) pasando cualquier objeto como parámetro
  • Pilot pilot1 = new Pilot("Michael Schumacher",100);
  • db.set(pilot1);
  • System.out.println("Stored "+pilot1);
  • Almacenamos el objeto con un simple set

dbo4: Tratamiento de Objetos

  • .
  • Recuperar objetos
    • Lo intentamos con la sencilla interface QBE
  • Pilot proto = new Pilot(null,0);
  • ObjectSet result=db.get(proto);
  • listResult(result);
  • Listamos todos !
  • Creamos un objeto prototipo con new()
  • (con null’s y 0’s)
  • Consultamos con .get()
  • Listamos resultados

dbo4: Tratamiento de Objetos

  • .
  • Recuperar objetos con QBE
    • Lo intentamos con la sencilla interface QBE
  • Pilot proto = new Pilot(“Michael Sumacher”,0);
  • ObjectSet result=db.get(proto);
  • listResult(result);
  • Listamos por nombre
  • Creamos un objeto prototipo con new()
  • Consultamos con .get()
  • Listamos resultados

dbo4: Tratamiento de Objetos

  • .
  • Actualizar objetos
    • Lo intentamos con la sencilla interface QBE
  • ObjectSet result=db.get(new Pilot("Michael",0));
  • Pilot found=(Pilot)result.next();
  • found.addPoints(11);
  • db.set(found); retrieveAllPilots(db);
  • Recuperamos un objeto de la db
  • Lo tratamos
  • (Actualizamos)
  • Lo almacenamos
  • En la misma sesión

dbo4: Tratamiento de Objetos

  • .
  • Borrar objetos
    • Simplemente llamamos a .delete( ) pasando cualquier objeto como parámetro
  • ObjectSet result=db.get(new Pilot("Michael Schumacher",0)); Pilot found=(Pilot)result.next();
  • db.delete(found);
  • retrieveAllPilots(db);
  • Borramos el objeto conocido

Db4o POR DENTRO

  • CONSULTAS DE
  • OBJETOS

dbo4: Consulta de Objetos

  • Quering by Example (QBE) ¿Qué?
    • Son consultas extremadamente fáciles y rápidas
    • Tenemos limitaciones en las consultas
      • No podemos ejecutar consultas con expresiones avanzadas como (AND, OR, NOT, etc.)
    • No se pueden imponer valores 0 o null.
    • Necesitas un constructor para los objetos

dbo4: Consulta de Objetos

  • .
  • Quering by Example (QBE) ¿Cómo?
    • Creamos un objeto prototipo (Mediante atributos por defecto nulls y 0’s)
    • Utilizamos el método .get( ) pasándole el objeto prototipo.
    • Nos devuelve un ObjectSet que contiene los objetos de la consulta realizada
  • Pilot proto=new Pilot(“null",0); ObjectSet result=db.get(proto); listResult(result);
  • Consultamos con .get()

dbo4: Consulta de Objetos

  • .
  • Quering by Example (QBE) (Ejemplo 2)
    • Hacemos una consulta por nombre
  • Pilot proto = new Pilot(“Michael Sumacher”,0);
  • ObjectSet result=db.get(proto);
  • listResult(result);
  • Listamos por nombre
  • Creamos un objeto prototipo con new()
  • Consultamos con .get()
  • Listamos resultados

dbo4: Consulta de Objetos

  • Native Queries (NQ) ¿Qué?
    • Son consultas realizadas con el mismo lenguaje de programación.
    • Por tanto son consultas de Escritura-Segura, comprobadas en Tiempo de Compilación, y 100 % Factorizables
    • Podemos incluso llamar a métodos dentro de las propias consultas.
    • Están perfectamente standarizadas y son una vía de futuro seguro

dbo4: Consulta de Objetos

  • Native Queries (NQ) ¿Cómo?
    • Creamos un predicado (o expresión) con lenguaje de código nativo. [ new predicate() ]
    • Implementamos el método #match() perteneciente a la clase predicate()
    • Devuelve true para marcar específicas instancias como parte del conjunto resultado
    • Utilizamos el método .query( ) pasándole esa expresión de consulta.

dbo4: Consulta de Objetos

  • .
  • Native Queries (NQ) (Ejemplo )
    • Hacemos una consulta por puntos == 100
  • List pilots = db.query(new Predicate( ) {
  •     public boolean match(Pilot pilot) {
  •         return pilot.getPoints() == 100;
  •     }
  • });
  • Creamos una expresión en leguaje nativo con nuevo Predicate()
  • Implementamos el método .match() que hace la comparación y devuelve true
  • Consultamos esa expresión mediante .query()

dbo4: Consulta de Objetos

  • .
  • Native Queries (NQ) (Ejemplo 2 )
    • Hacemos una consulta por puntos > 99 (AND) <199
  • List pilots = db.query( new Predicate() {     public boolean match(Pilot pilot) {
  •          return pilot.getPoints() > 99
  • && pilot.getPoints() < 199       || pilot.getName().equals("Rubens Barrichello");    
  • } });
  • Creamos una expresión en leguaje nativo con nuevo Predicate()
  • Implementamos el método .match() que hace la comparación y devuelve true
  • Consultamos esa expresión mediante .query()

dbo4: Consulta de Objetos

  • S.O.D.A Query API ¿Qué?
    • Son consultas de nodo dinámicas de bajo nivel que permiten directamente recorrer la jerarquía de clases.
    • Al contrario que NQ, SODA utiliza Strings para identificar los campos
    • Por lo tanto no tiene las características de Escritura-Segura, comprobadas en Tiempo de Compilación, y 100 % Factorizables
    • Sin embargo es más rápido que NQ
    • Al contrario que QBE permite consultas a 0.

dbo4: Consulta de Objetos

  • S.O.D.A Query API ¿Cómo?
    • Creamo un nuevo objeto (nodo) a través del metodo .query() del ObjectContainer
    • Descendemos por árbol jerárquico de clases
    • Imponemos alguna o varias condiciones con .constrain(), (a uno o varios atributos)
    • Ejecutamos esa consulta con .execute() y nos devuelve un ObjectSet con los objetos consultados.

dbo4: Consulta de Objetos

  • .
  • S.O.D.A Query API (Ejemplo )
    • Hacemos una consulta por todos los pilotos
  • Query query = db.query();
  • query.constrain(Pilot.class);
  • ObjectSet result = query.execute();
  • listResult(result);
  • Creamos nuevo nodo de consulta con .query()
  • Imponemos ese nodo a ‘Toda la clase pilot’ con .constrain() sobre Pilot.class
  • Ejecutamos la consulta mediante
  • .execute()
  • Class: Pilot

dbo4: Consulta de Objetos

  • .
  • Creamos nuevo nodo de consulta con .query()
  • Imponemos ese nodo a ‘Toda la clase pilot
  • S.O.D.A Query API (Ejemplo 2 )
    • Hacemos una consulta por nombre de piloto
  • Query query=db.query();
  • query.constrain(Pilot.class);
  • query.descend("name").constrain("MS");
  • ObjectSet result=query.execute();
  • Class: Pilot
  • Equals(“MS”)
  • name
  • Ejecutamos la consulta mediante
  • .execute()
  • Descendemos por el nodo a name e imponemos “MS” con .constrain()

dbo4: Consulta de Objetos

  • .
  • Class: Pilot
  • Equals(“MS”)
  • name
  • Greater( 60 )
  • points
  • Creamos nuevo nodo de consulta con .query()
  • Imponemos ese nodo a ‘Toda la clase pilot
  • Descendemos a points e imponemos >60
  • Descendemos por el nodo a name e imponemos “MS” con .constrain()

Db4o POR DENTRO

  • Objetos Estructurados
  • Colecciones y Arrays
  • Herencia

dbo4: Objetos Estructurados

  • No tenemos por qué almacenar todos los objetos subordinados si no sólo el objeto de mayor nivel.
  • Db4o
  • database
  • team
  • pilot
  • car

dbo4: Objetos Estructurados

  • .
  • Consultas estructuradas
    • Consultar un piloto por su modelo de coche
  • Query carquery=db.query();
  • carquery.constrain(Car.class); carquery.descend("model").constrain("Ferrari");
  • Query pilotquery=carquery.descend("pilot"); ObjectSet result=pilotquery.execute();
  • Class: Car
  • Equals (“Ferrari”)
  • model
  • pilot
  • Creamos nuevo nodo de consulta con .query()
  • Descendemos por pilot.

dbo4: Objetos Estructurados

  • Actualización de profundidad
    • Si queremos actualizar un objeto subordinado salvando (almacenando) su objeto superior en la dB debemos configurar la db para actualización de profundida con .cascadeOnUpdate() antes de abrir la db.
    • Por defecto la profundidad es 1 lo cual permite actualizar atributos primitivos o Strings.

dbo4: Objetos Estructurados

  • Borrado recursivo
    • De forma análoga a la actualización el borrado recursivo debe ser configurado mediante .cascadeOnDelete() antes de la apertura de la dB.
    • Con esto conseguimos borrar los objetos subordinados borrando únicamente el objeto de mayor nivel.
    • Pero que pasa si un objeto subordinado está referenciado por otro objeto?  Cuidado!!!

dbo4: Objetos Estructurados

  • Sin .cascadeOnDelete()
  • Con .cascadeOnDelete()
  • Borramos
  • Borramos
  • X

db4o: Colecciones y Arrays

  • Podemos consultar arrays y almacenarlos de la misma forma que datos primitivos.
    • Mediante QBE el orden de los valores consultados es irrelevante
    • Con NQ simplemente consultamos como si hiciéramos búsquedas nativas en arrays.
  • Nada nuevo en consulta y borrado de arrays, simplemente tener en cuenta la profundidad.

db4o: Herencia

  • Db4o nos devuelve los objetos del tipo consultado es decir:
    • Consultando una SuperClase nos devuelve todos los objetos padre e hijos.
    • Consultando una SubClase nos devuelve los objetos de esa SubClase.
  • Figuras
  • Consulta
  • Consulta

db4o: Herencia

  • ¿Qué pasa con QBE si la clase a consultar es Abstracta o Interface?
    • No podemos utilizar un constructor para hacer el objeto prototipo.
    • Solución: Utilizamos ‘MiClase’.class lo que nos devuelve la clase entera.

Db4o POR DENTRO

  • TRANSACCIONES
  • TECNOLOGÍA CLIENTE/SERVIDOR

db4o: Transacciones Simples

  • db4o nos ofrece dos métodos para realizar transacciones
    • .commit() Finaliza una transacción
    • .rollback() Deshace una transacción
  • La transacción es implícitamente cerrada por defecto cuando cerramos una db.
  • Sin embargo debemos tener cuidado a la hora de hacer .rollback() con Live Objects.
    • Se deben refrescar con .ext().refresh(obj,depth)

db4o: Transacciones Simples

  • Proceso commit – rollback (Client/Server)
  • Db4o
  • database
  • Pedimos Coche
  • Refresh()
  • RollBack()
  • Set ()

db4o: Cliente / Servidor Local

  • De cara a la API no existen diferencias reales entre ejecutar transacciones concurrentes dentro de la misma VM y transacciones ejecutadas contra un server
    • Para abrir una db en modo servidor dentro de la misma VM utilizamos .openServer(‘dbfile.yap‘,0) con puerto 0.
    • Para acceder a esa base de datos en modo cliente Local tan solo usamos .openClient()

db4o: Cliente / Servidor Local

  • Cada contenedor cliente mantiene su propio cache de referencias débiles de los objetos ‘ya conocidos’.
  • Para hacer que los cambios hechos por un cliente sean ‘cometidos’ por todos los clientes inmediatamente debemos refrescar los objetos conocidos explícitamente con .ext().refresh(obj, depth)

db4o: Cliente / Servidor Remoto

  • Desde aquí hay un pequeño paso ya para configurar nuestra db como Client/Server sobre TCP/IP.
    • Tan solo especificamos un puerto de servidor mayor que 0 y abrimos los clientes garantizandoles acceso con USER Y PASS.
    • Abrimos con .openServer(db.yap,PORT)
    • Garantizamos con .grantAccess(USER,PASS)
    • Conectamos con .openClient(“Server",PORT,USER,PASS)

db4o: Cliente / Servidor Remoto

  • Algunas veces necesitamos enviar ciertos mensajes tipo ‘kill’ al servidor entonces:
    • El servidor se pone como receptor de mensajes con .setMessageRecipient() pasándole como parámetro el mensaje obj.
    • El mensaje es recivido y procesado por el método processMessage()
    • El cliente se pone como Mensajero con .getMessageSender() y manda un mensaje con .send() . Ejemplo msg: new StopServer()

db4o: Conclusión

  • Hemos visto como db4o nos permite hacer un sin fin de cosas con muy poco código y esfuerzo y eso que tan solo hemos visto una parte de db4o. Aún nos quedaría por mirar temas como:
    • Evaluaciones SODA
    • Constructores
    • Intérpretes
    • Configuración y Tuneado
    • Indexación
    • Object Manager
    • ClassLoaders
    • ServLets
    • Encriptación
    • Refactorizado de clases
    • Optimización de consultas
    • Replicaciones
    • Semáforos

Créditos y Bibliografía

  • db4o – Base de datos Orientada a Objetos
  • [---------- Proyecto ----------] MHProject v1.0 www.mhproject.org E.T.S de Ingenieros de Telecomunicación Universidad Pública de Navarra
  • [---------- Autor ----------] Alejandro Fanjul fanjul.35858@e.unavarra.es afanjul@mhproject.org
  • [---------- Tutores ----------] Mikel Sagues mikel.sagues@unavarra.es Javier Navallas javier.navallas@unavarra.es
  • [---------- Bibliografía ----------]
  • Db4o.com: Tutorial and Presentations Bell College: Presentations [Object Persistence]
  • 20/12/2005 Copyright: MHProject.org
  • [End]


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal