SERVEI DE PORTLETS

Introducció










 






Propòsit

El Servei de Portlets té com a propòsit oferir un pont entre els components del Framework i les implementacions dels Portals. En aquest document es detalla com configurar aplicacions fetes amb el Framework per a que siguin compatibles amb dues implementacions de Portals: Apache Jetspeed 2.0 i Vignette 7.2.2.

Context i Escenaris d'Ús

El Servei de Portlets es troba dins dels serveis de Presentació de canigo.

Per a la utilització d'canigo en Portals, serà necessaria la utilització de la implementació d'Apache (Jetspeed 2.0) o la de Vignette (Vignette Portal 7.2.2).

Versions i Dependències

Les dependències descrites a la següent url son requerides per tal de compilar i fer funcionar el projecte:
Dependències Servei de Portlets

Versions

En la utilització del Framework amb el servei de portlets, només està suportada la versió 1.0 .

Glossari

Portal
Un Portal és un Web Site o servei que ofereix un gran ventall de recursos per accedir als serveis d'una Web.

Portlet
Aplicació web que permet ser desplegada en un Portal.

Page
Component d'un Portal que permet agrupar diversos portlets a la vegada i aplicar-lis diferents estils de presentació i layouts.

Site
Component d'un Portal que permet agrupar diverses pàgines (pages) formades per portlets.

Descripció Detallada

Arquitectura i Components

L'arquitectura del Servei de Portlets és basa en l'ús dels components del Framework complint els requeriments de la implementació de Portal que estiguem utilitzant.

Interfícies i Components Genèrics

Els tags del servei es troben definits mitjançant un conjunt d'interfícies que defineixen què s'espera de les implementacions mitjançant un conjunt de mètodes.

Es pot trobar tota la documentació JavaDoc y el codi font referent aquests components a les següents urls:

JavaDoc: http://canigo.ctti.gencat.net/confluence/canigodocs/site/canigo2_0/canigo-services-portlets/apidocs/index.html
Codi Font:  http://canigo.ctti.gencat.net/confluence/canigodocs/site/canigo2_0/canigo-services-portlets/xref/index.html

Instal- lació i Configuració

Instal- lació

Per a la utilització del Servei de Portlets és necessària una prèvia instal- lació del portal en un servidor (Tomcat, Weblogic, Websphere, etc..). Per fer-ho haurem de seguir el manual d'instal- lació de Vignette. En aquest document s'explicarà la instal- lació del Portal de Vignette sobre un servidor Apache Tomcat 5.0.28.

Instal- lació Apache Jetspeed 2.0

En aquesta implementació de portal apache ha decidit oferir conjuntament el servidor i el portal. El servidor és, realment, un Apache Tomcat i el portal és una aplicació anomenada jetspeed desplegada en ell.

Si la instal- lació ha estat correcta, accedint a []http://host:Port/jetspeed hauríem d'accedir a la pàgina principal de Jestpeed.

Instal- lació Apache Tomcat 5.0.28 - Vignette Portal 7.2.2

Per assegurar-nos de que el portal s'ha instal- lat correctament, ens hem d'assegurar que s'ha desplegat l'aplicació portal dins de %TOMCAT_HOME%\webapps i que s'ha creat el fitxer de context del portal (portal.xml) dins de %TOMCAT_HOME%\conf\Catalina\localhost.

També haurem de comprovar que en el directori %TOMCAT_HOME%\shared\lib hi tenim les següents llibreries:

portlet.jar
vgn-jsr-container-shared.jar
vgn-jsr-container-taglib.jar
vgn-portal-config.jar
vgn-portal-log-spi.jar
vgn-portal-naming-portlet.jar
vgn-portal-shared.jar
vgn-portlet-app-registry.jar

Si la instal- lació ha estat correcta, accedint a http://host:Port/portal/console hauríem d'accedir a la pàgina de login del Vignette Portal.

Configuració

L'apartat de configuració varia notablement depenent del servidor i de la implementació de portal que fem servir. Per això s'han definit configuracions específiques a part de la general.

Configuració General

