Home > Apache 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 :-
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.
En el inventario de la aplicación se encuentra la siguiente lista de paquetes.
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.
<?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.
<?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.
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.
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; }
Las herramientas usadas para el desarrollo y construcción de la aplicación ejemplo dbtester, han sido:
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)_
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
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.
Al emplear la perspectiva J2EE dentro de EclipseWTP, basta con elegir exportar al proyecto como archivo WAR.
Activar dbtester es bastante simple, al emplear la Consola de Geronimo.
Regresar a la sección superior
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.
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.