19 de Abril de 2006 (Daniel P.)Objetivos:El objetivo principal es la de servir como guía, en la que se explica paso a paso, todas las tareas que se debe de realizar para poder realizar con éxito una migración de una aplicación Struts a un Portlet JSR 168 que se pueda desplegar con éxito en un contendor de Portlets como es JetSpeed. Prerrequisitos:1. Tener instalado Jetspeed 2. 2. Aplicación Struts con la versión 1.2.4 o 1.2.7. 3. Nociones básicas sobre Portlets JSR-168. 4. Aplicación desarrollada siguiendo los buenas prácticas de programación para Struts, los enlaces generados con la etiqueta html:link Procedimiento – Pasos para la Migración:Actualizar la versión de StrutsEn este paso se deberá de migrar la aplicación Struts a una de las dos versiones de Struts soportadas por Struts-Bridge. Se ha probado con otras versiones de Struts (1.1) y parece funcionar sin problemas sin realizar esta migración, no obstante este punto debería de estudiarse a fondo hasta poder concluir si tiene alguna implicación posterior la no realización de esta migración a una de las dos versiones requeridas por Struts-Bridge. Para la elaboración de esta guía se ha migrado a la versión 1.2.7. • Copia de los archivos contenidos en la versión 1.2.7: o Nos bajamos la versión 1.2.7 de Struts. o Descomprimimos el archivo o Copiamos todos los archivos .jar al directorio: webapp\WEB-INF\lib o Copiamos todos los archivos .tld al directorio: webapp\WEB-INF\tld o Copiamos todos los archivos .dtd al directorio: webapp\WEB-INF\dtd Nota: Los directorios destinos podrán variar dependiendo de la estructura que se ha seguido en la realización de la aplicación. • Comprobamos una vez actualizada a la nueva versión de Struts si nuestra aplicación continúa funcionando sin problemas para lo cual deberemos de arrancar nuestro servidor de aplicación y ejecutarla.
Migrar a un Portlet JSR 168 desplegado en JetspeedIntroducciónUna vez migrada, o no, la aplicación a la versión correspondiente de Struts, nos dispondremos a realizar las tareas necesarias para migrar la aplicación Struts a un Portlet para su despliegue posterior en Jetspeed.Pasos• Instalación y configuración de la librería portals-bridges-struts-1.2.7-1.0.jar. o Copia de la librería portals-bridges-struts-1.2.7-1.0.jar dentro de WEB-INF/lib. o Configuración de las tareas ANT para el empaquetizado de esta librería en el war (Si es que las utilizamos).• Probar que la aplicación siga funcionando como aplicación Struts. • Sustituir la taglib struts-html por la http://portals.apache.org/bridges/struts/tags-portlet-html, para lo cual se deberá de sustituir la siguiente línea de cada archivo JSP que la utilice: <%@ taglib uri="struts-html" prefix="html" %> Por la siguiente: <%@ taglib uri="http://portals.apache.org/bridges/struts/tags-portlet-html" prefix="html" %> o Esta permitirá, que las etiquetas html:link generen los enlaces tanto para la aplicación Struts como para la aplicación Portlet, ya que los enlaces serán totalmente distintos dependiendo de que con que tipo de aplicación se esté trabajando. • Probar que la aplicación funcione correctamente como aplicación Struts. • Modificaciones en el archivo de configuración web.xml o Buscar el servlet action y sustituir su información por la siguiente <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.portals.bridges.struts.PortletServlet</servlet-class> … </servlet> • Probar que la aplicación funcione correctamente como aplicación Struts. • Modificaciones en el archivo de configuración struts-config.xml: o Introducir en este archivo justo encima de la etiqueta <message-resources> la siguiente línea: <controller pagePattern="$M$P" inputForward="false" processorClass="org.apache.portals.bridges.struts.PortletRequestProcessor"/> • Probar que la aplicación funcione correctamente como aplicación Struts. • Crear el archivo struts-portlet-config.xml en WEB-INF. Ejemplo: <?xml version="1.0" encoding="UTF-8"?> <config> <render-context> <attribute name="errors"/> <attribute name="message"/> </render-context> <portlet-url-type> <action path="/shop/add"/> <action path="/shop/switch"/> <action path="/shop/remove"/> <action path="/shop/signoff"/> <action path="/shop/viewCategory"/> <action path="/shop/viewItem"/> <action path="/shop/viewProduct"/> <action path="/shop/viewCart"/> <action path="/shop/newOrder"/> <render path="/shop/newOrderForm"/> <action path="/shop/listOrders"/> <resource path="/images/"/> </portlet-url-type> </config> Se indicará las action que son entradas en el portlet. • Crear el archivo portlet.xml en WEB-INF. Ejemplo: <?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <portlet-name>JPetstorePortlet</portlet-name> <portlet-class>org.apache.portals.bridges.struts.StrutsPortlet</portlet-class> <init-param> <name>ServletContextProvider</name> <value>org.apache.jetspeed.portlet.ServletContextProviderImpl </value> </init-param> <init-param> <name>ViewPage</name> <value>/index.shtml</value> </init-param> <init-param> <name>HelpPage</name> <value>/help.shtml</value> </init-param> <expiration-cache>-1</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> <portlet-mode>HELP</portlet-mode> </supports> <portlet-info> <title>JPetstore</title> <keywords>Struts</keywords> </portlet-info> </portlet> </portlet-app> Donde se deberá de cambiar el nombre comprendido en <portlet-name>JPetstorePortlet</portlet-name> por el nombre que tendrá el Portlet. Desplegar el Portlet en JetspeedPara desplegar el Portlet en Jetspeed es necesario crear un archivo psml e introducirlo en \Apache Jetspeed 2.0\webapps\jetspeed\WEB-INF\pages veamos un ejemplo de un archivo de este tipo: <!-- Copyright 2004 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <page id="jpetstore"> <defaults skin="orange" layout-decorator="tigris" portlet-decorator="pretty-single-portlet" /> <title>JPetstore</title> <metadata name="title" xml:lang="ja">ペットストア</metadata> <metadata name="short-title" xml:lang="es">JPetstore</metadata> <metadata name="title" xml:lang="es">Demo: tienda de animales</metadata> <metadata name="title" xml:lang="hu">Kisállatkereskedés (JPetstore)</metadata> <metadata name="title" xml:lang="zh">å® ç‰©åº—</metadata> <fragment id="jp-1" type="layout" name="jetspeed-layouts::VelocityOneColumn"> <fragment id="jp-2" type="portlet" name="jpetstore::JPetstorePortlet"/> </fragment> <security-constraints> <security-constraints-ref>public-view</security-constraints-ref> </security-constraints> </page> Después se deberá de copiar la aplicación empaquetada como war al siguiente directorio de Jetspeed: <apache root>\Apache Jetspeed 2.0\webapps\jetspeed\WEB-INF\deploy\, una vez iniciado el servidor de aplicaciones de Jetspeed, la aplicación será desplegada. Podremos acceder al portal en la siguiente dirección http://localhost:8080/jetspeed/portal/, entonces deberemos de ver la nueva pestaña que contendrá el Portlet, pudiera suceder que la aplicación todavía no ha sido registrada para lo cual se deberá acceder directamente a ella, simplemente se tendrá que ir a la siguiente dirección para poder comprobar si se tiene desplegada y funcionando la aplicación Portlet: http://localhost:8080/jetspeed/portal/nombrePortlet.psml, donde nombrePortlet.psml es el nombre del archivo psml que se ha creado. Otras consideracionesSe ha detectado un pequeño problema con las tiles. Al pasar una aplicación Struts a Portlet la aplicación se vuelve sensible a mayúsculas, por tanto deberemos de revisar el archivo tiles-defs.xml en busca de posibles incongruencias.ResumenEn este apartado se ha mostrado las tareas necesarias para poder realizar una migración con éxito entre una aplicación Struts y un Portlet JSR-168 en el contenedor de Portlets Jetspeed.En está pagína web podrá encontrar un pequeño resumen donde se explican las características de cada uno de los archivos de configuración que hemos visto hasta el momento y que servirán para realizar la configuración de estos correctamente: Archivo de configuración de un portlet portlet.xml Archivo de configuración de Struts-Bridge struts-portlet-config.xml Archivo de despliegue de un porlet en Jetspeed 2 asistenciaTecnica2.psml
|