Per a configurar una aplicació per poder desplegar-se dins d'un portal, haurem de seguir els següents passos:

  • Crear el fitxer WEB-INF\portlet.xml
    <?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>JPetstorePortlet2</portlet-name>
    
    <portlet-class>
    
    org.apache.portal.bridges.struts.StrutsPortlet
    
    </portlet-class>
    
    <init-param>
    
    <name>ServletContextProvider</name>
    
    <value>
    
    provider.package.ServletContextProviderImpl
    
    </value>
    
    </init-param>
    
    <init-param>
    
    <name>ViewPage</name>
    
    <value>/start.do</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>










Aquest fitxer descriu el nom i la classe del portlet (portals-bridges-struts-1.2.7-1.0.jar) i la implementació de la interface ServletContextProvider d'Struts-Bridge (portals-bridges-commons-1.0.jar). En aquest cas, la implementació ens l'ha de facilitar el proveïdor del portal.

  • Crear el fitxer META-INF\context.xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <Context  path="/canigo-samples-jPetstore-portlets" debug="5"  reloadable="true"
    crossContext="true"><Resource auth="Container" name="canigoDS"  type="javax.sql.DataSource"/>
    	<ResourceParams  name="canigoDS">
    		<parameter>
    			<name>driverClassName</name>
    			<value>oracle.jdbc.driver.OracleDriver</value>
    		</parameter>
    		<parameter>
    			<name>url</name>
    			<value>jdbc:oracle:thin:@bna-s007.es.int.atosorigin.com:1521:Legolas</value>
    		</parameter><parameter><name>username</name><value>canigo</value></parameter>
    		<parameter>
    			<name>password</name>
    			<value>canigo</value>
    		</parameter><parameter>
    			<name>maxActive</name>
    			<value>20</value>
    		</parameter><parameter>
    			<name>maxIdle</name>
    			<value>10</value>
    		</parameter>
    		<parameter>
    			<name>maxWait</name>
    			<value>-1</value></parameter>
    	</ResourceParams>
    </Context>










  • Modificar la classe del actionServlet dins del fitxer web.xml per a que apunti a la implementació del servei de portlets.
    <servlet-name>actionServlet</servlet-name>
    
    <servlet-class>
    
    com.atosorigin.canigo.services.portlets.DispatcherServlet
    
    </servlet-class>










  • Crear el fitxer nom_app-portlet.xml (petstore-portlet.xml) i importar-lo en el fitxer nom_app-servlet.xml (petstore-servlet.xml).
    En aquest fitxer hem de definir tots els filtres que tenim definits en el fitxer WEB-INF\web.xml de l'aplicació. En la propietat order definim l'ordre d'execució dels filtres.


...

<bean  id="acegiFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.sf.acegisecurity.util.FilterToBeanProxy">

</property>

<property  name="configMap">

<map>

<entry  key="targetClass"

value="net.sf.acegisecurity.util.FilterChainProxy">

</entry>

<entry  key="init"  value="lazy"></entry>

</map>

</property>

<property  name="order" value="2"></property>

<property  name="urlPatternList">

<list>

