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 rw...@apache.org on 2009/10/22 03:24:18 UTC
svn commit: r828271 - in /portals/jetspeed-2/portal/trunk: ./
components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/
components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/
components/jetspeed-page-m...
Author: rwatler
Date: Thu Oct 22 01:24:17 2009
New Revision: 828271
URL: http://svn.apache.org/viewvc?rev=828271&view=rev
Log:
sync page-manager, portal-site, and profiler component implementations between 2.1.4 and 2.2.1
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuDefinitionImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuExcludeDefinitionImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuIncludeDefinitionImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuOptionsDefinitionImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuSeparatorDefinitionImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentPreferenceImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsDefImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/page/document/proxy/NodeProxy.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/JETSPEED-INF/ojb/profiler_repository.xml
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManager.java
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManagerEventListener.java
portals/jetspeed-2/portal/trunk/pom.xml
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuDefinitionImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuDefinitionImpl.java Thu Oct 22 01:24:17 2009
@@ -24,7 +24,9 @@
import org.apache.jetspeed.om.folder.MenuDefinition;
/**
- * This class implements the MenuDefinition interface in a persistent object form for use by the page manager component.
+ * This class implements the MenuDefinition
+ * interface in a persistent object form for use by
+ * the page manager component.
*
* @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
* @version $Id$
@@ -35,46 +37,58 @@
* name - name of menu definition
*/
private String name;
+
/**
* options - comma separated option paths specification for menu
*/
private String options;
+
/**
* depth - depth of inclusion for folder options
*/
private int depth;
+
/**
* paths - generate ordered path options for options
*/
private boolean paths;
+
/**
* regexp - interpret specified optionsas regexp
*/
private boolean regexp;
+
/**
* profile - profile locator name filter for options
*/
private String profile;
+
/**
* order - comma separated list of ordering patterns for options
*/
private String order;
+
/**
* skin - skin name for menu
*/
private String skin;
+
/**
* title - title for menu
*/
private String title;
+
/**
* shortTitle - short title for menu
*/
private String shortTitle;
+
/**
- * menuElements - ordered polymorphic list of menu options nested menu, separator, include, and exclude definitions
+ * menuElements - ordered polymorphic list of menu options nested
+ * menu, separator, include, and exclude definitions
*/
private List menuElements;
+
/**
* menuElementImpls - ordered homogeneous list of menu elements
*/
@@ -89,7 +103,7 @@
/**
* getName - get menu name
- *
+ *
* @return menu name
*/
public String getName()
@@ -99,9 +113,8 @@
/**
* setName - set menu name
- *
- * @param name
- * menu name
+ *
+ * @param name menu name
*/
public void setName(String name)
{
@@ -110,7 +123,7 @@
/**
* getOptions - get comma separated menu options if not specified as elements
- *
+ *
* @return option paths specification
*/
public String getOptions()
@@ -120,9 +133,8 @@
/**
* setOptions - set comma separated menu options if not specified as elements
- *
- * @param options
- * option paths specification
+ *
+ * @param options option paths specification
*/
public void setOptions(String options)
{
@@ -131,7 +143,7 @@
/**
* getDepth - get depth of inclusion for folder menu options
- *
+ *
* @return inclusion depth
*/
public int getDepth()
@@ -141,9 +153,8 @@
/**
* setDepth - set depth of inclusion for folder menu options
- *
- * @param depth
- * inclusion depth
+ *
+ * @param depth inclusion depth
*/
public void setDepth(int depth)
{
@@ -152,28 +163,27 @@
/**
* isPaths - get generate ordered path options for specified options
- *
+ *
* @return paths options flag
*/
public boolean isPaths()
{
return paths;
}
-
+
/**
* setPaths - set generate ordered path options for specified options
- *
- * @param paths
- * paths options flag
+ *
+ * @param paths paths options flag
*/
public void setPaths(boolean paths)
{
this.paths = paths;
}
-
+
/**
* isRegexp - get regexp flag for interpreting specified options
- *
+ *
* @return regexp flag
*/
public boolean isRegexp()
@@ -183,9 +193,8 @@
/**
* setRegexp - set regexp flag for interpreting specified options
- *
- * @param regexp
- * regexp flag
+ *
+ * @param regexp regexp flag
*/
public void setRegexp(boolean regexp)
{
@@ -194,7 +203,7 @@
/**
* getProfile - get profile locator used to filter specified options
- *
+ *
* @return profile locator name
*/
public String getProfile()
@@ -204,9 +213,8 @@
/**
* setProfile - set profile locator used to filter specified options
- *
- * @param locatorName
- * profile locator name
+ *
+ * @param locatorName profile locator name
*/
public void setProfile(String locatorName)
{
@@ -215,7 +223,7 @@
/**
* getOrder - get comma separated regexp ordering patterns for options
- *
+ *
* @return ordering patterns list
*/
public String getOrder()
@@ -225,9 +233,8 @@
/**
* setOrder - set comma separated regexp ordering patterns for options
- *
- * @param order
- * ordering patterns list
+ *
+ * @param order ordering patterns list
*/
public void setOrder(String order)
{
@@ -236,7 +243,7 @@
/**
* getSkin - get skin name for menu
- *
+ *
* @return skin name
*/
public String getSkin()
@@ -246,9 +253,8 @@
/**
* setSkin - set skin name for menu
- *
- * @param name
- * skin name
+ *
+ * @param name skin name
*/
public void setSkin(String name)
{
@@ -257,7 +263,7 @@
/**
* getTitle - get default title for menu
- *
+ *
* @return title text
*/
public String getTitle()
@@ -267,9 +273,8 @@
/**
* setTitle - set default title for menu
- *
- * @param title
- * title text
+ *
+ * @param title title text
*/
public void setTitle(String title)
{
@@ -278,19 +283,18 @@
/**
* getShortTitle - get default short title for menu
- *
+ *
* @return short title text
*/
public String getShortTitle()
{
- return shortTitle;
+ return shortTitle;
}
/**
* setShortTitle - set default short title for menu
- *
- * @param title
- * short title text
+ *
+ * @param title short title text
*/
public void setShortTitle(String title)
{
@@ -298,8 +302,10 @@
}
/**
- * getMenuElements - get ordered list of menu options, nested menus, separators, included menu, and excluded menu elements
- *
+ * getMenuElements - get ordered list of menu options,
+ * nested menus, separators, included
+ * menu, and excluded menu elements
+ *
* @return element list
*/
public List getMenuElements()
@@ -309,9 +315,8 @@
/**
* setMenuElements - set ordered list of menu elements
- *
- * @param elements
- * element list
+ *
+ * @param elements element list
*/
public void setMenuElements(List elements)
{
@@ -320,7 +325,7 @@
/**
* getMenuElementImpls - get ordered list of wrapped menu elements
- *
+ *
* @return element list
*/
public List getMenuElementImpls()
@@ -329,10 +334,10 @@
}
/**
- * setMenuElementImpls - set ordered list of menu elements using a list of wrapped menu elements
- *
- * @param elements
- * element list
+ * setMenuElementImpls - set ordered list of menu elements using
+ * a list of wrapped menu elements
+ *
+ * @param elements element list
*/
public void setMenuElementImpls(List elements)
{
@@ -340,12 +345,14 @@
}
/**
- * unmarshalled - notification that this instance has been loaded from the persistent store
+ * unmarshalled - notification that this instance has been
+ * loaded from the persistent store
*/
public void unmarshalled()
{
// notify super class implementation
super.unmarshalled();
+
// unwrap menu elements and propagate
// unmarshalled notification
if (menuElementImpls != null)
@@ -355,23 +362,25 @@
while (menuElementIter.hasNext())
{
// unwrap menu element
- Object menuElement = ((MenuElementImpl) menuElementIter.next()).getElement();
+ Object menuElement = ((MenuElementImpl)menuElementIter.next()).getElement();
menuElements.add(menuElement);
+
// propagate unmarshalled notification
if (menuElement instanceof MenuMetadataImpl)
{
- ((MenuMetadataImpl) menuElement).unmarshalled();
+ ((MenuMetadataImpl)menuElement).unmarshalled();
}
}
}
else
{
- menuElements = null;
+ menuElements = null;
}
}
/**
- * marshalling - notification that this instance is to be saved to the persistent store
+ * marshalling - notification that this instance is to
+ * be saved to the persistent store
*/
public void marshalling()
{
@@ -386,16 +395,17 @@
// wrap menu element
Object menuElement = menuElementIter.next();
menuElementImpls.add(new MenuElementImpl(menuElement));
+
// propagate marshalling notification
if (menuElement instanceof MenuDefinitionImpl)
{
- ((MenuDefinitionImpl) menuElement).unmarshalled();
+ ((MenuDefinitionImpl)menuElement).unmarshalled();
}
}
}
else
{
- menuElementImpls = null;
+ menuElementImpls = null;
}
}
@@ -403,7 +413,6 @@
* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
- @Override
public boolean equals(Object obj)
{
if (!(obj instanceof MenuDefinition))
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuExcludeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuExcludeDefinitionImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuExcludeDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuExcludeDefinitionImpl.java Thu Oct 22 01:24:17 2009
@@ -20,7 +20,9 @@
import org.apache.jetspeed.om.folder.MenuExcludeDefinition;
/**
- * This class implements the MenuExcludeDefinition interface in a persistent object form for use by the page manager component.
+ * This class implements the MenuExcludeDefinition
+ * interface in a persistent object form for use by
+ * the page manager component.
*
* @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
* @version $Id$
@@ -52,15 +54,13 @@
/**
* setName - set menu name with options to exclude
*
- * @param name
- * menu name
+ * @param name menu name
*/
public void setName(String name)
{
this.name = name;
}
- @Override
public boolean equals(Object obj)
{
if (!(obj instanceof MenuExcludeDefinition))
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuIncludeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuIncludeDefinitionImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuIncludeDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuIncludeDefinitionImpl.java Thu Oct 22 01:24:17 2009
@@ -86,7 +86,6 @@
this.nest = nest;
}
- @Override
public boolean equals(Object obj)
{
if (!(obj instanceof MenuIncludeDefinition))
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuOptionsDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuOptionsDefinitionImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuOptionsDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuOptionsDefinitionImpl.java Thu Oct 22 01:24:17 2009
@@ -21,7 +21,9 @@
import org.apache.jetspeed.om.folder.MenuSeparatorDefinition;
/**
- * This class implements the MenuOptionsDefinition interface in a persistent object form for use by the page manager component.
+ * This class implements the MenuOptionsDefinition
+ * interface in a persistent object form for use by
+ * the page manager component.
*
* @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
* @version $Id$
@@ -32,31 +34,37 @@
* options - comma separated option paths specification for menu
*/
private String options;
+
/**
* depth - depth of inclusion for folder options
*/
private int depth;
+
/**
* paths - generate ordered path options for options
*/
private boolean paths;
+
/**
* regexp - interpret specified optionsas regexp
*/
private boolean regexp;
+
/**
* profile - profile locator name filter for options
*/
private String profile;
+
/**
* order - comma separated list of ordering patterns for options
*/
private String order;
+
/**
* skin - skin name for menu
*/
private String skin;
-
+
/**
* MenuOptionsDefinitionImpl - constructor
*/
@@ -66,7 +74,7 @@
/**
* getOptions - get comma separated menu options
- *
+ *
* @return option paths specification
*/
public String getOptions()
@@ -76,9 +84,8 @@
/**
* setOptions - set comma separated menu options
- *
- * @param options
- * option paths specification
+ *
+ * @param options option paths specification
*/
public void setOptions(String options)
{
@@ -87,7 +94,7 @@
/**
* getDepth - get depth of inclusion for folder options
- *
+ *
* @return inclusion depth
*/
public int getDepth()
@@ -97,9 +104,8 @@
/**
* setDepth - set depth of inclusion for folder options
- *
- * @param depth
- * inclusion depth
+ *
+ * @param depth inclusion depth
*/
public void setDepth(int depth)
{
@@ -108,28 +114,27 @@
/**
* isPaths - get generate ordered path options
- *
+ *
* @return paths options flag
*/
public boolean isPaths()
{
return paths;
}
-
+
/**
* setPaths - set generate ordered path options
- *
- * @param paths
- * paths options flag
+ *
+ * @param paths paths options flag
*/
public void setPaths(boolean paths)
{
this.paths = paths;
}
-
+
/**
* isRegexp - get regexp flag for interpreting options
- *
+ *
* @return regexp flag
*/
public boolean isRegexp()
@@ -139,9 +144,8 @@
/**
* setRegexp - set regexp flag for interpreting options
- *
- * @param regexp
- * regexp flag
+ *
+ * @param regexp regexp flag
*/
public void setRegexp(boolean regexp)
{
@@ -150,7 +154,7 @@
/**
* getProfile - get profile locator used to filter options
- *
+ *
* @return profile locator name
*/
public String getProfile()
@@ -160,9 +164,8 @@
/**
* setProfile - set profile locator used to filter options
- *
- * @param locatorName
- * profile locator name
+ *
+ * @param locatorName profile locator name
*/
public void setProfile(String locatorName)
{
@@ -171,7 +174,7 @@
/**
* getOrder - get comma separated regexp ordering patterns
- *
+ *
* @return ordering patterns list
*/
public String getOrder()
@@ -181,9 +184,8 @@
/**
* setOrder - set comma separated regexp ordering patterns
- *
- * @param order
- * ordering patterns list
+ *
+ * @param order ordering patterns list
*/
public void setOrder(String order)
{
@@ -192,7 +194,7 @@
/**
* getSkin - get skin name for options
- *
+ *
* @return skin name
*/
public String getSkin()
@@ -202,16 +204,14 @@
/**
* setSkin - set skin name for options
- *
- * @param name
- * skin name
+ *
+ * @param name skin name
*/
public void setSkin(String name)
{
skin = name;
}
- @Override
public boolean equals(Object obj)
{
if (!(obj instanceof MenuOptionsDefinition))
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuSeparatorDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuSeparatorDefinitionImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuSeparatorDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/folder/psml/MenuSeparatorDefinitionImpl.java Thu Oct 22 01:24:17 2009
@@ -175,7 +175,7 @@
}
}
}
- @Override
+
public boolean equals(Object obj)
{
if (!(obj instanceof MenuSeparatorDefinition))
@@ -191,6 +191,5 @@
}
return true;
}
- }
-
+ }
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentPreferenceImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentPreferenceImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentPreferenceImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentPreferenceImpl.java Thu Oct 22 01:24:17 2009
@@ -16,10 +16,10 @@
*/
package org.apache.jetspeed.om.page.psml;
+import java.util.ArrayList;
import java.util.List;
import org.apache.jetspeed.om.preference.FragmentPreference;
-import org.apache.jetspeed.page.impl.DatabasePageManagerUtils;
/**
*
@@ -59,7 +59,7 @@
{
if (this.values == null)
{
- this.values = DatabasePageManagerUtils.createList();
+ this.values = new ArrayList();
}
return this.values;
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsDefImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsDefImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsDefImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/SecurityConstraintsDefImpl.java Thu Oct 22 01:24:17 2009
@@ -43,7 +43,7 @@
* getName
* </p>
*
- * @see org.apache.jetspeed.om.common.SecurityConstraintsDef#getPortletName()
+ * @see org.apache.jetspeed.om.common.SecurityConstraintsDef#getName()
* @return
*/
public String getName()
@@ -56,7 +56,7 @@
* setName
* </p>
*
- * @see org.apache.jetspeed.om.common.SecurityConstraintsDef#setPortletName(java.lang.String)
+ * @see org.apache.jetspeed.om.common.SecurityConstraintsDef#setName(java.lang.String)
* @param name
*/
public void setName(String name)
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java Thu Oct 22 01:24:17 2009
@@ -57,10 +57,13 @@
{
private final static Logger log = LoggerFactory.getLogger(AbstractPageManager.class);
+ private final static long DEFAULT_NODE_REAPING_INTERVAL = 300000;
+
private final static String FOLDER_NODE_TYPE = "folder";
private final static String PAGE_NODE_TYPE = "page";
private final static String FRAGMENT_NODE_TYPE = "fragment";
private final static String LINK_NODE_TYPE = "link";
+
protected Class fragmentClass;
protected Class pageClass;
protected Class folderClass;
@@ -92,10 +95,37 @@
private List listeners = new LinkedList();
+ private long nodeReapingInterval = DEFAULT_NODE_REAPING_INTERVAL;
+
public AbstractPageManager(boolean permissionsEnabled, boolean constraintsEnabled)
{
this.permissionsEnabled = permissionsEnabled;
this.constraintsEnabled = constraintsEnabled;
+ // start node reaping deamon thread
+ if (this.nodeReapingInterval > 0)
+ {
+ Thread nodeReapingThread = new Thread(new Runnable()
+ {
+ public void run()
+ {
+ while (true)
+ {
+ try
+ {
+ // wait for reap interval and invoke reaping
+ // notification on page manager event listeners
+ Thread.sleep(nodeReapingInterval);
+ notifyReapNodes();
+ }
+ catch (InterruptedException ie)
+ {
+ }
+ }
+ }
+ }, "PageManagerNodeReapingThread");
+ nodeReapingThread.setDaemon(true);
+ nodeReapingThread.start();
+ }
}
public AbstractPageManager(boolean permissionsEnabled, boolean constraintsEnabled, Map modelClasses)
@@ -127,26 +157,16 @@
this.fragmentPreferenceClass = (Class)modelClasses.get("FragmentPreferenceImpl");
}
- /**
- * <p>
- * getPermissionsEnabled
- * </p>
- *
+ /* (non-Javadoc)
* @see org.apache.jetspeed.page.PageManager#getPermissionsEnabled()
- * @return
*/
public boolean getPermissionsEnabled()
{
return permissionsEnabled;
}
- /**
- * <p>
- * getConstraintsEnabled
- * </p>
- *
+ /* (non-Javadoc)
* @see org.apache.jetspeed.page.PageManager#getConstraintsEnabled()
- * @return
*/
public boolean getConstraintsEnabled()
{
@@ -154,6 +174,14 @@
}
/* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManager#getNodeReapingInterval()
+ */
+ public long getNodeReapingInterval()
+ {
+ return nodeReapingInterval;
+ }
+
+ /* (non-Javadoc)
* @see org.apache.jetspeed.page.PageManager#newPage(java.lang.String)
*/
public Page newPage(String path)
@@ -800,6 +828,34 @@
}
}
+ /**
+ * notifyReapNodes - notify page manager event listeners of
+ * reap nodes event
+ */
+ public void notifyReapNodes()
+ {
+ // copy listeners list to reduce synchronization deadlock
+ List listenersList = null;
+ synchronized (listeners)
+ {
+ listenersList = new ArrayList(listeners);
+ }
+ // notify listeners
+ Iterator listenersIter = listenersList.iterator();
+ while (listenersIter.hasNext())
+ {
+ PageManagerEventListener listener = (PageManagerEventListener)listenersIter.next();
+ try
+ {
+ listener.reapNodes(nodeReapingInterval);
+ }
+ catch (Exception e)
+ {
+ log.error("Failed to notify page manager event listener", e);
+ }
+ }
+ }
+
public Folder copyFolder(Folder source, String path)
throws NodeException
{
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/impl/DatabasePageManager.java Thu Oct 22 01:24:17 2009
@@ -187,6 +187,14 @@
}
/* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManager#getNodeReapingInterval()
+ */
+ public long getNodeReapingInterval()
+ {
+ return delegator.getNodeReapingInterval();
+ }
+
+ /* (non-Javadoc)
* @see org.apache.jetspeed.page.PageManager#newPage(java.lang.String)
*/
public Page newPage(String path)
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java Thu Oct 22 01:24:17 2009
@@ -84,6 +84,13 @@
{
removedNodeCount++;
}
+
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManagerEventListener#reapNodes(long)
+ */
+ public void reapNodes(long interval)
+ {
+ }
}
public static void main(String args[])
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/page/document/proxy/NodeProxy.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/page/document/proxy/NodeProxy.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/page/document/proxy/NodeProxy.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/page/document/proxy/NodeProxy.java Thu Oct 22 01:24:17 2009
@@ -42,6 +42,11 @@
public abstract class NodeProxy extends SiteViewProxy
{
/**
+ * URL_ENCODING - the name of a character encoding to be used in encoding path component name.
+ */
+ private static final String URL_ENCODING = "ISO-8859-1";
+
+ /**
* *_METHOD - Node method constants
*/
protected static final Method EQUALS_METHOD = reflectMethod(Object.class, "equals", new Class[]{Object.class});
@@ -68,11 +73,6 @@
private String url;
/**
- * urlEncoding - the name of a character encoding to be used in encoding path component name.
- */
- private String urlEncoding = "ISO-8859-1";;
-
- /**
* hidden - hidden status of this or parent node
*/
private boolean hidden;
@@ -119,14 +119,13 @@
if ((parent != null) && (name != null))
{
NodeProxy parentProxy = getNodeProxy(parent);
-
String parentPath = parentProxy.getPath();
String parentUrl = parentProxy.getUrl();
String urlEncodedName = name;
try
{
- urlEncodedName = URLEncoder.encode(name, urlEncoding);
+ urlEncodedName = URLEncoder.encode(name, URL_ENCODING);
}
catch (UnsupportedEncodingException e)
{
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java Thu Oct 22 01:24:17 2009
@@ -129,6 +129,11 @@
private transient String pipeline = "";
/**
+ * locatorsLastUpdateCheck - time stamp of last locators update check.
+ */
+ private transient long locatorsLastUpdateCheck;
+
+ /**
* PortalSiteSessionContextImpl - constructor
*
* @param pageManager PageManager component instance
@@ -154,8 +159,8 @@
* newRequestContext - create a new request context instance with history
*
* @param requestProfileLocators request profile locators
- * @param requestFallback flag specifying whether to fallback to folders if
- * locators do not select a page or access is forbidden
+ * @param requestFallback flag specifying whether to fallback to root folder
+ * if locators do not select a page or access is forbidden
* @return new request context instance
*/
public PortalSiteRequestContext newRequestContext(Map requestProfileLocators, boolean requestFallback)
@@ -167,8 +172,8 @@
* newRequestContext - create a new request context instance
*
* @param requestProfileLocators request profile locators
- * @param requestFallback flag specifying whether to fallback to folders if
- * locators do not select a page or access is forbidden
+ * @param requestFallback flag specifying whether to fallback to root folder
+ * if locators do not select a page or access is forbidden
* @param useHistory flag indicating whether to use visited page
* history to select default page per site folder
* @return new request context instance
@@ -182,8 +187,8 @@
* selectRequestPage - select page proxy for request given profile locators
*
* @param requestProfileLocators map of profile locators for request
- * @param requestFallback flag specifying whether to fallback to folders if
- * locators do not select a page or access is forbidden
+ * @param requestFallback flag specifying whether to fallback to root folder
+ * if locators do not select a page or access is forbidden
* @param useHistory flag indicating whether to use visited page
* history to select default page per site folder
* @return selected page proxy for request
@@ -277,13 +282,13 @@
// clear all history entries for fallback
// request path in advance to make fallback
// page selection more predictable
- Iterator folderIter = getFolderPageHistory().keySet().iterator();
- while (folderIter.hasNext())
+ Iterator folderPathIter = getFolderPageHistory().keySet().iterator();
+ while (folderPathIter.hasNext())
{
- Folder folder = (Folder)folderIter.next();
- if (folder.getUrl().equals(fallbackRequestPath))
+ String folderPath = (String)folderPathIter.next();
+ if (folderPath.equals(fallbackRequestPath))
{
- folderIter.remove();
+ folderPathIter.remove();
break;
}
}
@@ -538,21 +543,34 @@
{
Page requestPage = null;
- // attempt to lookup last visited page by folder proxy
- // path, (proxies are hashed by their path), contains
- // test must be performed since identical paths may
- // occur in multiple site views
+ // attempt to lookup last visited page by folder path;
+ // page id test must be performed since identical paths
+ // may occur in multiple site views
if (useHistory)
{
- requestPage = (Page)getFolderPageHistory().get(requestFolder);
- if ((requestPage != null) && requestFolderPages.contains(requestPage))
+ String requestPageId = (String)getFolderPageHistory().get(requestFolder.getPath());
+ if (requestPageId != null)
{
+ // find page by id in request folder pages
+ Iterator requestFolderPagesIter = requestFolderPages.iterator();
+ while ((requestPage == null) && (requestFolderPagesIter.hasNext()))
+ {
+ Page requestFolderPage = (Page)requestFolderPagesIter.next();
+ if (requestPageId.equals(requestFolderPage.getId()))
+ {
+ requestPage = requestFolderPage;
+ }
+ }
+
// log selected request page
- if (log.isDebugEnabled())
+ if (requestPage != null)
{
- log.debug("Selected folder historical page: path=" + view.getManagedPage(requestPage).getPath());
+ if (log.isDebugEnabled())
+ {
+ log.debug("Selected folder historical page: path=" + view.getManagedPage(requestPage).getPath());
+ }
+ return requestPage;
}
- return requestPage;
}
}
@@ -569,13 +587,12 @@
}
try
{
- // save last visited non-hidden page for folder proxy
- // path, (proxies are hashed by their path), and
- // return default page
+ // save last visited non-hidden page for folder path
+ // and return default page
requestPage = requestFolder.getPage(defaultPageName);
if (!requestPage.isHidden())
{
- getFolderPageHistory().put(requestFolder, requestPage);
+ getFolderPageHistory().put(requestFolder.getPath(), requestPage.getId());
}
// log selected request page
@@ -599,12 +616,11 @@
// default page not available, select first page
// proxy in request folder; save last visited
- // non-hidden page for folder proxy path, (proxies
- // are hashed by their path), and return default page
+ // non-hidden page for folder path and return default page
requestPage = (Page)requestFolderPages.iterator().next();
if (!requestPage.isHidden())
{
- getFolderPageHistory().put(requestFolder, requestPage);
+ getFolderPageHistory().put(requestFolder.getPath(), requestPage.getId());
}
// log selected request page
@@ -619,13 +635,12 @@
{
Page requestPage = (Page)requestNode;
- // save last visited non-hidden page for folder proxy
- // path, (proxies are hashed by their path), and
- // return matched page
+ // save last visited non-hidden page for folder path
+ // and return matched page
Folder requestFolder = (Folder)requestPage.getParent();
if (!requestPage.isHidden())
{
- getFolderPageHistory().put(requestFolder, requestPage);
+ getFolderPageHistory().put(requestFolder.getPath(), requestPage.getId());
}
// log selected request page
@@ -729,6 +744,7 @@
userPrincipal = currentUserPrincipal;
updated = true;
}
+ locatorsLastUpdateCheck = System.currentTimeMillis();
}
// log session context setup and update
@@ -759,11 +775,11 @@
{
debug.append("Updated stale");
}
- debug.append(" context: user=" + userPrincipal + ", profileLocators=(");
- if (profileLocators != null)
+ debug.append(" context: user=" + currentUserPrincipal + ", profileLocators=(");
+ if (requestProfileLocators != null)
{
boolean firstEntry = true;
- Iterator entriesIter = profileLocators.entrySet().iterator();
+ Iterator entriesIter = requestProfileLocators.entrySet().iterator();
while (entriesIter.hasNext())
{
Map.Entry entry = (Map.Entry)entriesIter.next();
@@ -801,23 +817,20 @@
/**
* clearSessionProfileLocators - clear cache session profile locators
*/
- private void clearSessionProfileLocators()
+ private synchronized void clearSessionProfileLocators()
{
// clear cached session profile locators, view,
// folder page history, menu definition locators,
// and stale flag
- synchronized (this)
+ profileLocators = null;
+ userPrincipal = null;
+ siteView = null;
+ folderPageHistory = null;
+ if (menuDefinitionLocatorCache != null)
{
- profileLocators = null;
- userPrincipal = null;
- siteView = null;
- folderPageHistory = null;
- if (menuDefinitionLocatorCache != null)
- {
- menuDefinitionLocatorCache.clear();
- }
- stale = false;
+ menuDefinitionLocatorCache.clear();
}
+ stale = false;
}
/**
@@ -828,18 +841,51 @@
*/
public SiteView getSiteView()
{
- if ((siteView == null) && (pageManager != null) && (profileLocators != null))
+ // get or create site view
+ SiteView view = siteView;
+ if (view == null)
{
- // create new site view
- siteView = new SiteView(pageManager, profileLocators);
+ // access site view and test for creation
+ boolean createView = false;
+ synchronized (this)
+ {
+ view = siteView;
+ createView = ((view == null) && (pageManager != null) && (profileLocators != null));
+ }
+ // create new site view if necessary
+ boolean viewCreated = false;
+ if (createView)
+ {
+ // create site view outside of synchronized state; this is
+ // required since construction of site view requires access
+ // to the page manager and page manager event notifications
+ // may arrive during construction of the site view which
+ // might then result in synchronized deadlock with page
+ // manager or page manager cache internals
+ view = new SiteView(pageManager, profileLocators);
+
+ // update site view if not already made available by another
+ // request thread
+ synchronized (this)
+ {
+ if ((siteView == null) && (pageManager != null) && (profileLocators != null))
+ {
+ siteView = view;
+ viewCreated = true;
+ }
+ view = siteView;
+ }
+ }
+
// log site view creation
- if (log.isDebugEnabled())
+ if (viewCreated && log.isDebugEnabled())
{
- log.debug("Created site view: search paths=" + siteView.getSearchPathsString());
+ log.debug("Created site view: search paths=" + view.getSearchPathsString());
}
}
- return siteView;
+
+ return view;
}
/**
@@ -861,7 +907,7 @@
*/
public boolean isValid()
{
- // existant transient page manager implies valid context
+ // existent transient page manager implies valid context
return (pageManager != null);
}
@@ -1111,12 +1157,8 @@
}
*/
- /**
- * newNode - invoked when the definition of a node is
- * created by the page manager or when the
- * node creation is otherwise detected
- *
- * @param node new managed node if known
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManagerEventListener#newNode(org.apache.jetspeed.page.document.Node)
*/
public void newNode(Node node)
{
@@ -1124,12 +1166,8 @@
updatedNode(node);
}
- /**
- * updatedNode - invoked when the definition of a node is
- * updated by the page manager or when the
- * node modification is otherwise detected
- *
- * @param node updated managed node if known
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManagerEventListener#updatedNode(org.apache.jetspeed.page.document.Node)
*/
public void updatedNode(Node node)
{
@@ -1153,12 +1191,8 @@
}
}
- /**
- * removedNode - invoked when the definition of a node is
- * removed by the page manager or when the
- * node removal is otherwise detected
- *
- * @param node removed managed node if known
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManagerEventListener#removedNode(org.apache.jetspeed.page.document.Node)
*/
public void removedNode(Node node)
{
@@ -1166,6 +1200,20 @@
updatedNode(node);
}
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.page.PageManagerEventListener#reapNodes(long)
+ */
+ public synchronized void reapNodes(long interval)
+ {
+ // reap page manager nodes for idle sessions to free
+ // system resources; the site view will be lazily
+ // recalculated if the session is resumed
+ if ((locatorsLastUpdateCheck > 0) && (System.currentTimeMillis()-locatorsLastUpdateCheck > interval))
+ {
+ siteView = null;
+ }
+ }
+
/**
* sessionDidActivate - notification that the session has just
* been activated
@@ -1238,18 +1286,18 @@
*/
public void valueUnbound(HttpSessionBindingEvent event)
{
- // unsubscribe this session context to page manager events
synchronized (this)
{
+ // unsubscribe this session context to page manager events
if (subscribed && (pageManager != null))
{
pageManager.removeListener(this);
subscribed = false;
}
- }
- // clear session context state
- clearSessionProfileLocators();
+ // clear session context state
+ clearSessionProfileLocators();
+ }
// log binding event
if (log.isDebugEnabled())
@@ -1258,7 +1306,7 @@
}
}
- private Map getFolderPageHistory()
+ private synchronized Map getFolderPageHistory()
{
if (folderPageHistory == null)
{
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/JETSPEED-INF/ojb/profiler_repository.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/JETSPEED-INF/ojb/profiler_repository.xml?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/JETSPEED-INF/ojb/profiler_repository.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-profiler/src/main/java/JETSPEED-INF/ojb/profiler_repository.xml Thu Oct 22 01:24:17 2009
@@ -179,8 +179,3 @@
</class-descriptor>
</descriptor-repository>
-
-
-
-
-
\ No newline at end of file
Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManager.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManager.java Thu Oct 22 01:24:17 2009
@@ -76,6 +76,13 @@
public boolean getPermissionsEnabled();
/**
+ * Get node reaping interval.
+ *
+ * @return reaping interval
+ */
+ public long getNodeReapingInterval();
+
+ /**
* Creates a new empty Page instance
*
* @return a newly created Page object
Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManagerEventListener.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManagerEventListener.java?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManagerEventListener.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/page/PageManagerEventListener.java Thu Oct 22 01:24:17 2009
@@ -53,4 +53,13 @@
* @param node removed managed node if known
*/
void removedNode(Node node);
+
+ /**
+ * reapNodes - periodically invoked by page manager to
+ * indicate lifetime of node references should
+ * be checked to see if they should be reaped
+ *
+ * @param interval reap nodes interval
+ */
+ void reapNodes(long interval);
}
Modified: portals/jetspeed-2/portal/trunk/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/pom.xml?rev=828271&r1=828270&r2=828271&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/pom.xml Thu Oct 22 01:24:17 2009
@@ -258,6 +258,7 @@
<!-- ddlutils svn r551445 with patch applied from http://issues.apache.org/jira/browse/DDLUTILS-75#action_12521579 -->
<ddlutils.version>r551445-patched-75</ddlutils.version>
<directory.version>0.9.3</directory.version>
+ <dom4j.version>1.6.1</dom4j.version>
<ehcache.version>1.5.0</ehcache.version>
<hsqldb.version>1.8.0.2</hsqldb.version>
<javolution.version>4.0.2</javolution.version>
@@ -922,7 +923,7 @@
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
- <version>1.6.1</version>
+ <version>${dom4j.version}</version>
<exclusions>
<exclusion>
<groupId>isorelax</groupId>
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org