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