<value>/*/</value>

</list>

</property>

</bean>

<bean  id="localeFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.gencat.ctti.canigo.services.web.i18n.StrutsLocaleFilter">

</property>

<property  name="order" value="0"></property>

<property  name="urlPatternList">

<list>

<value>*.do</value>

<value>*.doc</value>

<value>*.report</value>

<value>*.pdf</value>

<value>/dwr/*</value>

<value>*.xls</value>

</list>

</property>

</bean>

...

















  • Afegim les dependències necessàries en el fitxer project.xml.
    <dependency>
    
    <groupId>portals-bridges-common</groupId>
    
    <artifactId>portals-bridges-common</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>portals-bridges-struts</groupId>
    
    <artifactId>portals-bridges-struts</artifactId>
    
    <version>1.2.7-1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>canigo</groupId>
    
    <artifactId>canigo-services-portlets</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>










  • Deployar el war en el servidor tal com es detalla en els manuals de configuració del portal.

Configuració Apache Jetspeed 2.0

Per a configurar una aplicació per poder desplegar-se dins del portal Jestpeed 2.0, haurem de seguir els següents passos:

  • Crear el fitxer WEB-INF\portlet.xml
    <?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>JPetstorePortlet2</portlet-name>
    
    <portlet-class>
    
    org.apache.portal.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>/start.do</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>










Aquest fitxer descriu el nom i la classe del portlet (portals-bridges-struts-1.2.7-1.0.jar) i la implementació de la interface ServletContextProvider d'Struts-Bridge (portals-bridges-commons-1.0.jar). En aquest cas, la implementació es troba dins de la llibreria jetspeed-commons-2.0.jar.

  • Crear el fitxer META-INF\context.xml


<?xml version="1.0" encoding="UTF-8"?>

<Context  path="/canigo-samples-jPetstore-portlets" debug="5"  reloadable="true"

crossContext="true">

<Resource auth="Container" name="canigoDS"  type="javax.sql.DataSource"/>

<ResourceParams  name="canigoDS">

<parameter>

<name>driverClassName</name>

<value>oracle.jdbc.driver.OracleDriver</value>

</parameter>

<parameter>

<name>url</name>

<value>jdbc:oracle:thin:@bna-s007.es.int.atosorigin.com:1521:Legolas</value>

</parameter>

<parameter>

<name>username</name>

<value>username</value>

</parameter>

<parameter>

<name>password</name>

<value>password</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>20</value>

</parameter>

<parameter>

<name>maxIdle</name>

<value>10</value>

</parameter>

<parameter>

<name>maxWait</name>

<value>-1</value>

</parameter>

</ResourceParams>

</Context>



















  • Modificar la classe del actionServlet dins del fitxer web.xml per a que apunti a la implementació del servei de portlets.
    <servlet-name>actionServlet</servlet-name>
    
    <servlet-class>
    
    com.atosorigin.canigo.services.portlets.DispatcherServlet
    
    </servlet-class>










  • Crear el fitxer nom_app-portlet.xml (petstore-portlet.xml) i importar-lo en el fitxer nom_app-servlet.xml (petstore-servlet.xml).
    En aquest fitxer hem de definir tots els filtres que tenim definits en el fitxer WEB-INF\web.xml de l'aplicació. En la propietat order definim l'ordre d'execució dels filtres.


...

<bean  id="acegiFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.sf.acegisecurity.util.FilterToBeanProxy">

</property>

<property  name="configMap">

<map>

<entry  key="targetClass"

value="net.sf.acegisecurity.util.FilterChainProxy">

</entry>

<entry  key="init"  value="lazy"></entry>

</map>

</property>

<property  name="order" value="2"></property>

<property  name="urlPatternList">

<list>

<value>/*/</value>

</list>

</property>

</bean>

<bean  id="localeFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.gencat.ctti.canigo.services.web.i18n.StrutsLocaleFilter">

</property>

<property  name="order" value="0"></property>

<property  name="urlPatternList">

<list>

<value>*.do</value>

<value>*.doc</value>

<value>*.report</value>

<value>*.pdf</value>

