Es una necesidad común la de almacenar datos de forma local de manera persistente, es decir almacenar información que sobrevive al tiempo de vida de los procesos, este ejemplo muestra el uso del motor de bases de datos relacional Apache Derby, totalmente escrito en java y utilizable como librería en nuestras aplicaciones, Derby tiene la característica que permite trabajar en modo «embebido», es decir sin contar con un «servidor» de bases de datos al cual conectarse, todo esto mientras cumple con JDBC y nos permite ejecutar SQL sobre nuestros datos.

basicamente Derby permite crear una base de datos en el sistema de archivos normal, como una carpeta, y acceder con todo el poder de un motor de base de datos relacional a dichos datos, estructurados, de forma transaccional etc.

puede resultar muy efectivo cuando la complejidad de los datos que almacenamos aumenta, de forma que los archivos de texto plano o xml consumen demasiado esfuerzo en mantener coherente el formato, generarlos, volver a parsearlos cuando son requeridos etc.

en el ejemplo se muestra como crear un proyecto basico en JDeveloper, crear una base de datos, cargar el driver JDBC de Apache Derby, crear una tabla, rellenarla con un dato aleatorio en cada ejecucion del ejemplo, y finalmente consultar la base de datos para extraer y recorrer todos los datos de dicha tabla.

Aplicación simple en Java que implementa una hoja de calculo a un nivel muy basico, permite copiar, cortar y pegar, ademas de modificar el formato de cada celda, como el color de fondo y el color de la fuente, ademas permite seleccionar grupos de celdas, tambien implementa la función guardar y abrir, usando serializacion.

Esta aplicación incluye una implementacion básica de una cola (queue) de enteros en Java utilizando memoria dinámica, una de las estructuras de datos mas utilizadas, las operaciones incluidas son enqueue para agregar elementos a la cola, dequeue para sacar elementos de la cola, top para obtener el valor del tope de la cola sin sacar el elemento, y size para saber el numero de elementos en la cola.




Codigo fuente en Oracle JDeveloper 11g

Cuando yo empecé con Spring lo miraba muy complicado y hasta cierto punto confuso, pero tirarme al agua directamente con un par de proyectos y googleando un poco he aprendido bastante. En el transcurso de mi aprendizaje en muy rara ocasión mirabla algo concreto, además empecé usando la versión 3 de Spring, la cual con la versión 2.5 varía considerablemente en muchas cosas. La ayuda que proporciona la página de Spring está bastante entendible.

En este post quiero mostrar como configurar nuestros beans con Spring. He utilizado Netbeans 6.9.1 como IDE de desarrollo y un proyecto de Maven para la gestión de dependencias.  La versión de Spring que he utilizado es las 3.0.2.RELEASE.
Para configurar spring se utiliza uno o varios archivos xml, en este caso he creado el archivo applicationContext.xml, la estructura inicial del xml debe de ser la siguiente:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Definición de Beans -- >
</beans>

Configuración de un bean

Suponiendo que se tiene el siguiente bean:

public class BasicBean {

private int id;
private String name;
private String description;

public BasicBean() {
this.id = 0;
this.name = "";
this.description = "";
}

public BasicBean(int id, String name, String description) {
this.id = id;
this.name = name;
this.description = description;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("BasicBean(id={").append(this.id)
.append("}, name={\"").append(this.name)
.append("\"}, description={\"").append(this.description)
.append("\"})");
return builder.toString();
}
// setters and getters
}

Hay varias formas de configurar este bean dentro del xml anterior:

  • La forma normal, por decirlo de esa manera, es la siguiente:
    <bean name="basicBeanConf1" class="gt.edu.guatejug.springtutoriala.beans.BasicBean">
    <property name="id"><value>1</value></property>
    <property name="name"><value>Bean Name 1</value></property>
    <property name="description"><value>Description form bean with id 1</value></property>
    </bean>

    En donde name, es el nombre que identifica al bean y debe de ser único, en el atributo class, se le indica el tipo de dato del bean.

    Dentro del tag <property>, van todas las propiedades del bean que tienen setters y getters implementados, con el atributo type se le puede indicar el tipo de dato de la propiedad, si no se le ingresa, Spring automaticamente determina el tipo de dato y dentro de este tag, el tag <value> que indica el valor de la propiedad.

  • La forma corta de configurar un bean es la siguiente:
    <bean name="basicBeanConf2" class="gt.edu.guatejug.springtutoriala.beans.BasicBean">
    <property name="id" value="2" />
    <property name="name" value="Bean Name 2" />
    <property name="description" value="Description for bean with id 2" />
    </bean>

    Ya no se utiliza el tag value, para poner el valor se utiliza como atributo del tag property.

  • Otra forma de configurar un bean es haciendo uso del equema p, esta forma de configurar beans aparece desde la versión 2.0.

    Primero que nada se debe de declarar el esquema en el nodo raiz del xml de la siguiente forma:

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <!-- Definición de Beans -- >
    </beans>

    Teniendo hecho lo anterior, para configurar un bean podemos hacer lo siguiente:

    <bean name="basicBeanConf3" class="gt.edu.guatejug.springtutoriala.beans.BasicBean"
    p:id="3" p:name="Bean Name 3" p:description="Description for bean with id 3"/>

    Todas las declaraciones se hacen desde que se declara el bean sin necesidad de utilizar otros tag.

    Los atributos del bean se mandan a llamar despues de p: y son los mismos como se declaran en el bean.

  • Tambien se puede llamar a un constructor cuando se crea un bean, se hace de la siguiente forma:
    <bean name="basicBeanConf4" class="gt.edu.guatejug.springtutoriala.beans.BasicBean">
    <constructor-arg>
    <value>4</value>
    </constructor-arg>
    <constructor-arg>
    <value>Bean Name 4</value>
    </constructor-arg>
    <constructor-arg>
    <value>Description for bean with id 4</value>
    </constructor-arg>
    </bean>
    Spring automaticamente, detectar el constructor adecuado conforme la configuración que se hizo. En otro post explicaré mas a detalles la llamada a los constructures de un bean.

Corriendo el demo

Basta de configuraciones, ahora para probar lo que se explicó anteriormente he utilizado una clase con el metodo main, con el siguiente código:

public static void main( String[] args ){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

BasicBean basicBean = (BasicBean) context.getBean("basicBeanConf1");
System.out.println(basicBean.toString());

basicBean = (BasicBean) context.getBean("basicBeanConf2");
System.out.println(basicBean.toString());

basicBean = (BasicBean) context.getBean("basicBeanConf3");
System.out.println(basicBean.toString());

basicBean = (BasicBean) context.getBean("basicBeanConf4");
System.out.println(basicBean.toString());

}

En la línea 2, se inicializa indicando el archivo xml que contiene los beans. Esto varía dependiendo el contexto en el que se está utilizando Spring.

Al ejecutar el código aparece en consola lo siguiente:

BasicBean(id={1}, name={"Bean Name 1"}, description={"Description for bean with id 1"})
BasicBean(id={2}, name={"Bean Name 2"}, description={"Description for bean with id 2"})
BasicBean(id={3}, name={"Bean Name 3"}, description={"Description for bean with id 3"})
BasicBean(id={4}, name={"Bean Name 4"}, description={"Description for bean with id 4"})

Esto es solo un pequeño ejemplo de como configurar beans con Spring 3. Para descargar el código fuente de este ejemplo, pulse AQUÍ.