You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2008/03/03 02:02:36 UTC

svn commit: r632897 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/ jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/ layout-portlet...

Author: taylor
Date: Sun Mar  2 17:02:35 2008
New Revision: 632897

URL: http://svn.apache.org/viewvc?rev=632897&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-860
Implement a second, Versioned Portlet Application Manager

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/deployment.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/jetspeed-services.xml
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
    portals/jetspeed-2/portal/trunk/layout-portlets/src/webapp/WEB-INF/jetspeed-portlet.xml

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java?rev=632897&r1=632896&r2=632897&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java Sun Mar  2 17:02:35 2008
@@ -77,7 +77,7 @@
      * this addresses possible startup errors in clustered environments
      */
     protected int  maxRetriedStarts = DEFAULT_MAX_RETRIED_STARTS;
-    protected DescriptorChangeMonitor monitor;
+    protected DescriptorChangeMonitor monitor = null;
     protected boolean started;
     protected String appRoot;
     protected NodeManager nodeManager;
@@ -155,7 +155,7 @@
 		this.searchEngine = searchEngine;
 	}
     
-    private void checkStarted()
+    protected void checkStarted()
     {
         if (!started)
         {
@@ -262,7 +262,8 @@
                 unregisterPortletApplication(pa, true);
                 try
                 {
-                	nodeManager.removeNode(paName);
+                    if (nodeManager != null)                    
+                        nodeManager.removeNode(paName);
                 }
                 catch (Exception ee)
                 {
@@ -375,8 +376,10 @@
 			this.updateSearchEngine(false, pa);
 			
 			// and add to the current node info
-			nodeManager.addNode(new Long(pa.getId().toString()), pa.getName());
-            
+            if (nodeManager != null)
+            {            
+                nodeManager.addNode(new Long(pa.getId().toString()), pa.getName());
+            }
             // grant default permissions to portlet application
 			grantDefaultPermissions(paName);
             

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java?rev=632897&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/VersionedPortletApplicationManager.java Sun Mar  2 17:02:35 2008
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.jetspeed.tools.pamanager;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.jetspeed.components.portletregistry.RegistryException;
+import org.apache.jetspeed.container.window.PortletWindowAccessor;
+import org.apache.jetspeed.factory.PortletFactory;
+import org.apache.jetspeed.om.common.LocalizedField;
+import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
+import org.apache.jetspeed.search.SearchEngine;
+import org.apache.jetspeed.security.PermissionManager;
+import org.apache.jetspeed.security.RoleManager;
+import org.apache.jetspeed.util.DirectoryHelper;
+import org.apache.jetspeed.util.FileSystemHelper;
+import org.apache.jetspeed.util.descriptor.PortletApplicationWar;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+
+
+public class VersionedPortletApplicationManager extends PortletApplicationManager implements PortletApplicationManagement
+{
+    private static final Log    log = LogFactory.getLog("deployment");
+        
+    public VersionedPortletApplicationManager(PortletFactory portletFactory, PortletRegistry registry, 
+            PortletEntityAccessComponent entityAccess, PortletWindowAccessor windowAccess,
+            PermissionManager permissionManager, SearchEngine searchEngine,  RoleManager roleManager,
+            List permissionRoles, /* node manager, */ String appRoot)
+    {
+        super(portletFactory, registry, entityAccess, windowAccess, permissionManager, 
+                searchEngine, roleManager, permissionRoles, null, appRoot); 
+               
+    }
+    
+    public boolean isStarted()
+    {
+        return started;
+    }
+    
+    public void start()
+    {
+        started = true;
+    }
+
+    public void stop()
+    {
+        started = false;
+    }
+        
+    // override to implement versioning logic
+    protected void startPA(String contextName, String contextPath, FileSystemHelper warStruct,
+            ClassLoader paClassLoader, int paType, long checksum)
+    throws RegistryException
+    {
+        PortletApplicationWar paWar = null;
+        try
+        {
+            paWar = new PortletApplicationWar(warStruct, contextName, contextPath, checksum);
+            try
+            {
+                if (paClassLoader == null)
+                {
+                    paClassLoader = paWar.createClassloader(getClass().getClassLoader());
+                }
+            }
+            catch (IOException e)
+            {
+                String msg = "Invalid PA WAR for " + contextName;
+                log.error(msg, e);
+                if ( paClassLoader == null )
+                {
+                    // nothing to be done about it anymore: this pa is beyond repair :(
+                    throw new RegistryException(e);
+                }
+                //register = false;
+            }
+            
+            MutablePortletApplication regPA = registry.getPortletApplication(contextName);
+            MutablePortletApplication newPA = paWar.createPortletApp();
+            if (regPA == null)
+            {
+                System.out.println("**** New portlet app found - registration required..." + contextName);
+                regPA = this.registerPortletApplication(paWar, null, paType, paClassLoader);
+            }
+            else
+            {
+                String regVersion = getVersion(regPA);
+                String newVersion = getVersion(newPA);
+                System.out.print("Reg version is " + regVersion);
+                System.out.print(", New version is " + newVersion);
+                if (newVersion.compareTo(regVersion) > 0)
+                {
+                    System.out.println(" - **** New Version is greater: registration required... " + contextName);
+                    regPA = this.registerPortletApplication(paWar, regPA, paType, paClassLoader);                    
+                }
+                else
+                {
+                    System.out.println(" - New Version is NOT greater: registration not required ... " + contextName);                    
+                }
+            }
+            if (portletFactory.isPortletApplicationRegistered(regPA))
+            {
+                portletFactory.unregisterPortletApplication(regPA);
+            }
+            portletFactory.registerPortletApplication(regPA, paClassLoader);
+        }
+        catch (Exception e)
+        {
+            String msg = "Error starting portlet application " + contextName;            
+            log.error(msg, e);
+            throw new RegistryException(msg, e);
+        }
+    }
+    
+    protected String getVersion(MutablePortletApplication pa)
+    {
+        String version = "";
+        Collection versionList = pa.getMetadata().getFields("pa-version");
+        if (versionList != null)
+        {
+            Iterator it = versionList.iterator();
+            if (it.hasNext())
+            {
+                LocalizedField field = (LocalizedField)it.next();
+                version = field.getValue();
+            }
+        }
+        return version;
+    }
+}
\ No newline at end of file

Added: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/deployment.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/deployment.xml?rev=632897&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/deployment.xml (added)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/deployment.xml Sun Mar  2 17:02:35 2008
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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.
+-->
+<beans>
+
+  <bean id="deployFactory" class="org.apache.jetspeed.tools.deploy.JetspeedDeployFactory"/>
+  <bean id="PAM" 
+  	   class="org.apache.jetspeed.tools.pamanager.VersionedPortletApplicationManager" init-method="start" destroy-method="stop"
+  >  	   
+  	   <constructor-arg><ref bean="portletFactory"/></constructor-arg>
+  	   <constructor-arg><ref bean="org.apache.jetspeed.components.portletregistry.PortletRegistry"/></constructor-arg>
+  	   <constructor-arg><ref bean="org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent"/></constructor-arg>
+  	   <constructor-arg><ref bean="org.apache.jetspeed.container.window.PortletWindowAccessor"/></constructor-arg>
+  	   <constructor-arg><ref bean="org.apache.jetspeed.security.PermissionManager"/></constructor-arg>       
+  	   <constructor-arg><ref bean="org.apache.jetspeed.search.SearchEngine"/></constructor-arg>              
+  	   <constructor-arg><ref bean="org.apache.jetspeed.security.RoleManager"/></constructor-arg>                     
+       <!-- role principals to assign a default permission(s) during deployment of a Portlet Application -->
+       <constructor-arg >
+         <list>
+            <value>user</value>
+         </list>
+       </constructor-arg>
+
+       <!--  application root -->
+        <constructor-arg>
+            <value>${applicationRoot}</value>
+        </constructor-arg>
+
+
+   <!-- optional configuration for automatic creation of not yet existing roles as defined in the deployed web.xml:
+       <property name="autoCreateRoles"><value>true</value></property>
+   -->      
+   <!-- optional descriptor change monitor check interval in seconds (0: disabled, default: 10):
+       <property name="descriptorChangeMonitorInterval"><value>10</value></property>
+   -->
+   <!-- optional max PA start retries in case of an error registering ths PA (0: do not retry, default: 10):
+   		this was introduced because of DB constraint validation errors in clustered environments
+   		see https://issues.apache.org/jira/browse/JS2-666
+       <property name="maxRetriedStarts"><value>10</value></property>
+   -->
+   
+   		
+  </bean>
+
+  <!-- Portlet Application and Decorator deployment event listeners -->
+  <bean id="portletAppDeploymentListener" 
+  	   class="org.apache.jetspeed.deployment.impl.DeployPortletAppEventListener"   	   
+  > 	
+  	   <constructor-arg index="0"><ref bean="PAM"/></constructor-arg>
+  	   <constructor-arg index="1"><ref bean="org.apache.jetspeed.components.portletregistry.PortletRegistry"/></constructor-arg>
+       <constructor-arg index="2"><value>${autodeployment.target.dir}</value></constructor-arg>
+       <constructor-arg index="3"><value>${applicationRoot}/WEB-INF/apps</value></constructor-arg>
+       <constructor-arg index="4"><value>${autodeployment.staging.dir}/local</value></constructor-arg>
+       <!-- strip commons-logging and/or log4j jars from war files: for JBoss set this to true -->
+       <constructor-arg index="5"><value>false</value></constructor-arg>
+  </bean>
+  <bean id="decoratorDeploymentRegistry" 
+  	   class="org.apache.jetspeed.deployment.simpleregistry.impl.InMemoryRegistryImpl"
+  >  	   
+  </bean>
+  <bean id="decoratorDeploymentListener" 
+  	   class="org.apache.jetspeed.deployment.impl.DeployDecoratorEventListener"   	   
+  > 	
+       <constructor-arg ><value>${applicationRoot}/decorations</value></constructor-arg>
+  </bean>
+
+  <!-- The deployment manager watches a specific staging directory for
+  	   deploying components.  What components get deployed depend of
+  	   DeploymentEventListeners registered to it.
+   -->
+  <bean id="deploymentManager" 
+  	   class="org.apache.jetspeed.deployment.impl.StandardDeploymentManager" 
+  	   init-method="start" destroy-method="stop"
+  >  	   
+       <constructor-arg ><value>${autodeployment.staging.dir}/local</value></constructor-arg>
+       <constructor-arg type="long" ><value>${autodeployment.delay}</value></constructor-arg>
+       <constructor-arg >
+         <list>
+            <ref bean="portletAppDeploymentListener"/>      
+            <ref bean="decoratorDeploymentListener"/>      
+         </list>
+       </constructor-arg>
+  </bean>    
+
+</beans>
\ No newline at end of file

Added: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/jetspeed-services.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/jetspeed-services.xml?rev=632897&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/jetspeed-services.xml (added)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/webapp/WEB-INF/assembly/alternate/versioned-deployment/jetspeed-services.xml Sun Mar  2 17:02:35 2008
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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.
+-->
+<beans>
+
+  <!-- Portlet Services  -->
+  <bean id="PortalServices" 
+  	   class="org.apache.jetspeed.services.JetspeedPortletServices" >
+  	   <constructor-arg>
+  	   	<map>
+  	   	  <entry key="PortletRegistryComponent">
+  	   	  	<ref bean="org.apache.jetspeed.components.portletregistry.PortletRegistry" />
+  	   	  </entry>
+  	   	  <entry key="SearchComponent">
+  	   	  	<ref bean="org.apache.jetspeed.search.SearchEngine"/>
+  	   	  </entry>
+  	   	  <entry key="PAM">
+  	   	  	<ref bean="PAM" />
+  	   	  </entry>		  
+  	   	  <entry key="UserManager">
+  	   	    <ref bean="org.apache.jetspeed.security.UserManager"/>
+  	   	  </entry>
+  	   	  <entry key="PageManager">
+  	   	    <ref bean="org.apache.jetspeed.page.PageManager"/>
+  	   	  </entry>
+  	   	  <entry key="RoleManager">
+  	   	    <ref bean="org.apache.jetspeed.security.RoleManager"/>
+  	   	  </entry>
+  	   	  <entry key="GroupManager">
+  	   	    <ref bean="org.apache.jetspeed.security.GroupManager"/>
+  	   	  </entry>  	
+  	   	  <entry key="Profiler">
+  	   	  	<ref bean="org.apache.jetspeed.profiler.Profiler"/>
+  	   	  </entry>   	  
+  	   	  <entry key="SSO">
+  	   	  	<ref bean="org.apache.jetspeed.sso.SSOProvider"/>
+  	   	  </entry>   	  
+  	   	  <entry key="EntityAccessor">
+  	   	  	 <ref bean='org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent'/>
+  	   	  </entry>
+  	   	  <entry key="WindowAccessor">
+  	   	  	 <ref bean='org.apache.jetspeed.container.window.PortletWindowAccessor'/>
+  	   	  </entry>
+          <entry key="PortletFactory">
+            <ref bean="portletFactory"/>
+          </entry>
+          <entry key="DeploymentManager">
+            <ref bean="deploymentManager"/>
+          </entry>
+          <entry key='IdGenerator'>
+            <ref bean='IdGenerator'/>
+          </entry>
+          <entry key='Powertools'>
+            <ref bean='Powertools'/>
+          </entry>
+          <entry key="HeaderResource">
+            <ref bean="org.apache.jetspeed.headerresource.HeaderResourceFactory"/>
+          </entry>
+		  <entry key="TemplateLocator">
+            <ref bean="TemplateLocator"/>
+          </entry>
+		  <entry key="DecorationLocator">
+            <ref bean="DecorationLocator"/>
+          </entry>		  
+		  <entry key="DecorationFactory">
+            <ref bean="DecorationFactory"/>
+          </entry>
+		  <entry key="Desktop">
+            <ref bean="JetspeedDesktop"/>
+          </entry>
+		  <entry key="PermissionManager">
+            <ref bean="org.apache.jetspeed.security.PermissionManager"/>
+          </entry>		            
+		  <entry key="PortalStatistics">
+            <ref bean="PortalStatistics"/>
+          </entry>		            
+		  <entry key="PortalAdministration">
+            <ref bean="PortalAdministration"/>
+          </entry>		            
+          <entry key="PreferencesProvider">
+            <ref bean="org.apache.jetspeed.prefs.PreferencesProvider"/>
+          </entry>
+          <entry key="org.apache.jetspeed.container.session.PortalSessionsManager">
+            <ref bean="org.apache.jetspeed.container.session.PortalSessionsManager"/>
+          </entry>
+          <entry key="SecurityAccessController">
+            <ref bean="org.apache.jetspeed.security.SecurityAccessController"/>
+          </entry>
+          <entry key="PortletTrackingManager">
+            <ref bean="org.apache.jetspeed.aggregator.PortletTrackingManager"/>
+          </entry>
+          <entry key ="PortalAuthenticationConfiguration">
+          	<ref bean="org.apache.jetspeed.administration.PortalAuthenticationConfiguration"/>
+          </entry>
+          <entry key ="PortalConfiguration">
+          	<ref bean="PortalConfiguration"/>
+          </entry>
+          <entry key="ImporterManager">
+            <ref bean="importerCastorPageManager"/>
+          </entry>          
+          <entry key="decorationContentCache">
+          	<ref bean="decorationContentCache"/>
+          </entry>
+          <entry key="portletContentCache">
+          	<ref bean="portletContentCache"/>
+          </entry>          
+          <entry key="AuditActivity">
+          	<ref bean="org.apache.jetspeed.audit.AuditActivity"/>
+          </entry>          
+          <entry key="JetspeedSerializerFactory">
+          	<ref bean="org.apache.jetspeed.serializer.JetspeedSerializerFactory"/>
+          </entry>
+<!-- first uncomment the below service bean in security-spi-atn.xml
+         <entry key="PasswordEncodingService">
+           <ref bean="org.apache.jetspeed.security.PasswordEncodingService" />
+         </entry>
+-->          
+  	   	</map>
+  	   </constructor-arg>
+  </bean>
+</beans>

Modified: portals/jetspeed-2/portal/trunk/layout-portlets/src/webapp/WEB-INF/jetspeed-portlet.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/layout-portlets/src/webapp/WEB-INF/jetspeed-portlet.xml?rev=632897&r1=632896&r2=632897&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/layout-portlets/src/webapp/WEB-INF/jetspeed-portlet.xml (original)
+++ portals/jetspeed-2/portal/trunk/layout-portlets/src/webapp/WEB-INF/jetspeed-portlet.xml Sun Mar  2 17:02:35 2008
@@ -26,6 +26,7 @@
     <dc:title xml:lang="en">Layout Portlets</dc:title>
     <dc:creator>J2 Team</dc:creator>
     <js:metadata name="layout-app">true</js:metadata>    
+    <js:metadata name="pa-version">2.2</js:metadata>
 
 	<js:services>
 	    <js:service name='IdGenerator'/>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org