viernes, 12 de diciembre de 2008

Introducción a la persistencia usando JAVA (V 0.1)

Para que una aplicación distribuida funcione correctamente debe proporcionar una manera mediante la cual se puedan guardar objetos con propiedades y luego se permita restaurarlos. Si estos objetos se pueden restaurar más allá de ejecución del programa que los creo, entonces se hablará de persistencia. Para implementar lo anterior se maneja el concepto de serialización

La serialización ofrece la posibilidad de escribir un objeto en un flujo y de leerlo posteriormente.


La serialización permite almacenar objetos en archivos que se comunican por redes y que se usan en aplicaciones distribuidas. Bajo estas circunstancias se almacenará al menos el objeto, la información de la clase a la cual pertenece y las referencias a la cual apunta.

La interfaz Serializable está contenida en el paquete java.io

public interface Serializable

Esta interfaz no contiene métodos y sólo se debe implementar para efectuar un uso de la propiedad de serialización

Se entiende por persistencia (en programación) como la acción de preservar la información de un objeto de forma permanente (guardar), pero a su vez también se refiere a poder recuperar la información del mismo (leer) para que pueda ser nuevamente utilizada.

En el caso de persistencia de objetos la información que persiste en la mayoría de los casos son los valores que contienen los atributos en ese momento, no necesariamente la funcionalidad que proveen sus métodos.

La persistencia no es ni una capacidad ni una propiedad de la Programación Orientada a Objetos no tiene nada que ver con el paradigma en sí, solo es el mecanismo que se usa para persistir información de un determinado tipo (como puede ser serializar, guardar los datos en una tabla, en un archivo plano, otros).

Una clase (llamada en persistencia entidad) representa típicamente una tabla en el modelo relacional. Cada instancia de la entidad corresponde a una fila de la tabla


El API de persistencia usa el término entidad para definir clases que serán mapeadas a la base de datos relacional.

Restricciones a una Entidad de persistencia
  • No puedes crear entidades desde enumeraciones o interfaces.
  • La clase no puede ser final
  • La clase no puede contener métodos finales
  • La clase no puede contener variables de instancias de persistencia final.


Permitido en una Entidad de persistencia
  • Las entidades pueden ser clases abstractas o concretas.
  • Estas clases deben contener un método constructor sin parámetros.
  • Los atributos persistentes deben ser privados y proporcionar métodos get/set.
  • Los atributos de tipo colección deben usar interfaces desde java.util.Collection con genéricos del tipo Java 5.0.


Anotaciones: @
El API de persistencia de Java requiere que definas las clases que serán almacenadas en una base de datos. Debes identificar las entidades persistentes y definir sus relaciones usando anotaciones. El compilador de Java reconocerá y usará las anotaciones para ahorrarte el trabajo. Usando anotaciones, el compilador generará clases adicionales para ti y realizar la comprobación de errores en tiempo de compilación.

Las anotaciones comienzan con el símbolo @. Por ejmplo, para identificar que una clase es persistente usamos la anotación @Entity


Las anotaciones pueden aplicarse a las declaraciones de clases de un programa, los campos, métodos y otros elementos del programa

@Deprecated: Indica que el elemento marcado se desprecia y ya no se usa. El compilador genera una advertencia siempre que un programa usa un método, clase o campo con la anotación @Deprecated.

@Deprecated
static void deprecatedMethod() { }

@Override: Informa al compilador que el elemento está pensado para sobreescribir a un elemento declarado en una superclase.

@Override
int overriddenMethod() { }

@SuppressWarnings: Le dice al compilador que suprima advertencias específicas que de otra forma generaría. En este caso la anotación causa que la advertencia se suprima

@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
obj.deprecatedMethod();
}

@SuppressWarnings(“unchecked ”): Es simplemente un warning, indica que no estás usando los generics de la 1.5. En algún lugar del código estás haciendo algo como:

List listaDeClientes = new ArrayList();

y ese warning te indica que ahora podrías hacer

List listaDeClientes = new ArrayList();


Primary Key en entidades
Todas las entidades deberían tener un PK que puede ser simple o compuesta. Para identificar una PK se debe usar la anotación @Id

Las componentes de una PK pueden ser:


Los tipos en coma flotantes no puden usarse como PK.

El siguiente ejemplo define una PK como un autocorrelativo

@Entity
public class Empleado implemenets Serializable{
private Long Id;
....
@Id //Indica que maneja una PK
@GeneratedValue //Son valos autogenerados (correlativos)
public Long getId(){
return Id;
}

public void setId(Long Id){
this.Id=Id;
}

@Transient: Indica que un método o campo no es persistente. Esto implica que estos métodos o campos no serán almacenados permanentemente en la base de datos.

No hay comentarios: