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 2007/02/19 19:25:31 UTC

svn commit: r509287 - in /portals/jetspeed-2/trunk: components/cm/src/java/org/apache/jetspeed/cache/impl/ components/prefs/src/java/org/apache/jetspeed/prefs/impl/ components/registry/src/java/org/apache/jetspeed/om/preference/impl/ etc/db-ojb/ jetspe...

Author: taylor
Date: Mon Feb 19 10:25:30 2007
New Revision: 509287

URL: http://svn.apache.org/viewvc?view=rev&rev=509287
Log:
https://issues.apache.org/jira/browse/JS2-654

Added:
    portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedElementImpl.java
    portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java
    portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListener.java
    portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListenerFactory.java
    portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/NodeImplProxy.java
    portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheElement.java
    portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheObject.java
    portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedJetspeedCache.java
Modified:
    portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java
    portals/jetspeed-2/trunk/components/registry/src/java/org/apache/jetspeed/om/preference/impl/PrefsPreferenceSetImpl.java
    portals/jetspeed-2/trunk/etc/db-ojb/ehcache.xml
    portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/cache.xml

Added: portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedElementImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedElementImpl.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedElementImpl.java (added)
+++ portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedElementImpl.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache.impl;
+
+import java.io.Serializable;
+
+import net.sf.ehcache.Element;
+
+import org.apache.jetspeed.cache.DistributedCacheElement;
+import org.apache.jetspeed.cache.DistributedCacheObject;
+
+
+public class EhCacheDistributedElementImpl implements DistributedCacheElement
+{
+	Element element;
+	
+	public EhCacheDistributedElementImpl(Element element)
+    {
+        this.element = element;
+    }
+
+	public EhCacheDistributedElementImpl(Serializable key, DistributedCacheObject value)
+    {
+        this.element = new Element(key,value);
+        
+    }
+
+
+	public Object getKey()
+	    {
+	        return element.getObjectKey();
+	    }
+	    
+	    
+	    public DistributedCacheObject getContent()
+	    {
+	        return (DistributedCacheObject)element.getObjectValue();
+	    }
+
+	    public int getTimeToIdleSeconds()
+	    {
+	        return element.getTimeToIdle();
+	    }
+
+	    public int getTimeToLiveSeconds()
+	    {
+	        return element.getTimeToLive();
+	    }
+
+	    public boolean isEternal()
+	    {
+	        return element.isEternal();
+	    }
+
+	    public Element getImplElement()
+	    {
+	        return element;
+	    }
+
+	    public void setEternal(boolean eternal)
+	    {
+	        element.setEternal(eternal);
+	    }
+
+	    public void setTimeToIdleSeconds(int timeToIdle)
+	    {
+	        element.setTimeToIdle(timeToIdle);
+	    }
+
+	    public void setTimeToLiveSeconds(int timeToLive)
+	    {
+	        element.setTimeToLive(timeToLive);
+	    }
+	    
+	    public void notifyChange(int action)
+	    {
+	    	getContent().notifyChange(action);
+	    }
+
+	    
+}