<value>/dwr/*</value>

<value>*.xls</value>

</list>

</property>

</bean>

...



















  • Afegim les dependències necessàries en el fitxer project.xml.
    <dependency>
    
    <groupId>portals-bridges-common</groupId>
    
    <artifactId>portals-bridges-common</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>portals-bridges-struts</groupId>
    
    <artifactId>portals-bridges-struts</artifactId>
    
    <version>1.2.7-1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>canigo</groupId>
    
    <artifactId>canigo-services-portlets</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>










  • Deployar el war en el servidor. Això ho farem copiant el war en %JETSPEED_HOME%\webapps\jetspeed\deploy.

Configuració Tomcat 5.0.28 - Vignette7.2.2

Per a configurar una aplicació per poder desplegar-se dins d'un portal, haurem de seguir els següents passos:

  • Crear el fitxer WEB-INF\portlet.xml
    <?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>JPetstorePortlet2</portlet-name>
    
    <portlet-class>
    
    com.vignette.portal.bridges.struts.StrutsPortlet
    
    </portlet-class>
    
    <init-param>
    
    <name>ServletContextProvider</name>
    
    <value>
    
    com.vignette.portal.bridges.ServletContextProviderImpl
    
    </value>
    
    </init-param>
    
    <init-param>
    
    <name>ViewPage</name>
    
    <value>/start.do</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>










Aquest fitxer descriu el nom i la classe del portlet i la implementació de la interface ServletContextProvider d'Struts-Bridge (portals-bridges-commmons-1.0.jar). En aquest cas, la implementació es troba dins de la llibreria vgn-portal-jsrextensions-1.0.jar.

  • Crear el fitxer META-INF\context.xml


<?xml version="1.0" encoding="UTF-8"?>

<Context  path="/canigo-samples-jPetstore-portlets" debug="5"  reloadable="true"

crossContext="true">

<Resource auth="Container" name="canigoDS"  type="javax.sql.DataSource"/>

<ResourceParams  name="canigoDS">

<parameter>

<name>driverClassName</name>

<value>oracle.jdbc.driver.OracleDriver</value>

</parameter>

<parameter>

<name>url</name>

<value>jdbc:oracle:thin:@bna-s007.es.int.atosorigin.com:1521:Legolas</value>

</parameter>

<parameter>

<name>username</name>

<value>username</value>

</parameter>

<parameter>

<name>password</name>

<value>password</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>20</value>

</parameter>

<parameter>

<name>maxIdle</name>

<value>10</value>

</parameter>

<parameter>

<name>maxWait</name>

<value>-1</value>

</parameter>

</ResourceParams>

</Context>



















  • Modificar la classe del actionServlet dins del fitxer web.xml per a que apunti a la implementació del servei de portlets.
    <servlet-name>actionServlet</servlet-name>
    
    <servlet-class>
    
    com.atosorigin.canigo.services.portlets.DispatcherServlet
    
    </servlet-class>










  • Crear el fitxer nom_app-portlet.xml (petstore-portlet.xml) i importar-lo en el fitxer nom_app-servlet.xml (petstore-servlet.xml).
    En aquest fitxer hem de definir tots els filtres que tenim definits en el fitxer WEB-INF\web.xml de l'aplicació. En la propietat order definim l'ordre d'execució dels filtres.


<bean  id="strutsMenuFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.gencat.ctti.canigo.samples.jpetstore.struts.menu.AcegiPermissionsFilter">

</property>

<property  name="urlPatternList">

<list>

<value>*.do</value>

</list>

</property>

<property  name="order" value="3"></property>

</bean>

<bean  id="UrlRewriteFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.gencat.ctti.canigo.services.web.filter.urlrewrite.UrlRewriteFilter">

</property>

<property  name="configMap">

<map>

<entry key="logLevel"  value="LOG4J"></entry>

</map>

</property>

<property  name="order" value="4"></property>

<property  name="urlPatternList">

<list>

<value>/*/</value>

</list>

</property>

</bean>

<bean  id="acegiFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.sf.acegisecurity.util.FilterToBeanProxy">

</property>

<property  name="configMap">

<map>

<entry  key="targetClass"

value="net.sf.acegisecurity.util.FilterChainProxy">

</entry>

<entry  key="init"  value="lazy"></entry>

</map>

</property>

<property  name="order" value="2"></property>

<property  name="urlPatternList">

<list>

