Bien, ésto mejora las cosas; sin embargo se siguen teniendo básicamente tres problemas:
Bien, para esta parte existen varias propuestas, pero la más interesante es un proyecto del grupo Apache que denominan XSP (eXtensible Server Pages). Para conocer un poco más de XSP vea el Capítulo 4
Como vemos, ya se explicó a grandes rasgos que el entorno de publicación web basado en XML es la mejor solución al problema planteado: Separar Contenido, Lógica y Presentación. Es aquí en donde entra el proyecto del grupo Apache llamado por ellos Apache Cocoon.
![]() | Es importante resaltar que esta solución tiene un problema: Es muy poco madura y aun anda en proceso de prueba lo cual genera expectativas de todo tipo. Cocoon es hasta el momento entre este tipo de soluciones, la más desarrollada y cuenta con gran credibilidad en este momento. |
Existen cuatro grupos generales de componentes. Éstos son:
Son los que llevan a cabo las transformaciones y las acciones (Ver Sección 3.1.1).
Son los serializadores (Ver Sección 3.1.1).
Es la parte encargada de hacer las selecciones y el proceso de match (Sección 7.1.1)
Esto incluye una serie de pasos, como identificar de forma selectiva el pipeline correcto que debe atender la solicitud pedida, cerciorarse de que el pipeline se lleve a cabo y producir el resultado al cliente que hizo la solicitud.
Estructuralmente hablando Cocoon está compuesto de:
La anterior información se puede apreciar con el siguiente gráfico.
De acuerdo a la forma como se programan, las XSPs se pueden dividir en tres grupos:
![]() | Para más información de XSP y acceso a Bases de Datos vaya a la Sección 8.2.2. |
La instalación de Tomcat es realmente muy sencilla.
Lo primero que debe hacer es descargar el instalador. Ésto lo puede hacer desde este enlace en el cuál encontrará la última versión de este producto de licencia libre. Para el momento en el que este documento estaba siendo elaborado la versión más reciente de Jakarta Tomcat era la 4.0.3 y ya existía una alfa para la versión 4.1.0
Una vez descargado el instalador, ejecútelo. Los pasos a seguir son bastante intuitivos y no presentan problema alguno.
En el directorio donde instaló Tomcat, es decir, donde está la raíz de la aplicación, lo llamaremos CATALINA_HOME (CATALINA es el nombre del contenedor de Servlets de Tomcat, el cuál tiene una implementación totalmente distinta desde la versión 4).
Para subir y bajar Tomcat vaya al directorio CATALINA_HOME/bin. Ahí encontrará dos scripts para llevar a cabo esta operación (startup y shutdown respectivamente).
Tomcat se ejecuta por omisión en el puerto 8080, así que una vez que haya arrancado Tomcat puede probar la instalación abriendo en el navegador la dirección http://localhost:8080. Si la instalación no tuvo problemas se le mostrará una página de bienvenida semejante a ésta:
De Cocoon se pueden obtener dos distribuciones. La que trataremos en esta parte es la distribución en binario que puede ser descargada de este enlace. Con esta distribución lo único que usted debe hacer es descargarla y descomprimirla en cualquier directorio. En el directorio que usted eligió deberá haber quedado el fichero cocoon.war. Este fichero es el de la aplicación Cocoon.
Para que Tomcat y Cocoon se puedan comunicar, usted debe copiar el cocoon.war en el directorio CATALINA_HOME/webapps e iniciar Tomcat.
Cuando usted inicia Tomcat puede darse cuenta que el fichero es descomprimido automáticamente en el directorio CATALINA_HOME/webapps/cocoon/, el cual llamaremos de ahora en adelante COCOON_HOME. Para probar si cocoon está funcionando puede abrir la dirección http://localhost:8080/cocoon/ en el browser, en la cual debe mostrársele una página de bienvenida de este estilo.
Primero det todo, usted debe tener instalado CVS. Si usted no lo ha instalado aún en su máquina, puede consultar el sitio web de CVS para más información.
En el momento que tenga instalado el CVS, ingrese al servidor de CVS de Apache de la siguiente forma:
Cuando se le pregunte por una contraseña escriba anoncvs. Luego escriba lo siguiente:
$ cvs -d:pserver:anoncvs@cvs.apache.org:/home/cvspublic -z3 checkout -r cocoon_20_branch xml-cocoon2
Una vez hecho esto se inicia la descarga de todo el código necesario para la compilación de Cocoon.
![]() | Si usted está interesado en hacer pruebas con Cocoon es útil crear una aplicación aparte para este fin. Ésto lo puede hacer creando un directorio nuevo bajo CATALINA_HOME/webapps. Supongamos que a dicho directorio se le pone como nombre pruebasCocoon. Lo que usted debe hacer es copiar el fichero COCOON_HOME/cocoon.xconf y la carpeta COCOON_HOME/WEB-INF en CATALINA_HOME/webapps/pruebasCocoon/. Ésto ya es suficiente para empezar a hacer sus pruebas y sus desarrollos ya que en WEB-INF están todas las clases necesarias para hacer que Cocoon pueda funcionar correctamente. Cree también su propio sitemap en CATALINA_HOME/webapps/pruebasCocoon(con lo cual no corre el riesgo de alterar los ejemplos y la documentación que ya existan) y cargue su aplicación en http://localhost:8080/pruebasCocoon/ |
![]() | Es de anotar que no tiene porque crear un fichero XSL por cada fichero XML que tenga en su aplicación, sólo que para efectos de un ejemplo de muestra basta con hacerlo de esta forma. |
![]() | Tenga en cuenta la ruta en la que guarda su DTD para que el fichero XML la pueda reconocer. |
![]() | Es recomendable manejar rutas relativas en la declaración de la DTD para mejorar la portabilidad de la aplicación. |
![]() | Cuando este construyendo aplicaciones en Cocoon es bastante útil definir directorios para guardar sus ficheros XML, XSL, sus DTD, sus fuentes, sus clases, etc. |
Bien, el pipeline que usted debe añadir es de este estilo:
![]() | Para un ejemplo un poco más detallado consulte el Apéndice A. |
![]() | En Construcción |
Para acceder una base de datos usted debe tener en cuenta tres pasos:
Ésto lo debe hacer en al fichero cocoon.xconf añadiendo las siguientes líneas en la etiqueta datasources
Para que cargue el driver e incluir el driver de tal forma que Cocoon tenga un lugar desde donde cargarlo.
Para configurar el web.xml con ayuda de la etiqueta init-param y la etiqueta hija de ésta, param-name con valor load-class enunciando dentro de esta última el nombre del driver y separando el nombre de los distintos drivers por coma o espacio. Por ejemplo, para incluir un driver para Oracle y otro para IBM WebSphere las líneas de código que deberían verse en el fichero web.xml serían:
![]() | Si usted está utilizando la Base de Datos que viene con Cocoon (hsql)este paso no es necesario |
Para la construcción de páginas XSP, contamos con dos tipos de etiquetas, SQL y ESQL.
Añada un pipeline en el sitemap que sea de la forma:
![]() | Para este caso, estamos indicando que el transformador es de tipo sql y que se debe usar una conexión llamada MiConexion. Es decir, estamos indicando desde el sitemap el nombre de la conexión |
Teniendo en cuenta todo lo anteriormente expuesto, se pueden escribir páginas con etiquetas sql.
Añada un pipeline en el sitemap que sea de la forma:
![]() | Para este caso, estamos indicando que el generador es de tipo serverpages. |
Teniendo en cuenta todo lo anteriormente expuesto, se pueden escribir páginas con etiquetas sql.
![]() | Note que en este caso, es en la página XSP en donde se define el nombre de la conexión. |
Para poder lograr esto Cocoon provee una herramienta poderosa, el concepto de SubSitemap.
Para poder utilizar esta técnica sólo se deben tener en cuenta dos cosas:
En el fichero sitemap.xmap de Cocoon se deben añadir las siguientes líneas:
Bien, miremos un poco este código para comprenderlo mejor:
![]() | En ambientes de desarrollo es bastante útil tener la opción de que cada vez que se haga un cambio, éste se pueda reflejar de forma inmediata. Sin embargo en ambientes de producción es mejor tener configurado que los cambios se reflejen una vez el servicio se baje y se vuelva a restaurar; ésto es para no perjudicar a los usuarios de la aplicación quienes podrían tener la impresión de una aplicación lenta. Mejor aún si crea una copia de la aplicación, para tener una en producción y otra en desarrollo para hacer las pruebas. Para conocer como crear una aplicación en Cocoon consulte la sugerencia que está al final de la sección Sección 6.2.2 |
Miremos un poco este subsitemap:
<!-- =========================== Components ================================ --> <map:components> <map:generators default="file"/> <map:transformers default="xslt"/> <map:readers default="resource"/> <map:serializers default="html"/> <map:selectors default="browser"/> <map:matchers default="wildcard"/> </map:components>
<map:pipelines> <map:pipeline> <map:match pattern="index.html"> <map:generate type="file" src="$MiAplicacion/XML/index.xml"/> <map:transform src="$MiAplicacion/XSL/HTML/index.xsl"/> </map:match> <map:handle-errors> <map:transform src="../stylesheets/system/error2html.xsl"/> <map:serialize status-code="500"/> </map:handle-errors> </map:pipeline> </map:pipelines>
![]() | Fíjese que en la línea
<map:match pattern="index.html">
se está diciendo que si se hace una solicitud de la
página index.html, tome los datos
del documento index.xml y le
aplique la transformación dada en
index.xsl. Lo importante aquí es
observar que esta página será mostrada cuando se
cargue la dirección
http://localhost:8080/cocoon/MiAplicacion/index.html
ya que el subsitemap
esta dentro de $MiAplicacion y en el
sitemap general se dijo
que la cadena $MiAplicacion sería
truncada.
|
Para las personas que no estén familiarizadas con la tecnología XML, en este documento se da una breve descripción de lo que es una DTD (Sección A.3.2.1), de lo que es un documento XML (Sección A.3) y de lo que es una XSL (Sección A.4) junto con un ejemplo de cada una de estas definiciones aplicadas al formato que tenemos como tema principal.
![]() | Este documento sólo pretende ser un pequeño "abrebocas" de lo que son estas tecnologías punta. Es muy básico y la explicación está pensada para personas con muy pocos conocimientos. |
No es más que un conjunto de reglas para definir etiquetas semánticas para organizar un documento.
DTD es la sigla de Document Type Definition (Definición de Tipo de Documento).
Es un fichero lógico que contiene la definición formal de un tipo de documento en particular
XSL es el acrónimo de eXtensible Style Language (Lenguaje de Estilo eXtensible).
También sirve para definir cómo acceder cierto punto de la estructura de un documento. XPath.
![]() | Tenga en cuenta la ruta en la que guarda su DTD para que el fichero XML la pueda reconocer. |
![]() | Es recomendable manejar rutas relativas en la declaración de la DTD para mejorar portabilidad de la aplicación. |
![]() | Cuando esté construyendo aplicaciones en Cocoon es bastante útil definir directorios para guardar sus ficheros XML, XSL, sus DTD, sus fuentes, sus clases, etc. |