Added: portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java (added)
+++ portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache.impl;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.CacheException;
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
+import net.sf.ehcache.event.CacheEventListener;
+import net.sf.ehcache.event.RegisteredEventListeners;
+
+import org.apache.jetspeed.cache.DistributedCacheElement;
+import org.apache.jetspeed.cache.DistributedCacheObject;
+import org.apache.jetspeed.cache.DistributedJetspeedCache;
+import org.apache.jetspeed.cache.JetspeedCacheEventListener;
+
+public class EhCacheDistributedImpl implements DistributedJetspeedCache, CacheEventListener
+{
+	private Cache ehcache;
+	private Map refList = Collections.synchronizedMap(new HashMap());
+    protected List listeners = new ArrayList();
+
+	public EhCacheDistributedImpl(Cache ehcache)
+	{
+		this.ehcache = ehcache;
+		RegisteredEventListeners listeners = ehcache
+				.getCacheEventNotificationService();
+		listeners.registerListener(this);
+
+	}
+
+	public DistributedCacheElement get(Serializable key)
+	{
+		Element element = ehcache.get(key);
+		if (element == null)
+			return null;
+		return new EhCacheDistributedElementImpl(element);
+	}
+
+	public void clear()
+	{
+		ehcache.removeAll();
+	}
+	public int getTimeToIdleSeconds()
+	{
+		return (int) ehcache.getTimeToIdleSeconds();
+	}
+
+	public int getTimeToLiveSeconds()
+	{
+		return (int) ehcache.getTimeToLiveSeconds();
+	}
+
+	public boolean isKeyInCache(Serializable key)
+	{
+		return ehcache.isKeyInCache(key);
+	}
+
+	public void put(DistributedCacheElement element)
+	{
+		EhCacheDistributedElementImpl impl = (EhCacheDistributedElementImpl) element;
+		ehcache.put(impl.getImplElement());
+		refList.put(impl.getKey(), impl);
+	}
+
+	public DistributedCacheElement createElement(Serializable key, DistributedCacheObject content)
+	{
+		return new EhCacheDistributedElementImpl(key, content);
+	}
+
+	public boolean remove(Serializable key)
+	{
+		Element element = ehcache.get(key);
+		refList.remove(key);
+		if (element == null)
+			return false;
+		return ehcache.remove(key);
+	}
+
+	public boolean removeQuiet(Object key)
+	{
+		Element element = ehcache.get(key);
+		refList.remove(key);
+		if (element == null)
+			return false;
+		return ehcache.removeQuiet(key);
+
+	}
+
+	public void evictContentForUser(String user)
+	{
+		return;
+	}
+
+	public String createCacheKey(String primary, String secondary)
+	{
+		return primary;
+	}
+
+	public Object clone() throws CloneNotSupportedException
+	{
+		return null;
+	}
+	
+   public void dispose()
+    {
+		if (refList != null)
+		{
+			Map temp = refList;
+			refList = null;
+			temp.clear();
+		}
+		else 
+			return;
+		if (this.ehcache != null)
+		{
+			ehcache = null;
+		}
+    }
+	
+    public void addEventListener(JetspeedCacheEventListener listener)
+    {
+        listeners.add(listener);
+    }
+    
+    public void removeEventListener(JetspeedCacheEventListener listener)
+    {
+        listeners.remove(listener);
+    }
+
+	
+	public void notifyElement(Element arg1, int action)
+	{
+		try
+		{
+			EhCacheDistributedElementImpl e = (EhCacheDistributedElementImpl) refList
+					.get(arg1.getKey());
+			if (e != null)
+			{
+				if (action < 0)
+					refList.remove(arg1.getKey());
+				e.notifyChange(action);
+			}
+		} catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	public void notifyElementEvicted(Ehcache cache, Element arg1)
+	{
+		try
+		{
+			notifyElement(arg1, DistributedCacheElement.ActionEvicted);
+		} catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	public void notifyElementExpired(Ehcache cache, Element arg1)
+	{
+		try
+		{
+			notifyElement(arg1, DistributedCacheElement.ActionExpired);
+		} catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	public void notifyElementPut(Ehcache cache, Element arg1)
+			throws CacheException
+	{
+		try
+		{
+			notifyElement(arg1, DistributedCacheElement.ActionAdded);
+		} catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	public void notifyElementRemoved(Ehcache cache, Element arg1)
+			throws CacheException
+	{
+		try
+		{
+			EhCacheDistributedElementImpl e = (EhCacheDistributedElementImpl) refList
+					.get(arg1.getKey());
+			if (e != null)
+			{
+				refList.remove(arg1.getKey());
+				e.notifyChange(DistributedCacheElement.ActionRemoved);
+			}
+		} catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+
+	public void notifyElementUpdated(Ehcache cache, Element arg1)
+			throws CacheException
+	{
+		try
+		{
+			notifyElement(arg1, DistributedCacheElement.ActionChanged);
+		} catch (Exception e)
+		{
+			e.printStackTrace();
+		}
+	}
+	public void notifyRemoveAll(Ehcache cache)
+	{
+//		if (ehcache == cache)
+//			System.out.println("notifyRemoveAll cache=" + cache.getName());
+//		else
+//			System.out.println("NOT MINE 	notifyRemoveAll cache="
+//					+ cache.getName());
+	}
+
+}

Added: portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListener.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListener.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListener.java (added)
+++ portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListener.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache.impl;
+
+import net.sf.ehcache.CacheException;
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
+import net.sf.ehcache.event.CacheEventListener;
+
+public class EhCacheEventListener implements CacheEventListener
+{
+
+	public Object clone() throws CloneNotSupportedException
+	{
+		return null;
+	}
+
+
+	public void dispose()
+	{
+		// TODO Auto-generated method stub
+
+	}
+
+	public void notifyElementEvicted(Ehcache cache, Element arg1)
+	{
+//		System.out.println("notifyElementEvicted cache=" + cache.getName() + " - element = " + arg1.getObjectKey().toString());
+
+	}
+
+	public void notifyElementExpired(Ehcache cache, Element arg1)
+	{
+//		System.out.println("notifyElementExpired cache=" + cache.getName() + " - element = " + arg1.getObjectKey().toString());
+
+	}
+
+	public void notifyElementPut(Ehcache cache, Element arg1)
+			throws CacheException
+	{
+//		System.out.println("notifyElementPut cache=" + cache.getName() + " - element = " + arg1.getObjectKey().toString());
+
+	}
+
+	public void notifyElementRemoved(Ehcache cache, Element arg1)
+			throws CacheException
+	{
+//		System.out.println("notifyElementRemoved cache=" + cache.getName() + " - element = " + arg1.getObjectKey().toString());
+
+	}
+
+	public void notifyElementUpdated(Ehcache cache, Element arg1)
+			throws CacheException
+	{
+//		System.out.println("notifyElementUpdated cache=" + cache.getName() + " - element = " + arg1.getObjectKey().toString());
+	}
+
+	public void notifyRemoveAll(Ehcache cache)
+	{
+//		System.out.println("notifyRemoveAll cache=" + cache.getName() );
+	}
+
+}

Added: portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListenerFactory.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListenerFactory.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListenerFactory.java (added)
+++ portals/jetspeed-2/trunk/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheEventListenerFactory.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache.impl;
+
+import java.util.Properties;
+
+import net.sf.ehcache.event.CacheEventListener;
+import net.sf.ehcache.event.CacheEventListenerFactory;
+
+public class EhCacheEventListenerFactory extends CacheEventListenerFactory
+{
+
+	public EhCacheEventListenerFactory()
+	{
+		// TODO Auto-generated constructor stub
+	}
+
+	public CacheEventListener createCacheEventListener(Properties arg0)
+	{
+		return new EhCacheEventListener();
+	}
+
+}

Added: portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/NodeImplProxy.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/NodeImplProxy.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/NodeImplProxy.java (added)
+++ portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/NodeImplProxy.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the  "License"); 
+ * you may not use this file except in compliance with the License. 
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" 
+ * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package org.apache.jetspeed.prefs.impl;
+
+
+import java.sql.Timestamp;
+import java.util.Collection;
+
+import org.apache.jetspeed.prefs.om.Node;
+
+public class NodeImplProxy implements  Node
+{
+    private Node node = null;
+    private boolean dirty = false;
+    private static PersistenceBrokerPreferencesProvider provider;
+
+
+    protected Object clone() throws CloneNotSupportedException
+	{
+		return super.clone();
+	}
+
+	public Timestamp getCreationDate()
+	{
+		return getNode().getCreationDate();
+		}
+
+	public String getFullPath()
+	{
+		return getNode().getFullPath();
+	}
+
+	public Timestamp getModifiedDate()
+	{
+		return getNode().getModifiedDate();
+	}
+
+	public long getNodeId()
+	{
+		return getNode().getNodeId();
+	}
+
+	public Collection getNodeKeys()
+	{
+		return getNode().getNodeKeys();
+	}
+
+	public String getNodeName()
+	{
+		return getNode().getNodeName();
+	}
+
+	public Collection getNodeProperties()
+	{
+		return getNode().getNodeProperties();	
+	}
+
+	public int getNodeType()
+	{
+		return getNode().getNodeType();
+	}
+
+	public Long getParentNodeId()
+	{
+		return getNode().getParentNodeId();
+	}
+
+	public void setCreationDate(Timestamp creationDate)
+	{
+		getNode().setCreationDate(creationDate);		
+	}
+
+	public void setFullPath(String fullPath)
+	{
+		getNode().setFullPath(fullPath);		
+	}
+
+	public void setModifiedDate(Timestamp modifiedDate)
+	{
+		getNode().setModifiedDate(modifiedDate);		
+	}
+
+	public void setNodeId(long nodeId)
+	{
+		getNode().setNodeId(nodeId);		
+	}
+
+	public void setNodeKeys(Collection nodeKeys)
+	{
+		getNode().setNodeKeys(nodeKeys);
+	}
+
+	public void setNodeName(String nodeName)
+	{
+		getNode().setNodeName(nodeName);
+		
+	}
+
+	public void setNodeProperties(Collection nodeProperties)
+	{
+		getNode().setNodeProperties(nodeProperties);		
+	}
+
+	public void setNodeType(int nodeType)
+	{
+		getNode().setNodeType(nodeType);		
+	}
+
+	public void setParentNodeId(Long parentNodeId)
+	{
+		getNode().setParentNodeId(parentNodeId);
+	}
+
+	public NodeImplProxy(Node node)
+    {
+        this.node = node;
+    }
+
+    public static void setProvider(PersistenceBrokerPreferencesProvider p)
+    {
+    	provider = p;
+    }
+    
+    public Node getNode() 
+    {
+        if (dirty)
+        	reset();
+        return node;
+    }
+    
+
+    protected void invalidate()
+    {
+        this.dirty = true;
+    }
+    
+    public void setNode(Node node)
+    {
+    	this.node = node;
+    }
+    protected void reset()
+    {
+    	try
+    	{
+    		provider.redoNode(this,node.getFullPath(), node.getNodeType());
+    		dirty = false;
+    	}
+    	catch (Exception e)
+    	{
+    		e.printStackTrace();
+    		node = null;
+    	}
+    }
+    
+
+}

Modified: portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java?view=diff&rev=509287&r1=509286&r2=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java (original)
+++ portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java Mon Feb 19 10:25:30 2007
@@ -15,11 +15,14 @@
  */
 package org.apache.jetspeed.prefs.impl;
 
-import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Iterator;
+import java.util.Vector;
 
-import org.apache.jetspeed.cache.CacheElement;
-import org.apache.jetspeed.cache.JetspeedCache;
+import org.apache.jetspeed.cache.DistributedCacheElement;
+import org.apache.jetspeed.cache.DistributedCacheObject;
+import org.apache.jetspeed.cache.DistributedJetspeedCache;
 import org.apache.jetspeed.components.dao.InitablePersistenceBrokerDaoSupport;
 import org.apache.jetspeed.prefs.FailedToCreateNodeException;
 import org.apache.jetspeed.prefs.NodeAlreadyExistsException;
@@ -43,72 +46,47 @@
         PreferencesProvider
 {
 
-    private static class NodeCache implements Serializable
+    private static class NodeCache implements DistributedCacheObject
     {
         /** The serial uid. */
         private static final long serialVersionUID = 1853381807991868844L;
+        NodeImplProxy node = null;
+        String key = null;;
+        Collection children = null;;
 
-        Node node;
-
-        String fullpath;
-
-        int type;
-
-        boolean childrenLoaded;
-
-        Collection children;
-
-        public NodeCache(Node node)
+        public NodeCache(NodeImplProxy node)
         {
-  // System.out.println(this.getClass().getName() + "-" + "NodeCache (node)" + node.getFullPath());
+            // System.out.println(this.getClass().getName() + "-" + "NodeCache (node)" + node.getFullPath());
             this.node = node;
-            this.fullpath = node.getFullPath();
-            this.type = node.getNodeType();
+            this.key = node.getFullPath() + "-" + node.getNodeType();
         }
 
         public NodeCache(String fullpath, int type)
         {
             // System.out.println(this.getClass().getName() + "-" + "NodeCache - fullpath=" + fullpath);
-                        this.fullpath = fullpath;
-            this.type = type;
+            this.key = fullpath + "-" + type;
         }
 
         public boolean isChildrenLoaded()
         {
             // System.out.println(this.getClass().getName() + "-" + "isChildrenLoaded");
-            return childrenLoaded;
+            return children != null;
         }
 
-        public void setChildrenLoaded(boolean childrenLoaded)
-        {
-            // System.out.println(this.getClass().getName() + "-" + "setChildrenLoaded");
-            this.childrenLoaded = childrenLoaded;
-        }
 
-        public String getFullpath()
-        {
-            // System.out.println(this.getClass().getName() + "-" + "getFullpath=" + fullpath);
-           return fullpath;
-        }
 
-        public Node getNode()
+        public NodeImplProxy getNode()
         {
             // System.out.println(this.getClass().getName() + "-" + "getNode=" + node.getFullPath());
             return node;
         }
 
-        public void setNode(Node node)
+        public void setNode(NodeImplProxy node)
         {
             // System.out.println(this.getClass().getName() + "-" + "setFullpath=" + node.getFullPath());
             this.node = node;
         }
 
-        public int getType()
-        {
-            // System.out.println(this.getClass().getName() + "-" + "getType=" );
-            return type;
-        }
-
         public Collection getChildren()
         {
             // System.out.println(this.getClass().getName() + "-" + "getCHildren=" );
@@ -118,7 +96,7 @@
         public void setChildren(Collection children)
         {
             // System.out.println(this.getClass().getName() + "-" + "setChildren=" );
-                       this.children = children;
+            this.children = children;
         }
 
         public boolean equals(Object obj)
@@ -126,23 +104,64 @@
             if (obj != null && obj instanceof NodeCache)
             {
                 NodeCache other = (NodeCache) obj;
-                return fullpath.equals(other.fullpath) && type == other.type;
+                return getKey().equals(other.getKey());
             }
             return false;
         }
 
         public int hashCode()
         {
-            return fullpath.hashCode() + type;
+            return getKey().hashCode();
         }
         
         public String getCacheKey()
         {
-            return fullpath +  "-" +  type;
+            return getKey();
         }
+
+		public String getKey()
+		{
+			return key;
+		}
+
+		
+	    public void notifyChange(int action)
+	    {
+
+	    	switch (action)
+	    	{
+	    		case DistributedCacheElement.ActionAdded:
+					//System.out.println("CacheObject Added =" + this.getKey());
+	    			break;
+	    		case DistributedCacheElement.ActionChanged:
+					//System.out.println("CacheObject Changed =" + this.getKey());
+					if (this.node != null)
+						this.node.invalidate();
+	    			break;
+	    		case DistributedCacheElement.ActionRemoved:
+					//System.out.println("CacheObject Removed =" + this.getKey());
+					if (this.node != null)
+						this.node.invalidate();
+	    			break;
+	    		case DistributedCacheElement.ActionEvicted:
+					//System.out.println("CacheObject Evicted =" + this.getKey());
+					if (this.node != null)
+						this.node.invalidate();
+	    			break;
+	    		case DistributedCacheElement.ActionExpired:
+					//System.out.println("CacheObject Expired =" + this.getKey());
+					if (this.node != null)
+						this.node.invalidate();
+	    			break;
+	    		default:
+					//System.out.println("CacheObject - UNKOWN OPRERATION =" + this.getKey());
+	    			return;
+	    	}
+	    	return;
+		}
     }
 
-    private JetspeedCache preferenceCache;
+    private DistributedJetspeedCache preferenceCache;
     
     
     /**
@@ -160,6 +179,7 @@
             throws ClassNotFoundException
     {
         super(repositoryPath);
+        NodeImplProxy.setProvider(this);
     }
 
     /**
@@ -173,16 +193,16 @@
      *             if the <code>prefsFactoryImpl</code> argument does not reperesent a Class that exists in the
      *             current classPath.
      */
-    public PersistenceBrokerPreferencesProvider(String repositoryPath, JetspeedCache preferenceCache)
+    public PersistenceBrokerPreferencesProvider(String repositoryPath, DistributedJetspeedCache preferenceCache)
             throws ClassNotFoundException
     {
-        super(repositoryPath);
+        this(repositoryPath);
         this.preferenceCache = preferenceCache;
     }
 
     protected void addToCache(NodeCache content)
     {
-        CacheElement cachedElement = preferenceCache.createElement(content.getCacheKey(), content);
+        DistributedCacheElement cachedElement = preferenceCache.createElement(content.getCacheKey(), content);
         cachedElement.setTimeToIdleSeconds(preferenceCache.getTimeToIdleSeconds());
         cachedElement.setTimeToLiveSeconds(preferenceCache.getTimeToLiveSeconds());
         preferenceCache.put(cachedElement);        
@@ -190,18 +210,15 @@
   
     private NodeCache getNode(String cacheKey)
     {
-        CacheElement cachedElement = preferenceCache.get(cacheKey);
+        DistributedCacheElement cachedElement = preferenceCache.get(cacheKey);
         if (cachedElement != null)
          return (NodeCache)cachedElement.getContent();  
         return null;
     }
+
     
-    /**
-     * @see org.apache.jetspeed.prefs.PreferencesProvider#getNode(java.lang.String, int)
-     */
     public Node getNode(String fullPath, int nodeType) throws NodeDoesNotExistException
     {
-        
         NodeCache key = new NodeCache(fullPath, nodeType);
         NodeCache hit = getNode(key.getCacheKey());
         if (hit != null)
@@ -217,8 +234,34 @@
         Node nodeObj = (Node) getPersistenceBrokerTemplate().getObjectByQuery(query);
         if (null != nodeObj)
         {
-            addToCache(new NodeCache(nodeObj));
-            return nodeObj;
+        	NodeImplProxy proxy = new NodeImplProxy(nodeObj);
+            addToCache(new NodeCache(proxy));
+            return proxy;
+           
+        }
+        else
+        {
+            throw new NodeDoesNotExistException("No node of type " + nodeType + "found at path: " + fullPath);
+        }
+    }
+    /**
+     * @see org.apache.jetspeed.prefs.PreferencesProvider#getNode(java.lang.String, int)
+     */
+    public void redoNode(NodeImplProxy proxy, String fullPath, int nodeType) throws NodeDoesNotExistException
+    {
+        
+        Criteria c = new Criteria();
+        c.addEqualTo("fullPath", fullPath);
+        c.addEqualTo("nodeType", new Integer(nodeType));
+        Query query = QueryFactory.newQuery(NodeImpl.class, c);
+
+        Node nodeObj = (Node) getPersistenceBrokerTemplate().getObjectByQuery(query);
+        if (null != nodeObj)
+        {
+        	proxy.setNode(nodeObj);
+        	NodeCache cn = new NodeCache(nodeObj.getFullPath(), nodeObj.getNodeType());
+        	cn.setNode(proxy);
+            addToCache(cn);
         }
         else
         {
@@ -231,12 +274,22 @@
      */
     public boolean nodeExists(String fullPath, int nodeType)
     {
-        try
+        NodeCache key = new NodeCache(fullPath, nodeType);
+        if (preferenceCache.isKeyInCache(key))
+        	return true;
+        Criteria c = new Criteria();
+        c.addEqualTo("fullPath", fullPath);
+        c.addEqualTo("nodeType", new Integer(nodeType));
+        Query query = QueryFactory.newQuery(NodeImpl.class, c);
+
+        Node nodeObj = (Node) getPersistenceBrokerTemplate().getObjectByQuery(query);
+        if (null != nodeObj)
         {
-            getNode(fullPath, nodeType);
+        	NodeImplProxy proxy = new NodeImplProxy(nodeObj);
+            addToCache(new NodeCache(proxy));
             return true;
         }
-        catch (NodeDoesNotExistException e)
+        else
         {
             return false;
         }
@@ -265,8 +318,9 @@
             try
             {
                 getPersistenceBrokerTemplate().store(nodeObj);
-                addToCache(new NodeCache(nodeObj));
-                return nodeObj;
+            	NodeImplProxy proxy = new NodeImplProxy(nodeObj);
+                addToCache(new NodeCache(proxy));
+                return proxy;
             }
             catch (Exception e)
             {
@@ -282,38 +336,97 @@
      */
     public Collection getChildren(Node parentNode)
     {
-        NodeCache key = new NodeCache(parentNode);
+        NodeCache key = new NodeCache(parentNode.getFullPath(), parentNode.getNodeType());
+
         NodeCache hit = getNode(key.getCacheKey());
         if (hit == null)
         {
-            
-            key.setNode(parentNode);
-            addToCache(key);
-            hit = key;
+        	NodeImplProxy proxy = new NodeImplProxy(parentNode);
+            hit = new NodeCache(proxy);
+            addToCache(hit);
         }
         if (hit.isChildrenLoaded())
         {
-            return hit.getChildren();
+            return resolveChildren(hit.getChildren());
         }
 
         Criteria c = new Criteria();
         c.addEqualTo("parentNodeId", new Long(parentNode.getNodeId()));
         Query query = QueryFactory.newQuery(NodeImpl.class, c);
         Collection children = getPersistenceBrokerTemplate().getCollectionByQuery(query);
-        hit.setChildren(children);
+        hit.setChildren(cacheChildren(children));
         // null or not
-        hit.setChildrenLoaded(true);
         return children;
     }
 
+    
+    private Collection resolveChildren(Collection children)
+    {
+    	if (children == null)
+    		return null;
+    	try
+    	{
+	    	Iterator it = children.iterator();
+	    	Vector v = new Vector();
+	    	while (it.hasNext())
+	    	{
+	    		String s = (String) it.next();
+	    		NodeCache hit =getNode(s);
+	    		if (hit != null)
+	    			v.add(hit.getNode());
+	    	}
+	    	return v;
+    	}
+    	catch (Exception e)
+    	{
+    		e.printStackTrace();
+    		return null;
+    	}
+    }
+
+    
+    private Collection cacheChildren(Collection children)
+    {
+    	Iterator it = children.iterator();
+    	Vector v = new Vector();
+    	while (it.hasNext())
+    	{
+    		   Node key = (Node)it.next();	
+    	       NodeCache nodeKey = new NodeCache(key.getFullPath(),key.getNodeType());
+    	       NodeCache hit = getNode(nodeKey.getCacheKey());
+   	           if (hit == null)
+   	           {
+   	    		   NodeImplProxy proxy = new NodeImplProxy(key);
+   	    		   nodeKey.setNode(proxy);
+   	    	       addToCache(nodeKey);
+   	    	       hit= nodeKey;
+   	           }
+    	        v.add(hit.getCacheKey());
+    	}
+    	return v;
+    }
+
     /**
      * @see org.apache.jetspeed.prefs.PreferencesProvider#storeNode(org.apache.jetspeed.prefs.om.Node)
      */
     public void storeNode(Node node)
     {
-        NodeCache key = new NodeCache(node);
+    	NodeImplProxy hit = null;
+    	if (node instanceof NodeImplProxy)
+    	{
+    		hit = (NodeImplProxy)node;
+    	}
+    	else
+    	{
+    		//System.out.println("WARNING!!!!STORE NODE!!!!!!!!!!!! -  Illegal Node element passed");
+    		hit = new NodeImplProxy(node);
+    	}
+    	
+        NodeCache key = new NodeCache(hit);
+        getPersistenceBrokerTemplate().store(hit.getNode()); // avoid racing condition with the db and with cluster notification
+        											// do the db first
         preferenceCache.remove(key.getCacheKey()); // not sure we should actually do that, could also just update the node
-        getPersistenceBrokerTemplate().store(node);
+        addToCache(key);
     }
 
     /**
@@ -321,18 +434,45 @@
      */
     public void removeNode(Node parentNode, Node node)
     {
-        NodeCache key = new NodeCache(node);
+    	NodeImplProxy hit = null;
+    	NodeImplProxy parentHit = null;
+
+    	if (node instanceof NodeImplProxy)
+    	{
+    		getPersistenceBrokerTemplate().delete(((NodeImplProxy)node).getNode());  //avoid race conditions - do this first    
+    	}
+    	else
+    		getPersistenceBrokerTemplate().delete(node);  //avoid race conditions - do this first    
+    		
+    	if (node instanceof NodeImplProxy)
+    	{
+    		hit = (NodeImplProxy)node;
+    	}
+    	else
+    	{
+    		//System.out.println("WARNING!!!!REMOVE NODE!!!!!!!!!!!! -  Illegal Node element passed");
+    		hit = new NodeImplProxy(node);
+    	}
+        NodeCache key = new NodeCache(hit);
         preferenceCache.remove(key.getCacheKey());
         if ( parentNode != null )
         {
-            key = new NodeCache(parentNode);
-            NodeCache hit = getNode(key.getCacheKey());
-            if ( hit != null && hit.isChildrenLoaded() )
+        	if (parentNode instanceof NodeImplProxy)
+        	{
+        		parentHit = (NodeImplProxy)parentNode;
+        	}
+        	else
+        	{
+        		//System.out.println("WARNING!!!!REMOVE NODE!!!!!!!!!!!! -  Illegal Node element passed");
+        		parentHit = new NodeImplProxy(parentNode);
+        	}
+        	NodeCache parentKey = new NodeCache(parentHit);
+        	parentKey = getNode(parentKey.getCacheKey());
+            if ( parentKey != null && parentKey.isChildrenLoaded() )
             {
-                hit.getChildren().remove(node);
+            	parentKey.getChildren().remove(key.getCacheKey());
             }
         }
-        getPersistenceBrokerTemplate().delete(node);        
     }
     
     /**
@@ -355,6 +495,24 @@
         }
         Query query = QueryFactory.newQuery(NodeImpl.class, c);
         Collection children = getPersistenceBrokerTemplate().getCollectionByQuery(query);
-        return children;       
+        Collection proxied = new ArrayList();
+        Iterator iter = children.iterator();
+        while (iter.hasNext())
+        {
+            NodeImpl node = (NodeImpl)iter.next();              
+            NodeCache key = new NodeCache(node.getFullPath(), node.getNodeType());
+            NodeCache hit = getNode(key.getCacheKey());
+            if (hit == null)
+            {
+                NodeImplProxy proxy = new NodeImplProxy(node);
+                addToCache(new NodeCache(proxy));
+                proxied.add(proxy);
+            }            
+            else
+            {
+                proxied.add(hit.getNode());
+            }
+        }
+        return proxied;       
     }
 }

Modified: portals/jetspeed-2/trunk/components/registry/src/java/org/apache/jetspeed/om/preference/impl/PrefsPreferenceSetImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/registry/src/java/org/apache/jetspeed/om/preference/impl/PrefsPreferenceSetImpl.java?view=diff&rev=509287&r1=509286&r2=509287
==============================================================================
--- portals/jetspeed-2/trunk/components/registry/src/java/org/apache/jetspeed/om/preference/impl/PrefsPreferenceSetImpl.java (original)
+++ portals/jetspeed-2/trunk/components/registry/src/java/org/apache/jetspeed/om/preference/impl/PrefsPreferenceSetImpl.java Mon Feb 19 10:25:30 2007
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.Vector;
 import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
@@ -214,17 +215,13 @@
     {
         try
         {
-            if (prefsRootNode.nodeExists(key))
-            {
-                Preferences nodeToRemove = prefsRootNode.node(key);
-                PrefsPreference pref = new PrefsPreference(nodeToRemove, key);
-                nodeToRemove.removeNode();
-                return pref;
-            }
-            else
-            {
-                return null;
-            }
+        	Preferences nodeToRemove = prefsRootNode.node(key);
+        	
+            if (nodeToRemove == null)
+            	return null;
+            PrefsPreference pref = new PrefsPreference(nodeToRemove, key);
+            nodeToRemove.removeNode();
+            return pref;
         }
         catch (BackingStoreException e)
         {
@@ -305,7 +302,7 @@
 
     protected class PortletPrefsIterator implements Iterator
     {
-        int beginSize;
+        int beginSize = 0;
         int pointer;
         String[] childrenNames;
         protected PrefsPreference currentPref;
@@ -315,25 +312,35 @@
             super();
             try
             {
-                beginSize = size();
                 childrenNames = prefsRootNode.childrenNames();
+                if (childrenNames != null)
+                	beginSize =  childrenNames.length;
+                
                 if(defaults != null)
                 {
+                    Vector v = new Vector();
+
                     Iterator itr = defaults.getNames().iterator();
                     while( itr.hasNext())
                     {
                         String name = (String) itr.next();
                         if(!arrayContains(childrenNames, name))
                         {
-                            String[] tempArray = new String[childrenNames.length+1];
-                            System.arraycopy(childrenNames, 0, tempArray, 0, childrenNames.length);
-                            tempArray[(tempArray.length-1)] = name;
-                            childrenNames = tempArray;
-                        }                       
+                        	v.add(name);
+                        }
+                    }
+                    int j = v.size();
+                    if (j>0)
+                    {
+                    	int i = childrenNames.length;
+                        String[] tempArray = new String[j+i];
+                        System.arraycopy(childrenNames, 0, tempArray, 0, i);
+                        for (int x = 0; x < j; x++)
+                            tempArray[i+x] = (String)v.get(x);
+                        childrenNames = tempArray;
+                        beginSize = i+j;
                     }
                 }
-               
-                
                 pointer = 0;
             }
             catch (IllegalStateException ise)
@@ -361,11 +368,14 @@
          */
         public boolean hasNext()
         {
-            if (beginSize != size())
-            {
-                throw new ConcurrentModificationException("Underlying PreferenceSet has changed.");
-            }
-            return pointer < beginSize;
+        	try
+        	{
+        		return pointer < beginSize;
+        	}
+        	catch (Exception e)
+        	{
+            	throw new ConcurrentModificationException("Underlying PreferenceSet has changed.");
+        	}
         }
 
         /**
@@ -378,14 +388,16 @@
          */
         public Object next()
         {
-            if (beginSize != size())
-            {
-                throw new ConcurrentModificationException("Underlying PreferenceSet has changed.");
-            }
-
-            currentPref = (PrefsPreference) get(childrenNames[pointer]);
-            pointer++;
-            return currentPref;
+			try
+			{
+	            currentPref = (PrefsPreference) get(childrenNames[pointer]);
+	            pointer++;
+	            return currentPref;
+	    	}
+	    	catch (Exception e)
+	    	{
+	        	throw new ConcurrentModificationException("Underlying PreferenceSet has changed.");
+	    	}
         }
 
         /**
@@ -404,7 +416,7 @@
             }
 
             PrefsPreferenceSetImpl.this.remove(currentPref);
-            beginSize = size();
+            beginSize--;
 
         }
     }

Modified: portals/jetspeed-2/trunk/etc/db-ojb/ehcache.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/etc/db-ojb/ehcache.xml?view=diff&rev=509287&r1=509286&r2=509287
==============================================================================
--- portals/jetspeed-2/trunk/etc/db-ojb/ehcache.xml (original)
+++ portals/jetspeed-2/trunk/etc/db-ojb/ehcache.xml Mon Feb 19 10:25:30 2007
@@ -329,15 +329,21 @@
            memoryStoreEvictionPolicy="LFU"
             />
 
-   <cache name="preferencesCache"
+    <cache name="preferencesCache"
            maxElementsInMemory="10000"
            maxElementsOnDisk="1000"
            eternal="false"
            overflowToDisk="false"
            timeToIdleSeconds="28800"
            timeToLiveSeconds="28800"
-           memoryStoreEvictionPolicy="LFU"
-            />
+           memoryStoreEvictionPolicy="LFU">
+        <cacheEventListenerFactory
+                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
+                properties="replicateAsynchronously=false, replicatePuts=false,
+                            replicateUpdates=true, replicateUpdatesViaCopy=false,
+                            replicateRemovals=true"/>
+   </cache>
+
 
    <cache name="portletApplicationOidCache"
            maxElementsInMemory="500"

Added: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheElement.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheElement.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheElement.java (added)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheElement.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache;
+
+
+
+/**
+ * <p>
+ *  Provides interface to cached elements
+ *  Abstraction around atual cache implementation
+ * </p>
+ * 
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public interface DistributedCacheElement
+{
+	public static int ActionAdded  = 1;
+	public static int ActionChanged = 2;
+	public static int ActionRemoved = -1;
+	public static int ActionEvicted = -2;
+	public static int ActionExpired = -3;
+	
+    /**
+     * 
+     * @return the idle time in seconds for this cache element
+     */
+    int getTimeToIdleSeconds();
+    
+    /**
+     * 
+     * @return the idle time in seconds for this cache element
+     */
+    int getTimeToLiveSeconds();    
+    
+    void setTimeToLiveSeconds(int timeToLive);
+    
+    void setTimeToIdleSeconds(int timeToIdle);
+    
+    DistributedCacheObject getContent();
+    
+    Object getKey();
+    
+    boolean isEternal();
+    
+    void setEternal(boolean eternal);
+    
+    void notifyChange(int action);
+    
+}
\ No newline at end of file

Added: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheObject.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheObject.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheObject.java (added)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedCacheObject.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *  Provides interface to the object referenced in the cached Element
+ *  Abstraction around atual cache implementation
+ * </p>
+ * 
+ * @author 
+ * @version $Id: $
+ */
+public interface DistributedCacheObject extends Serializable
+{
+    public void notifyChange(int action);
+
+}

Added: portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedJetspeedCache.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedJetspeedCache.java?view=auto&rev=509287
==============================================================================
--- portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedJetspeedCache.java (added)
+++ portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/cache/DistributedJetspeedCache.java Mon Feb 19 10:25:30 2007
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.cache;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *  Provides interface to Jetspeed for cache related activities
+ *  Abstraction around actual cache implementation
+ * </p>
+ * 
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public interface DistributedJetspeedCache
+{
+    /**
+     * Retrieve an object from the cache
+     * 
+     * @param key The key used to find the object
+     * @return the found object or null
+     */
+    DistributedCacheElement get(Serializable key);
+    
+    /**
+     * clear all content in the cache
+     *
+     */
+    void clear();
+    
+    /**
+     * Put an object into the cache, adding it, or replacing if exists
+     * @param object
+     */
+    void put(DistributedCacheElement object);
+    
+    /**
+     * Create a cached element 
+     * 
+     * @param key
+     * @param content
+     * @return
+     */
+    DistributedCacheElement createElement(Serializable key, DistributedCacheObject content);
+    
+    boolean isKeyInCache(Serializable key);
+    
+    /**
+     * Remove an object from the cache
+     * @param key
+     * @return true if the object was removed, false otherwise
+     */
+    boolean remove(Serializable key);
+    
+    /**
+     * 
+     * @return the default idle time in seconds for this cache
+     */
+    int getTimeToIdleSeconds();
+    
+    /**
+     * 
+     * @return the default idle time in seconds for this cache
+     */
+    int getTimeToLiveSeconds();
+
+    /**
+     * Evict all cached content for the given user
+     * 
+     * @param user
+     */
+    void evictContentForUser(String user);
+    
+    /**
+     * Create a cache key from a primary segment and secondary segment
+     * 
+     * @param primary
+     * @param secondary
+     * @return
+     */
+    String createCacheKey(String primary, String secondary);
+    
+    /**
+     * Add a cache listener for supported cache events
+     * 
+     * @param listener
+     */         
+    void addEventListener(JetspeedCacheEventListener listener);
+    
+    void removeEventListener(JetspeedCacheEventListener listener);
+}
\ No newline at end of file

Modified: portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/cache.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/cache.xml?view=diff&rev=509287&r1=509286&r2=509287
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/cache.xml (original)
+++ portals/jetspeed-2/trunk/src/webapp/WEB-INF/assembly/cache.xml Mon Feb 19 10:25:30 2007
@@ -45,7 +45,7 @@
         <property name="cacheName" value="preferencesCache"/>
 </bean>
 
-<bean id="preferencesCache" class="org.apache.jetspeed.cache.impl.EhCacheImpl">
+<bean id="preferencesCache" class="org.apache.jetspeed.cache.impl.EhCacheDistributedImpl">
     <constructor-arg>
      	<ref bean="ehPreferencesCache"/>
     </constructor-arg>       



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