HomeApache Geronimo v1.1 > Documentation > Apache Geronimo v1.1 - Guía de Usuario > Aplicaciones ejemplo > Aplicación ejemplo de Prueba de Pool de BD


El acceso a características específicas del servidor de aplicaciones y usarlas en tu aplicación J2EE le haría más poderosa que sólo tener acceso a sus características propias J2EE. Te proporciona la capacidad de escribir extensiones para tu servidor de aplicaciones.

Esta aplicación ejemplo enlista a toda pool de conexiones de base de datos definida en Geronimo. Puedes elegir cualquier pool de conexiones y probar su conectividad a la base de datos, así como enlistar esquemas y tablas existentes. Además, el usuario puede ver los registros de cada una de las tablas enlistadas.

Con la lectura de este artículo deberías ser capaz de tener acceso a recursos específicos de Geronimo desde tus aplicaciones y usarlos de una forma eficiente.

Este artículo esta organizado en las secciones siguientes :-

Visión General de la Aplicación


La apliación ejemplo en este artículo te ayudará a probar las pools de conexiones a bases de datos que se encuentren activas en tu servidor Geronimo. Puedes considerarlo como una extensión a la consola Geronimo, ya que la versión actual no contiene la funcionalidad de probar conexiones a pools de base de datos después de su activación.

La figura siguiente ilustra el flujo de la aplicación.

La página de Bienvenida funciona como un boletín de noticias que despliega la lista de pools de conexiones a bases de datos que estén activas en el servidor de aplicaciones Geronimo. Los usuarios pueden probar directamente a dichas pools de conexiones desde la primer página. Si una pool de conexiones particular requiere un username y password para obtener la conexión, te permite ingresar dichos valores en la ventana pop up que aparece. La lista de esquemas de base de datos y las tablas asociadas con la pool de conexiones será desplegada en la página de Esquemas y Tablas. Se puede tener acceso al contenido de cada tabla desde dicha página.

Contenido de la Aplicación

En el inventario de la aplicación se encuentra la siguiente lista de paquetes.

  • org.apache.geronimo.ejemplos.dbtester.beans
    • DBManagerBean - Corazón de la aplicación, el cual controla la mayor parte de la lógica de la aplicación (incluyendo el acceso al Kernel de Geronimo).
  • org.apache.geronimo.ejemplos.dbtester.web
    • ContentTableServlet - Obtiene el contenido de una tabla de la Base de Datos y le dirige a la capa de presentación.
    • ListTablesServlet - Obtiene la lista de esquemas y tablas asociadas a una pool de conexiones a BD.

La lista de los archivos web de la aplicación, se ilustran en el diagrama siguiente.

|- jsp
|   |- contenido_de_tabla.jsp
|   |- error_comun.jsp
|   |- lista_de_tablas.jsp
|   |- popup.jsp
|- WEB-INF
|   |- geronimo-web.xml
|   |- web.xml
|- index.jsp

geronimo-web.xml define la lista de dependencias que deben ser cargadas por el cargador de clases de la aplicación web.

geronimo-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1"
    xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1"
    xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1"
    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1">
    <sys:environment>
        <sys:moduleId>
            <sys:groupId>org.apache.geronimo.ejemplos</sys:groupId>
            <sys:artifactId>dbtester</sys:artifactId>
            <sys:version>1.0</sys:version>
            <sys:type>car</sys:type>
        </sys:moduleId>
        <sys:dependencies>
            <sys:dependency>
                <sys:groupId>geronimo</sys:groupId>
                <sys:artifactId>geronimo-kernel</sys:artifactId>
            </sys:dependency>
            <sys:dependency>
                <sys:groupId>geronimo</sys:groupId>
                <sys:artifactId>geronimo-connector</sys:artifactId>
            </sys:dependency>
            <sys:dependency>
                <sys:groupId>geronimo</sys:groupId>
                <sys:artifactId>geronimo-management</sys:artifactId>
            </sys:dependency>
            <sys:dependency>
                <sys:groupId>mx4j</sys:groupId>
                <sys:artifactId>mx4j</sys:artifactId>
            </sys:dependency>
        </sys:dependencies>
    </sys:environment>
    <context-root>/dbtester</context-root>
</web-app>

web.xml define dos servlets que actuarán como la capa de control entre la capa de presentación y la capa de servicio.

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>dbtester</display-name>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <display-name>ContentTableServlet</display-name>
        <servlet-name>ContentTableServlet</servlet-name>
        <servlet-class>
            org.apache.geronimo.ejemplos.dbtester.web.ContentTableServlet
        </servlet-class>
    </servlet>
    <servlet>
        <display-name>ListTablesServlet</display-name>
        <servlet-name>ListTablesServlet</servlet-name>
        <servlet-class>
            org.apache.geronimo.ejemplos.dbtester.web.ListTablesServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ContentTableServlet</servlet-name>
        <url-pattern>/listContent</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ListTablesServlet</servlet-name>
        <url-pattern>/listTables</url-pattern>
    </servlet-mapping>

</web-app>

La parte más importante en esta aplicación es el cómo tener acceso al kernel de Geronimo y así obtener la lista de las pools de conexiones a bases de datos que se encuentren activas. Esta tarea es constrolada por la clase DBManagerBean.