<value>/*/</value>

</list>

</property>

</bean>

<bean  id="localeFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.gencat.ctti.canigo.services.web.i18n.StrutsLocaleFilter">

</property>

<property  name="order" value="0"></property>

<property  name="urlPatternList">

<list>

<value>*.do</value>

<value>*.doc</value>

<value>*.report</value>

<value>*.pdf</value>

<value>/dwr/*</value>

<value>*.xls</value>

</list>

</property>

</bean>

<bean  id="jstlLocaleFilterInterceptor"

class="com.atosorigin.canigo.services.portlets.struts.FilterInterceptor"

singleton="false">

<property  name="filterClass"

value="net.gencat.ctti.canigo.services.web.i18n.JSTLLocaleFilter">

</property>

<property  name="order" value="1"></property>

<property  name="urlPatternList">

<list>

<value>*.do</value>

<value>*.doc</value>

<value>*.report</value>

<value>*.pdf</value>

<value>/dwr/*</value>

<value>*.xls</value>

</list>

</property>

</bean>



















  • Definir els beans strutsWrappingController i dwrInvokerController dins del fitxer nom_app-portlet.xml (petstore-portlet.xml).
    <bean  id="dwrInvokerController"
    
    class="com.atosorigin.canigo.services.portlets.ServletWrappingController">
    
    <property  name="servletClass"
    
    value="uk.ltd.getahead.dwr.DWRServlet"  />
    
    <property name="servletName" value="dwr-invoker"  />
    
    <property name="initParameters">
    
    <props>
    
    <prop  key="debug">true</prop>
    
    <prop  key="config">/WEB-INF/classes/dwr/dwr.xml</prop>
    
    </props>
    
    </property>
    
    </bean>
    
    <bean  id="strutsWrappingController"
    
    class="org.springframework.web.servlet.mvc.ServletWrappingController">
    
    <property  name="servletClass">
    
    <value>
    
    com.atosorigin.canigo.services.portlets.struts.PortletServlet
    
    </value>
    
    </property>
    
    <property  name="servletName">
    
    <value>action</value>
    
    </property>
    
    <property  name="initParameters">
    
    <props>
    
    <prop  key="config">
    
    /WEB-INF/classes/struts/struts-  config.xml
    
    </prop>
    
    <prop  key="config/ptop">
    
    /WEB-INF/classes/struts/ptop/struts-  config.xml
    
    </prop>
    
    <prop  key="config/admin">
    
    /WEB-INF/classes/struts/admin/struts-  config.xml
    
    </prop>
    
    </props>
    
    </property>
    
    </bean>










  • Afegim les dependències necessàries en el fitxer project.xml.
    <dependency>
    
    <groupId>vgn-portal-jsrextensions</groupId>
    
    <artifactId>vgn-portal-jsrextensions</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>portals-bridges-common</groupId>
    
    <artifactId>portals-bridges-common</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>portals-bridges-struts</groupId>
    
    <artifactId>portals-bridges-struts</artifactId>
    
    <version>1.2.7-1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>
    
    <dependency>
    
    <groupId>canigo</groupId>
    
    <artifactId>canigo-services-portlets</artifactId>
    
    <version>1.0</version>
    
    <properties>
    
    <war.bundle>true</war.bundle>
    
    </properties>
    
    </dependency>










  • Modificar el fitxer web.xml per a que compleixi els requeriments del Vignette Portal. Això podem fer-ho automàticament mitjançant una eina de Vignette. Per utilitzar-la còmodament podem crear els següents goals de maven:
    <!-Vignette Portal Tool->
    <property environment="env"/>
    
    <property name="maven.repo" value="$\{env.MAVEN_REPO\}"/>
    
    <path id="classpath">
    <pathelement path="classes" />
    <echo message="maven.repo=$\{maven.repo\}"/>
    <fileset dir="$\{maven.repo\}" includes="vgn-portal-ant/jars/*.jar" />
    <fileset dir="$\{maven.repo\}" includes="ant/jars/*.jar" />
    <fileset dir="$\{maven.repo\}" includes="xalan/jars/xalan.jar" />
    </path>
    
    <taskdef name="PortletPackageTool" classname="com.vignette.portal.ant.external.portlet.PackageTask">
    <classpath refid="classpath" />
    </taskdef>
    
    <goal name="canigo: PortletPackageTool">
    
    <echo message="Rebuilding war file."/>
    <record name="portlet_package_log.txt" loglevel="info"/>
    <PortletPackageTool file="target\$\{canigo.war.wtp.module\}.war"
    contextroot = "$\{canigo.war.wtp.module\}"
    rename="false"
    failonerror="true">
    </PortletPackageTool>
    </goal>
    
    <goal name="canigo:WarPortletPackageTool">
    
    <attainGoal name="war:war"/>
    <attainGoal name="canigo: PortletPackageTool"/>
    
    </goal>










El goal canigo: PortletPackageTool ddd modifica el war que tenim creat en el directori \target. El goal canigo:WarPortletPackageTool crea prèviament el war en el directori \target. Per a que aquest goal funcioni hem de tenir definida la propietat ctti.war.wtp.module dins del fitxer project.properties:

ctti.war.wtp.module=canigo-samples-jPetstore-portlets











També és necessari tenir en el repositori maven la llibreria vgn-portal-ant.jar, que trobarem a %PORTAL_HOME%\ant\lib_portal. També hi hem de tenir les llibreries d'ant i de xalan.




Les modificacions que fa aquesta eina en el fitxer.xml són les següents:
<!-- ADDED BY VIGNETTE PORTLET PACKAGING TOOL. DO NOT EDIT --><context-param>
<param-name>contextPath</param-name>
<param-value>appContextPath</param-value>
<description>Context root to which this web application is deployed. Used by the Portal JSR
168 implementation.</description>
</context-param>
<!-- END THIS VIGNETTE PACKAGING TOOL ADDITION. -->

<!-- ADDED BY VIGNETTE PORTLET PACKAGING TOOL. DO NOT EDIT -->
<filter>
<filter-name>PortletApplicationSecurityFilter</filter-name>
<filter-class>com.vignette.portal.portlet.jsrcontainer.PortletApplicationSecurityFilter</filter-class>
</filter>
<!-- END THIS VIGNETTE PACKAGING TOOL ADDITION. -->

<!-- ADDED BY VIGNETTE PORTLET PACKAGING TOOL. DO NOT EDIT -->
<filter-mapping>
<filter-name>PortletApplicationSecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- END THIS VIGNETTE PACKAGING TOOL ADDITION. -->

<!-- ADDED BY VIGNETTE PORTLET PACKAGING TOOL. DO NOT EDIT -->
<listener>
<listener-class>com.vignette.portal.portlet.jsrcontainer.PortletApplicationServletContextListener
</listener-class>
</listener>
<!-- END THIS VIGNETTE PACKAGING TOOL ADDITION. -->

<!-- ADDED BY VIGNETTE PORTLET PACKAGING TOOL. DO NOT EDIT -->
<servlet>
<servlet-name>PortletCommandServlet</servlet-name>
<display-name>Portlet Command Servlet</display-name>
<description>Utilized by Portal to invoke JSR 168 portlets</description>
<servlet-class>com.vignette.portal.portlet.jsrcontainer.PortletCommandServlet</servlet-class>
</servlet>
<!-- END THIS VIGNETTE PACKAGING TOOL ADDITION. -->

<!-- ADDED BY VIGNETTE PORTLET PACKAGING TOOL. DO NOT EDIT -->
<servlet-mapping>
<servlet-name>PortletCommandServlet</servlet-name>
<url-pattern>/portletCommand/*</url-pattern>
</servlet-mapping>
<!-- END THIS VIGNETTE PACKAGING TOOL ADDITION. -->

















  • Deployar el war en el servidor. En Tomcat, el copiarem en %TOMCAT_HOME%\webapps.

Seguint tots els passos descrits fins aquest punt, simplement arrancant el servidor el Vignette Portal reconeixerà l'aplicació que hem deployat en el servidor com un portlet.

Els components que el Framework encara no suporta en la seva integració amb el Servei de Portlets són els següents:

  • Search Panel
  • Autocomplete
  • Paginació de selects.

Els components suportats pel Framework són els següents:

  • Dirty Form Warning
  • Botons amb imatges
  • Pestanyes
  • GridBagLayout
  • Format i limitació d'entrada de dades.
  • Calendari.
  • Tag Swap Select.

Eines de Suport

Debug de les Pàgines

En l'ús de les nostres pàgines és convenient sempre conèixer si estan ben construïdes. Aquesta comprovació es pot realitzar amb l'extensió 'Web Developer' i 'Javascript Debugger', que ens permetràn detectar problemàtiques de les nostres pàgines.

Preguntes Freqüents

  1. Al accedir em dona un error: "java.lang.ClassNotFoundException"

Si al provar d'accedir a qualsevol mòdul de l'aplicació portal de Vignette ens trobem amb una excepció del tipus "java.lang.ClassNotFoundException", el més probable és que algun mòdul de Vignette no s'hagi deployat correctament. Per solucionar-ho haurem de redeployar el mòdul. Això ho farem copiant el fitxer ".car" corresponent del directori %VIGNETTE_HOME%\system\bootstrap a %VIGNETTE_HOME%\deployment\upload i fent un restart del Tomcat. Això ho trobarem explicat amb més detall en el document portalinstallguide.pdf en l'apartat de "upgrade portal".

  1. Em surt un avís: "This system is currently starting up".

Quan deployem per primera vegada el portal de Vignette o redeployem algun dels seus mòduls, depenent de la màquina on es trobi el servidor, pot ser que veiem l'avís de "This system is currently starting up." durant molt de temps i sembli que el portal s'hagi bloquejat. No és així, si editem el log corresponent (%VIGNETTE_HOME%\logs) veurem que el portal realment està arrancant.