DBManagerBean.java
private void init() {
        Kernel kernel = KernelRegistry.getSingleKernel();
        Set cfList = kernel.listGBeans(new AbstractNameQuery(
                ConnectionFactorySource.class.getName()));

        for (Iterator iterator = cfList.iterator(); iterator.hasNext();) {
            AbstractName name = (AbstractName) iterator.next();
            try {
                Object rs = kernel.invoke(name, "$getResource",
                        new Object[] {}, new String[] {});
                if (rs instanceof javax.sql.DataSource) {
                    DataSource ds = (DataSource) rs;
                    poolMap.put(name.getArtifact().getArtifactId(), ds);
                }
            } catch (GBeanNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchOperationException e) {
                e.printStackTrace();
            } catch (InternalKernelException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Para obtener la lista de esquemas y sus tablas, la aplicación usa metadatos de la base de datos proporcionados por un controlador JDBC. Metadata de ResultSet ha sido usada para obtener datos relacionados con registros y para desplegar el contenido de la base de datos. El siguiente código snippet ilustra el cómo solicita la aplicación a los esquemas y a sus tablas en un DataSource.

DBManagerBean.java
public Map getTableList(String poolName) throws SQLException {
        tableMap = new HashMap();
        if (poolMap.containsKey(poolName)) {
            DataSource ds = (DataSource) poolMap.get(poolName);
            Connection con = null;
            try {
                con = ds.getConnection();
                DatabaseMetaData metaData = con.getMetaData();
                String[] tableTypes = { "TABLE" };
                ResultSet rs = metaData.getTables(null, null, null, tableTypes);
                while (rs.next()) {
                    String schemaName = rs.getString("TABLE_SCHEM");
                    String tableName = rs.getString("TABLE_NAME");
                    ArrayList tableList = null;
                    if (tableMap.containsKey(schemaName)) {
                        tableList = (ArrayList) tableMap.get(schemaName);
                        tableList.add(tableName);
                    } else {
                        tableList = new ArrayList();
                        tableList.add(tableName);
                    }
                    tableMap.put(schemaName, tableList);
                }
            } catch (SQLException e) {
                throw e;
            } finally {
                if (con != null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        return tableMap;
    }

Herramientas usadas

Las herramientas usadas para el desarrollo y construcción de la aplicación ejemplo dbtester, han sido:

Eclipse

El IDE Eclipse fue usado para el desarrollo de esta aplicación ejemplo. Es una herramienta de desarrollo muy poderosa, popular y open-source. También están disponibles plug-ins de integración con el servidor de aplicaciones Geronimo. Eclipse puede ser descargado de la siguiente URL:
http://www.eclipse.org

_NOTA: en la traducción al español, se hizo la adaptación al IDE EclipseWTP (http://www.eclipse.org/webtools) junto con el plugin de integración con Geronimo: g-eclipse-plugin-1.1.x-deployable (http://geronimo.apache.org/devtools.html)_

Apache Maven 2

Maven es una herramienta popular de construcción open-source para proyectos Java enterprise, diseñada para facilitar el tedioso trabajo del proceso de construcción. Maven usa una propuesta declarativa, donde la estructura del proyecto y su contenido se describen, en lugar de la propuesta basada-en-tareas que emplea, por ejemplo, Ant ó en archivos make tradicionales. Esto ayuda a consolidar estándares comúnes-en-grupo y reduce el tiempo requerido para escribir y mantener scripts de construcción. La propuesta declarativa, basada-en-ciclo-de-vida que usa Maven 1 es, para muchos, un salto radical de las técnicas tradicionales de construcción, y Maven 2 da mayor énfasis en ese sentido. Maven 2 puede ser descargado de la siguiente URL:
http://maven.apache.org

_NOTA: En la traducción al español no se empleó Maven2_

Regresar a la sección superior

Construyendo y Activando la Aplicación Ejemplo

Descarga la aplicación dbtester de la siguiente liga:
dbtester_EXPORT

Después de extraer el archivo zip, el directorio dbtester será creado. Como alternativa, puedes importar directamente al archivo zip en un nuevo proyecto Dynamic Web Proyect, llamándolo dbtester, dentro de EclipseWTP; sólo faltaría configurar a .project y .classpath en ese proyecto, lo cual se logra al dar de alta al servidor Geronimo en el proyecto.

Construcción

Al emplear la perspectiva J2EE dentro de EclipseWTP, basta con elegir exportar al proyecto como archivo WAR.

Activación

Activar dbtester es bastante simple, al emplear la Consola de Geronimo.

  1. Navega a la liga Deploy New (Activar Nuevo) del panel Console Navigation _(Navegación de Consola)_.
  2. Carga al archivo dbtester.war, ubicado en el directorio destino de tu exportación a WAR, dentro al campo Archive.
  3. Presina al botón Install para activar la aplicación en el servidor.

Regresar a la sección superior

Probando la Aplicación Ejemplo

También puedes aprovechar al plugin g-eclipse-plugin-1.1.x-deployable para agregar y probar al proyecto dentro de EclipseWTP, mediante la opción Add and Remove Projects..., la cual se encuentra disponible a partir del servidor Geronimo de tu workspace.

Con ello puedes probar la aplicación mediante un explorador web, en la dirección http://localhost:8080/dbtester. Lo anterior cargará la página índice de la aplicación, la cual actua como notificador de la lista de pools de bases de datos que se encuentren activas en Geronimo.

El usuario puede probar directamente a las pools enlistadas en esta aplicación. Además, la aplicación puedes ser usada para listar el contenido de las bases de datos.

Resumen

Este artículo te ha mostrado como tener acceso a recursos de Geronimo a partir de una aplicación J2EE. Con esto puedes construir, activar y probar una aplicación ejemplo para comprobar el acceso a algunos recursos. Esta aplicación ejemplo puede ser usada como un tester para pools de conexiones a bases de datos activas en Geronimo.