Author: weaver
Date: Thu Nov  8 07:44:51 2007
New Revision: 593209

URL: http://svn.apache.org/viewvc?rev=593209&view=rev
Log:
JS2-800.  Implementation of a PortletWindowCache for use within the 
PortletWindowAccessorImpl.

Added:
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletWindowCache.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/test/org/apache/jetspeed/cache/TestPortletWindowCache.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/HashMapWindowCache.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/cache/PortletWindowCache.java
Modified:
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhDecorationContentCacheImpl.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletContentCacheImpl.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/container/window/impl/PortletWindowAccessorImpl.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/AbstractPortalContainerTestCase.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/window/TestWindows.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/registry/src/java/org/apache/jetspeed/components/util/RegistrySupportedTestCase.java
    portals/jetspeed-2/branches/JETSPEED-2.1.3/etc/db-ojb/ehcache.xml
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/container/window/PortletWindowAccessor.java
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/cache.xml
    
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/jetspeed-spring.xml

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java
 Thu Nov  8 07:44:51 2007
@@ -41,7 +41,7 @@
        private Map refList = Collections.synchronizedMap(new HashMap());
 
 
-       public EhCacheDistributedImpl(Cache ehcache)
+       public EhCacheDistributedImpl(Ehcache ehcache)
        {
                super(ehcache);
                RegisteredEventListeners listeners = ehcache

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java
 Thu Nov  8 07:44:51 2007
@@ -20,7 +20,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import net.sf.ehcache.Cache;
+import net.sf.ehcache.Ehcache;
 import net.sf.ehcache.Element;
 
 import org.apache.jetspeed.cache.CacheElement;
@@ -31,11 +31,11 @@
 
 public class EhCacheImpl implements JetspeedCache
 {
-    protected Cache ehcache;
+    protected Ehcache ehcache;
     protected List localListeners = new ArrayList();
     protected List remoteListeners = new ArrayList();
     
-    public EhCacheImpl(Cache ehcache)
+    public EhCacheImpl(Ehcache ehcache)
     {
         this.ehcache = ehcache;
      }
@@ -73,8 +73,8 @@
     
     public CacheElement createElement(Object key, Object content)
     {
-       if (!((key instanceof Serializable) &&   (content instanceof 
Serializable)))
-               return null;
+       if (!((key instanceof Serializable) ||  !(content instanceof 
Serializable)))
+               throw new IllegalArgumentException("The cache key and the 
object to cache must be serializable."); //return null;
            return new EhCacheElementImpl((Serializable)key, 
(Serializable)content);
     }
 

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhDecorationContentCacheImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhDecorationContentCacheImpl.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhDecorationContentCacheImpl.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhDecorationContentCacheImpl.java
 Thu Nov  8 07:44:51 2007
@@ -24,6 +24,7 @@
 import java.util.StringTokenizer;
 
 import net.sf.ehcache.Cache;
+import net.sf.ehcache.Ehcache;
 import net.sf.ehcache.Element;
 
 import org.apache.jetspeed.cache.CacheElement;
@@ -33,10 +34,9 @@
 import org.apache.jetspeed.cache.JetspeedCache;
 import org.apache.jetspeed.cache.JetspeedCacheEventListener;
 import org.apache.jetspeed.cache.JetspeedContentCache;
-import org.apache.jetspeed.cache.impl.JetspeedContentCacheKey;
 import org.apache.jetspeed.decoration.Theme;
-import org.apache.jetspeed.request.RequestContext;
 import org.apache.jetspeed.om.page.ContentPage;
+import org.apache.jetspeed.request.RequestContext;
 
 /**
  * Wrapper around actual cache implementation
@@ -50,7 +50,7 @@
        JetspeedCache preferenceCache = null;
     ContentCacheKeyGenerator keyGenerator = null;    
 
-    public EhDecorationContentCacheImpl(Cache ehcache, JetspeedCache 
preferenceCache, ContentCacheKeyGenerator keyGenerator)
+    public EhDecorationContentCacheImpl(Ehcache ehcache, JetspeedCache 
preferenceCache, ContentCacheKeyGenerator keyGenerator)
     {
         this(ehcache);
         this.preferenceCache = preferenceCache;
@@ -58,14 +58,14 @@
         preferenceCache.addEventListener(this,false); //only listen to remote 
events
     }
     
-    public EhDecorationContentCacheImpl(Cache ehcache, JetspeedCache 
preferenceCache)
+    public EhDecorationContentCacheImpl(Ehcache ehcache, JetspeedCache 
preferenceCache)
     {
         this(ehcache);
         this.preferenceCache = preferenceCache;
         preferenceCache.addEventListener(this,false); //only listen to remote 
events
     }
         
-    public EhDecorationContentCacheImpl(Cache ehcache)
+    public EhDecorationContentCacheImpl(Ehcache ehcache)
     {
         super(ehcache);
     }

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletContentCacheImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletContentCacheImpl.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletContentCacheImpl.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletContentCacheImpl.java
 Thu Nov  8 07:44:51 2007
@@ -23,7 +23,7 @@
 import java.util.Map;
 import java.util.StringTokenizer;
 
-import net.sf.ehcache.Cache;
+import net.sf.ehcache.Ehcache;
 import net.sf.ehcache.Element;
 
 import org.apache.jetspeed.cache.CacheElement;
@@ -48,7 +48,7 @@
        JetspeedCache preferenceCache = null;
     ContentCacheKeyGenerator keyGenerator = null;    
 
-    public EhPortletContentCacheImpl(Cache ehcache, JetspeedCache 
preferenceCache, ContentCacheKeyGenerator keyGenerator)
+    public EhPortletContentCacheImpl(Ehcache ehcache, JetspeedCache 
preferenceCache, ContentCacheKeyGenerator keyGenerator)
     {
         this(ehcache);
         this.preferenceCache = preferenceCache;
@@ -56,19 +56,19 @@
         preferenceCache.addEventListener(this,false); //only listen to remote 
events
     }
     
-    public EhPortletContentCacheImpl(Cache ehcache, JetspeedCache 
preferenceCache)
+    public EhPortletContentCacheImpl(Ehcache ehcache, JetspeedCache 
preferenceCache)
     {
         this(ehcache);
         this.preferenceCache = preferenceCache;
         preferenceCache.addEventListener(this,false); //only listen to remote 
events
     }
         
-    public EhPortletContentCacheImpl(Cache ehcache)
+    public EhPortletContentCacheImpl(Ehcache ehcache)
     {
         super(ehcache);
     }
 
-    public EhPortletContentCacheImpl(Cache ehcache, ContentCacheKeyGenerator 
keyGenerator)
+    public EhPortletContentCacheImpl(Ehcache ehcache, ContentCacheKeyGenerator 
keyGenerator)
     {
         this(ehcache);
         this.keyGenerator = keyGenerator;

Added: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletWindowCache.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletWindowCache.java?rev=593209&view=auto
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletWindowCache.java
 (added)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/java/org/apache/jetspeed/cache/impl/EhPortletWindowCache.java
 Thu Nov  8 07:44:51 2007
@@ -0,0 +1,140 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.jetspeed.cache.impl;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import net.sf.ehcache.Ehcache;
+
+import org.apache.jetspeed.cache.CacheElement;
+import org.apache.jetspeed.cache.PortletWindowCache;
+import org.apache.pluto.om.entity.PortletEntity;
+import org.apache.pluto.om.window.PortletWindow;
+
+/**
+ * <p>
+ * EhPortletWindowCache
+ * </p>
+ * <p>
+ *  Implementation of [EMAIL PROTECTED] PortletWindowCache} that is backed 
+ *  <a href="http://ehcache.sourceforge.net/";>Ehcache</a>.
+ * </p>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
+ *
+ */
+public class EhPortletWindowCache extends EhCacheImpl implements 
PortletWindowCache {
+
+        /** Allows us to track [EMAIL PROTECTED] PortletWindow}s in cache by 
[EMAIL PROTECTED] PortletEntity#getId()}*/
+    private Map portletEntityIdToEntityid;
+    
+    
+       public EhPortletWindowCache(Ehcache ehcache) 
+       {
+               super(ehcache);
+               portletEntityIdToEntityid = new HashMap();
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.jetspeed.cache.impl.PortletWindowCache#getPortletWindow(java.lang.String)
+        */
+       public PortletWindow getPortletWindow(String windowId)
+       {
+           assert windowId != null;
+               CacheElement cacheElement = get(windowId);
+               if(cacheElement != null)
+               {
+                  return (PortletWindow) cacheElement.getContent();
+               }
+               else
+               {
+                       return null;
+               }
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.jetspeed.cache.impl.PortletWindowCache#getPortletWindowByEntityId(java.lang.String)
+        */
+       public PortletWindow getPortletWindowByEntityId(String portletEntityId)
+       {
+           assert portletEntityId != null;
+               if(portletEntityIdToEntityid.containsKey(portletEntityId))
+               {
+                       return (PortletWindow) getPortletWindow((String) 
portletEntityIdToEntityid.get(portletEntityId));
+               }
+               else
+               {
+                       return null;
+               }
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.jetspeed.cache.impl.PortletWindowCache#putPortletWindow(org.apache.pluto.om.window.PortletWindow)
+        */
+       public void putPortletWindow(PortletWindow window)
+       {
+           assert window != null;
+               String windowId = window.getId().toString();
+               
portletEntityIdToEntityid.put(window.getPortletEntity().getId().toString(), 
windowId);
+               put(createElement(windowId, window));
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.jetspeed.cache.impl.PortletWindowCache#removePortletWindow(java.lang.String)
+        */
+       public void removePortletWindow(String portletWindowId)
+       {
+           assert portletWindowId != null;
+               PortletWindow window = getPortletWindow(portletWindowId);
+               if(window != null)
+               {                       
+                       
portletEntityIdToEntityid.remove(window.getPortletEntity().getId().toString());
+                       removeQuiet(portletWindowId);
+               }               
+       }
+       
+       public void removePortletWindowByPortletEntityId(String portletEntityId)
+       {
+           assert portletEntityId != null;
+               PortletWindow portletWindow = 
getPortletWindowByEntityId(portletEntityId);
+               if(portletWindow != null)
+               {
+                   portletEntityIdToEntityid.remove(portletEntityId);
+            removeQuiet(portletWindow.getId().toString());
+               }
+       }
+       
+       public Set getAllPortletWindows()
+       {               
+               Iterator keys = ehcache.getKeys().iterator();
+               Set windows = new HashSet();
+               while(keys.hasNext())
+               {
+                       String key = (String) keys.next();
+                       PortletWindow window = getPortletWindow(key);
+                       if(window != null)
+                       {
+                               windows.add(window);
+                       }                       
+               }
+               return windows;
+       }
+
+}

Added: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/test/org/apache/jetspeed/cache/TestPortletWindowCache.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/test/org/apache/jetspeed/cache/TestPortletWindowCache.java?rev=593209&view=auto
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/test/org/apache/jetspeed/cache/TestPortletWindowCache.java
 (added)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/cm/src/test/org/apache/jetspeed/cache/TestPortletWindowCache.java
 Thu Nov  8 07:44:51 2007
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations 
under
+ * the License.
+ */
+package org.apache.jetspeed.cache;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
+
+import org.apache.jetspeed.cache.impl.EhCacheImpl;
+import org.apache.jetspeed.cache.impl.EhPortletWindowCache;
+import org.apache.pluto.om.common.ObjectID;
+import org.apache.pluto.om.entity.PortletEntity;
+import org.apache.pluto.om.window.PortletWindow;
+import org.jmock.Mock;
+import org.jmock.cglib.MockObjectTestCase;
+import org.jmock.core.stub.VoidStub;
+
+
+
+/**
+ * 
+ * Tests for [EMAIL PROTECTED] EhPortletWindowCache}.
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
+ *
+ */
+public class TestPortletWindowCache extends MockObjectTestCase
+{
+    private static final String WINDOW_ID = "window1";
+    private static final String ENTITY_ID = "entity1";
+    
+    
+    private Mock cacheMock;
+    private Mock windowMock;
+    private Mock entityMock;
+    private Mock oidMock;
+    private Mock entityOidMock;
+    
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        cacheMock = mock(Ehcache.class);
+        windowMock = mock(SerializablePortletWindow.class);
+        entityMock = mock(PortletEntity.class);
+        oidMock = mock(ObjectID.class);
+        entityOidMock = (Mock) mock(ObjectID.class);
+    }    
+
+    public void testSimplePutAndGet()
+    {
+
+        PortletWindow window = (PortletWindow) windowMock.proxy();
+        Element element = new Element(WINDOW_ID, window);
+        ObjectID oid = (ObjectID) oidMock.proxy();
+        ObjectID entityOid = (ObjectID) entityOidMock.proxy();
+        
entityOidMock.expects(atLeastOnce()).method("toString").will(returnValue(ENTITY_ID));
+        
oidMock.expects(atLeastOnce()).method("toString").will(returnValue(WINDOW_ID));
+        
windowMock.expects(once()).method("getId").withNoArguments().will(returnValue(oid));
+        
windowMock.expects(once()).method("getPortletEntity").withNoArguments().will(returnValue(entityMock.proxy()));
+        
entityMock.expects(once()).method("getId").withNoArguments().will(returnValue(entityOid));
+        cacheMock.expects(once()).method("put").with(eq(element));
+        
cacheMock.expects(atLeastOnce()).method("get").with(eq(WINDOW_ID)).will(returnValue(element));
+        
+        
+        Ehcache cache = (Ehcache) cacheMock.proxy();        
+        PortletWindowCache windowCache = new EhPortletWindowCache(cache);      
+        windowCache.putPortletWindow(window);
+        
+        assertNotNull(windowCache.getPortletWindow(WINDOW_ID));
+        assertEquals(windowCache.getPortletWindow(WINDOW_ID), window);
+        
+        verify();
+    }
+    
+    public void testGetByPortletEntity()
+    {
+
+        SerializablePortletWindow window = (SerializablePortletWindow) 
windowMock.proxy();
+        Element element = new Element(WINDOW_ID, window);
+        
+        ObjectID oid = (ObjectID) oidMock.proxy();
+        
oidMock.expects(atLeastOnce()).method("toString").will(returnValue(WINDOW_ID));
+        ObjectID entityOid = (ObjectID) entityOidMock.proxy();
+        
entityOidMock.expects(atLeastOnce()).method("toString").will(returnValue(ENTITY_ID));
+        cacheMock.expects(once()).method("put").with(eq(element));
+        
cacheMock.expects(once()).method("get").with(eq(WINDOW_ID)).will(returnValue(element));
+        
windowMock.expects(once()).method("getId").withNoArguments().will(returnValue(oid));
+        
windowMock.expects(once()).method("getPortletEntity").withNoArguments().will(returnValue(entityMock.proxy()));
+        
entityMock.expects(once()).method("getId").withNoArguments().will(returnValue(entityOid));
+        
+        Ehcache cache = (Ehcache) cacheMock.proxy();        
+        PortletWindowCache windowCache = new EhPortletWindowCache(cache);  
+        windowCache.putPortletWindow(window);
+        
+        PortletWindow fromCache = 
windowCache.getPortletWindowByEntityId(ENTITY_ID);
+        assertNotNull(fromCache);
+        
+        verify();        
+    }
+    
+    public void testRemove()
+    {
+        SerializablePortletWindow window = (SerializablePortletWindow) 
windowMock.proxy();
+        Element element = new Element(WINDOW_ID, window);
+        
+        ObjectID oid = (ObjectID) oidMock.proxy();
+        
oidMock.expects(atLeastOnce()).method("toString").will(returnValue(WINDOW_ID));
+        
+        ObjectID entityOid = (ObjectID)entityOidMock.proxy();
+        
entityOidMock.expects(atLeastOnce()).method("toString").will(returnValue(ENTITY_ID));
+        
+        cacheMock.expects(once()).method("put").with(eq(element));
+        
cacheMock.expects(exactly(2)).method("get").with(eq(WINDOW_ID)).will(returnValue(element));
+        
windowMock.expects(once()).method("getId").withNoArguments().will(returnValue(oid));
+        
windowMock.expects(exactly(2)).method("getPortletEntity").withNoArguments().will(returnValue(entityMock.proxy()));
+        
entityMock.expects(exactly(2)).method("getId").withNoArguments().will(returnValue(entityOid));
+        
+        
+        
cacheMock.expects(once()).method("removeQuiet").with(eq(WINDOW_ID)).will(returnValue(true));
+        
+        
+        Ehcache cache = (Ehcache) cacheMock.proxy();        
+        PortletWindowCache windowCache = new EhPortletWindowCache(cache);  
+        windowCache.putPortletWindow(window);
+        
+        windowCache.removePortletWindow(WINDOW_ID);
+        assertNull(windowCache.getPortletWindowByEntityId(ENTITY_ID));
+        
+        verify();        
+    }
+    
+    public void testRemoveByEntityId()
+    {
+        SerializablePortletWindow window = (SerializablePortletWindow) 
windowMock.proxy();
+        Element element = new Element(WINDOW_ID, window);
+        
+        ObjectID oid = (ObjectID) oidMock.proxy();
+        
oidMock.expects(atLeastOnce()).method("toString").will(returnValue(WINDOW_ID));
+        
+        ObjectID entityOid = (ObjectID) entityOidMock.proxy();
+        
entityOidMock.expects(atLeastOnce()).method("toString").will(returnValue(ENTITY_ID));
+        
+        cacheMock.expects(once()).method("put").with(eq(element));
+        
cacheMock.expects(exactly(3)).method("get").with(eq(WINDOW_ID)).will(onConsecutiveCalls(returnValue(element),
 returnValue(element), new VoidStub()));
+        
windowMock.expects(exactly(2)).method("getId").withNoArguments().will(returnValue(oid));
+        
windowMock.expects(once()).method("getPortletEntity").withNoArguments().will(returnValue(entityMock.proxy()));
+        
entityMock.expects(once()).method("getId").withNoArguments().will(returnValue(entityOid));
+        
+        
+        
cacheMock.expects(atLeastOnce()).method("removeQuiet").with(eq(WINDOW_ID)).will(returnValue(true));
+        
+        
+        Ehcache cache = (Ehcache) cacheMock.proxy();        
+        PortletWindowCache windowCache = new EhPortletWindowCache(cache);  
+        windowCache.putPortletWindow(window);
+        
+        windowCache.removePortletWindowByPortletEntityId(ENTITY_ID);
+        assertNull(windowCache.getPortletWindow(WINDOW_ID));
+        
+        verify();        
+    }
+    
+    public void testGetAllPortletWindows()
+    {        
+        PortletWindow window = (PortletWindow) windowMock.proxy();
+        PortletWindow window2 = (PortletWindow) 
mock(SerializablePortletWindow.class).proxy();
+        PortletWindow window3 = (PortletWindow) 
mock(SerializablePortletWindow.class).proxy();
+        
+        List keys = Arrays.asList(new String[] {WINDOW_ID, "window2", 
"window3"});
+        
+        
cacheMock.expects(once()).method("getKeys").withNoArguments().will(returnValue(keys));
        
+        
cacheMock.expects(once()).method("get").with(eq(WINDOW_ID)).will(returnValue(new
 Element(WINDOW_ID, window)));
+        
cacheMock.expects(once()).method("get").with(eq("window2")).will(returnValue(new
 Element("window2", window2)));
+        
cacheMock.expects(once()).method("get").with(eq("window3")).will(returnValue(new
 Element("window3", window3)));
+        
+        PortletWindowCache windowCache = new EhPortletWindowCache((Ehcache) 
cacheMock.proxy());
+        
+        Set allPortletWindows = windowCache.getAllPortletWindows();
+        assertNotNull(allPortletWindows);
+        assertEquals(3, allPortletWindows.size());
+    }
+    
+    public void testUnexpected()
+    {
+//        PortletWindowCache windowCache = new EhPortletWindowCache((Ehcache) 
cacheMock.proxy());
+//        cacheMock.proxy();
+//        windowCache.getPortletWindow(null);
+//        verify();
+    }
+    
+    /**
+     * We need this class to test the cache as the [EMAIL PROTECTED] 
EhCacheImpl} object only
+     * allows [EMAIL PROTECTED] Serializable} objects to be cached.
+     * 
+     * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
+     *
+     */
+    private interface SerializablePortletWindow extends PortletWindow, 
Serializable
+    {
+        
+    }
+    
+
+}

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/container/window/impl/PortletWindowAccessorImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/container/window/impl/PortletWindowAccessorImpl.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/container/window/impl/PortletWindowAccessorImpl.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/java/org/apache/jetspeed/container/window/impl/PortletWindowAccessorImpl.java
 Thu Nov  8 07:44:51 2007
@@ -16,15 +16,12 @@
  */
 package org.apache.jetspeed.container.window.impl;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.cache.PortletWindowCache;
 import 
org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent;
 import 
org.apache.jetspeed.components.portletentity.PortletEntityNotGeneratedException;
 import 
org.apache.jetspeed.components.portletentity.PortletEntityNotStoredException;
@@ -55,27 +52,33 @@
 {
     protected final static Log log = 
LogFactory.getLog(PortletWindowAccessorImpl.class);
    
-    private Map windows = Collections.synchronizedMap(new HashMap());    
+    //private Map windows = Collections.synchronizedMap(new HashMap());    
     private PortletEntityAccessComponent entityAccessor;
     private PortletFactory portletFactory;
     private boolean validateWindows = false;
+    private PortletWindowCache portletWindowCache;
+   
     
 
-    public PortletWindowAccessorImpl(PortletEntityAccessComponent 
entityAccessor, PortletFactory portletFactory, boolean validateWindows)
+    public PortletWindowAccessorImpl(PortletEntityAccessComponent 
entityAccessor, PortletFactory portletFactory, PortletWindowCache 
portletWindowCache, boolean validateWindows)
     {
         this.entityAccessor = entityAccessor;
         this.portletFactory = portletFactory;
         this.validateWindows = validateWindows;
+        this.portletWindowCache = portletWindowCache;
+
     }
 
     public PortletWindowAccessorImpl(PortletEntityAccessComponent 
entityAccessor, 
                                      PortletFactory portletFactory, 
-                                     PortletRegistry registry,
+                                     PortletRegistry registry, 
+                                     PortletWindowCache portletWindowCache,
                                      boolean validateWindows)
     {
         this.entityAccessor = entityAccessor;
         this.portletFactory = portletFactory;
         this.validateWindows = validateWindows;
+        this.portletWindowCache = portletWindowCache;
         registry.addRegistryListener(this);
     }
     
@@ -99,7 +102,8 @@
         window.setPortletEntity(entity);
         if ( isValidPortletEntity(entity))
         {
-            windows.put(windowId, window);
+            // windows.put(windowId, window);
+               portletWindowCache.putPortletWindow(window);
         }
         return window;        
     }
@@ -245,7 +249,7 @@
         
         if ( !temporaryWindow )
         {
-            windows.put(fragment.getId(), portletWindow);   
+            portletWindowCache.putPortletWindow(portletWindow);
         }
         
         return portletWindow;
@@ -254,32 +258,35 @@
 
     public void removeWindows(PortletEntity portletEntity)
     {
-        List tmpWindows = new ArrayList(windows.entrySet());
-        for(int i = 0; i < tmpWindows.size(); i++)
-        {
-            PortletWindow window = 
(PortletWindow)((Map.Entry)tmpWindows.get(i)).getValue();
-            if 
(portletEntity.getId().equals(window.getPortletEntity().getId()))
-            {
-                removeWindow(window);
-            }
-        }        
-        tmpWindows.clear();
+//        List tmpWindows = new ArrayList(windows.entrySet());
+//        for(int i = 0; i < tmpWindows.size(); i++)
+//        {
+//            PortletWindow window = 
(PortletWindow)((Map.Entry)tmpWindows.get(i)).getValue();
+//            if 
(portletEntity.getId().equals(window.getPortletEntity().getId()))
+//            {
+//                removeWindow(window);
+//            }
+//        }        
+//        tmpWindows.clear();
+//        
+        
portletWindowCache.removePortletWindowByPortletEntityId(portletEntity.getId().toString());
 
     }
     
     public void removeWindow(PortletWindow window)
     {
-        windows.remove(window.getId().toString());
+       // windows.remove(window.getId().toString());
+       portletWindowCache.removePortletWindow(window.getId().toString());
     }
     
     private PortletWindow getWindowFromCache(ContentFragment fragment)
     {
-        return (PortletWindow)windows.get(fragment.getId());
+        return portletWindowCache.getPortletWindow(fragment.getId());
     }
     
     private PortletWindow getWindowFromCache(String id)
     {
-        return (PortletWindow)windows.get(id);
+        return portletWindowCache.getPortletWindow(id);
     }
 
     private boolean checkPortletWindowEntity(PortletWindow window)
@@ -303,43 +310,76 @@
     
     public Set getPortletWindows()
     {
-        return this.windows.entrySet();
+        return portletWindowCache.getAllPortletWindows();
     }
 
     protected void removeForPortletDefinition(PortletDefinitionComposite def)
     {
-        List tmpWindows = new ArrayList(windows.entrySet());
-        for (int i = 0; i < tmpWindows.size(); i++)
+//        List tmpWindows = new ArrayList(windows.entrySet());
+//        for (int i = 0; i < tmpWindows.size(); i++)
+//        {
+//            PortletWindow window = 
(PortletWindow)((Map.Entry)tmpWindows.get(i)).getValue();
+//            PortletDefinitionComposite windowDef = 
(PortletDefinitionComposite)window.getPortletEntity().getPortletDefinition();   
         
+//            if(def != null && windowDef != null && def.getUniqueName() != 
null && def.getUniqueName().equals(windowDef.getUniqueName()))
+//            {
+//                removeWindow(window);
+//            }
+//        }        
+//        tmpWindows.clear(); 
+//        if (def != null)
+//            portletFactory.updatePortletConfig(def);
+        
+        
+        Iterator windows  = getPortletWindows().iterator();
+        while(windows.hasNext())
         {
-            PortletWindow window = 
(PortletWindow)((Map.Entry)tmpWindows.get(i)).getValue();
-            PortletDefinitionComposite windowDef = 
(PortletDefinitionComposite)window.getPortletEntity().getPortletDefinition();   
         
+               PortletWindow window = (PortletWindow) windows.next();
+               PortletDefinitionComposite windowDef = 
(PortletDefinitionComposite)window.getPortletEntity().getPortletDefinition();   
         
             if(def != null && windowDef != null && def.getUniqueName() != null 
&& def.getUniqueName().equals(windowDef.getUniqueName()))
             {
                 removeWindow(window);
             }
-        }        
-        tmpWindows.clear(); 
+        }
+        
         if (def != null)
             portletFactory.updatePortletConfig(def);
     }
 
     protected void removeForPortletApplication(MutablePortletApplication app)
     {
-        List tmpWindows = new ArrayList(windows.entrySet());
-        for (int i = 0; i < tmpWindows.size(); i++)
+//        List tmpWindows = new ArrayList(windows.entrySet());
+//        for (int i = 0; i < tmpWindows.size(); i++)
+//        {
+//            PortletWindow window = 
(PortletWindow)((Map.Entry)tmpWindows.get(i)).getValue();
+//            PortletDefinitionComposite pd =  
(PortletDefinitionComposite)window.getPortletEntity().getPortletDefinition();
+//            if (pd != null)
+//            {
+//                MutablePortletApplication windowApp = 
(MutablePortletApplication)pd.getPortletApplicationDefinition();            
+//                if (app.getName().equals(windowApp.getName()))
+//                {
+//                    removeWindow(window);
+//                }
+//            }
+//        }        
+//        tmpWindows.clear();   
+        
+        Iterator windows  = getPortletWindows().iterator();
+        while(windows.hasNext())
         {
-            PortletWindow window = 
(PortletWindow)((Map.Entry)tmpWindows.get(i)).getValue();
-            PortletDefinitionComposite pd =  
(PortletDefinitionComposite)window.getPortletEntity().getPortletDefinition();
-            if (pd != null)
-            {
-                MutablePortletApplication windowApp = 
(MutablePortletApplication)pd.getPortletApplicationDefinition();            
-                if (app.getName().equals(windowApp.getName()))
-                {
-                    removeWindow(window);
-                }
-            }
-        }        
-        tmpWindows.clear();        
+               PortletWindow window = (PortletWindow) windows.next();
+               PortletDefinitionComposite pd =  
(PortletDefinitionComposite)window.getPortletEntity().getPortletDefinition();   
         
+                if (pd != null)
+             {
+                 MutablePortletApplication windowApp = 
(MutablePortletApplication)pd.getPortletApplicationDefinition();            
+                 if (app.getName().equals(windowApp.getName()))
+                 {
+                     removeWindow(window);
+                 }
+             }
+        }
+        
+        
+        
     }
     
     public void applicationRemoved(MutablePortletApplication app)

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/AbstractPortalContainerTestCase.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/AbstractPortalContainerTestCase.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/AbstractPortalContainerTestCase.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/AbstractPortalContainerTestCase.java
 Thu Nov  8 07:44:51 2007
@@ -22,20 +22,26 @@
 import org.apache.pluto.PortletContainer;
 
 /**
- * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
- *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
+ * 
  */
 public class AbstractPortalContainerTestCase extends 
AbstractRequestContextTestCase
 {
     protected PortletWindowAccessor windowAccessor;
+
     protected PortletContainer portletContainer;
-    
-    /* (non-Javadoc)
+
+    /*
+     * (non-Javadoc)
+     * 
      * @see junit.framework.TestCase#setUp()
      */
     protected void setUp() throws Exception
     {
         super.setUp();
-        windowAccessor = new 
PortletWindowAccessorImpl(entityAccess,PortletFactoryMock.instance,true);
+        windowAccessor = new PortletWindowAccessorImpl(entityAccess,
+            PortletFactoryMock.instance,
+            new HashMapWindowCache(),
+            true);
     }
 }

Added: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/HashMapWindowCache.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/HashMapWindowCache.java?rev=593209&view=auto
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/HashMapWindowCache.java
 (added)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/HashMapWindowCache.java
 Thu Nov  8 07:44:51 2007
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations 
under
+ * the License.
+ */
+package org.apache.jetspeed;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import org.apache.jetspeed.cache.PortletWindowCache;
+import org.apache.pluto.om.window.PortletWindow;
+
+/**
+ * This implementation of [EMAIL PROTECTED] PortletWindowCache} is to be used 
ONLY for testing purposes.
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
+ *
+ */
+public class HashMapWindowCache implements PortletWindowCache
+{
+
+
+    private Map portletEntityToWindow = new HashMap();
+    private Map windows = new HashMap();
+    
+    public Set getAllPortletWindows()
+    {
+        Set windowSet = new HashSet();
+        
+        Iterator itr = windows.entrySet().iterator();
+        while(itr.hasNext())
+        {
+            Map.Entry entry = (Entry) itr.next();                              
  
+            windowSet.add((PortletWindow)entry.getValue());
+        }
+        
+        return windowSet;
+    }
+
+    public PortletWindow getPortletWindow(String windowId)
+    {
+        return (PortletWindow) windows.get(windowId);
+    }
+
+    public PortletWindow getPortletWindowByEntityId(String portletEntityId)
+    {
+        if(portletEntityToWindow.containsKey(portletEntityId))
+        {
+            return (PortletWindow) windows.get((String) 
portletEntityToWindow.get(portletEntityId));
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public void putPortletWindow(PortletWindow window)
+    {
+        windows.put(window.getId().toString(), window);
+        
portletEntityToWindow.put(window.getPortletEntity().getId().toString(), 
window.getId().toString());
+
+    }
+
+    public void removePortletWindow(String windowId)
+    {
+        PortletWindow window = (PortletWindow) windows.get(windowId);
+        if(window != null)
+        {
+            windows.remove(windowId);
+            
portletEntityToWindow.remove(window.getPortletEntity().getId().toString());
+        }
+
+    }
+
+    public void removePortletWindowByPortletEntityId(String portletEntityId)
+    {
+        PortletWindow window = getPortletWindowByEntityId(portletEntityId);
+        if(window != null)
+        {   
+            removePortletWindow(window.getId().toString());
+        }
+
+    }
+}
\ No newline at end of file

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/window/TestWindows.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/window/TestWindows.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/window/TestWindows.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/portal/src/test/org/apache/jetspeed/window/TestWindows.java
 Thu Nov  8 07:44:51 2007
@@ -25,6 +25,7 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
+import org.apache.jetspeed.HashMapWindowCache;
 import org.apache.jetspeed.PortletFactoryMock;
 import 
org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent;
 import org.apache.jetspeed.container.window.PortletWindowAccessor;
@@ -33,6 +34,7 @@
 import org.apache.jetspeed.om.page.ContentFragment;
 import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.ContentFragmentImpl;
+import org.apache.jetspeed.util.JetspeedObjectID;
 import org.apache.pluto.om.window.PortletWindow;
 import org.apache.pluto.om.window.PortletWindowList;
 import org.apache.pluto.om.window.PortletWindowListCtrl;
@@ -77,7 +79,7 @@
         fragMock = new Mock(Fragment.class);
         entityMock = new Mock(MutablePortletEntity.class);
         windowListMock = new Mock(CompositeWindowList.class);
-        windowAccess = new 
PortletWindowAccessorImpl((PortletEntityAccessComponent) 
entityAccessMock.proxy(), PortletFactoryMock.instance,true);
+        windowAccess = new 
PortletWindowAccessorImpl((PortletEntityAccessComponent) 
entityAccessMock.proxy(), PortletFactoryMock.instance, new 
HashMapWindowCache(),true);
     }
 
     public void testWindowAccess() throws Exception
@@ -92,6 +94,8 @@
                 .will(new ReturnStub("frag1"));
         entityMock.expects(new 
InvokeAtLeastOnceMatcher()).method("getPortletWindowList").withNoArguments().will(
                 new ReturnStub(windowList));
+        entityMock.expects(new 
InvokeAtLeastOnceMatcher()).method("getId").withNoArguments().will(
+            new ReturnStub(new JetspeedObjectID("entity1")));
 
         windowListMock.expects(new 
InvokeCountMatcher(4)).method("add").withAnyArguments().will(
                 new ListAppendStub(windows));

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/registry/src/java/org/apache/jetspeed/components/util/RegistrySupportedTestCase.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/components/registry/src/java/org/apache/jetspeed/components/util/RegistrySupportedTestCase.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/registry/src/java/org/apache/jetspeed/components/util/RegistrySupportedTestCase.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/components/registry/src/java/org/apache/jetspeed/components/util/RegistrySupportedTestCase.java
 Thu Nov  8 07:44:51 2007
@@ -56,7 +56,7 @@
         List confList = new ArrayList(Arrays.asList(confs));
         confList.add("jetspeed-base.xml");
         confList.add("page-manager.xml");
-        confList.add("registry.xml");
+        confList.add("registry.xml");               
         return (String[]) confList.toArray(new String[1]);
     }
 }

Modified: portals/jetspeed-2/branches/JETSPEED-2.1.3/etc/db-ojb/ehcache.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/etc/db-ojb/ehcache.xml?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- portals/jetspeed-2/branches/JETSPEED-2.1.3/etc/db-ojb/ehcache.xml (original)
+++ portals/jetspeed-2/branches/JETSPEED-2.1.3/etc/db-ojb/ehcache.xml Thu Nov  
8 07:44:51 2007
@@ -489,6 +489,15 @@
            timeToIdleSeconds="30"
            timeToLiveSeconds="30"
            memoryStoreEvictionPolicy="LFU"
-            />
+            />
+   
+     <cache name="portletWindowCache"
+           maxElementsInMemory="200"
+           maxElementsOnDisk="1000"
+           eternal="false"
+           overflowToDisk="false"
+           timeToIdleSeconds="28800"
+           timeToLiveSeconds="28800"
+           memoryStoreEvictionPolicy="LFU"/>
 
 </ehcache>

Added: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/cache/PortletWindowCache.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/cache/PortletWindowCache.java?rev=593209&view=auto
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/cache/PortletWindowCache.java
 (added)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/cache/PortletWindowCache.java
 Thu Nov  8 07:44:51 2007
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations 
under
+ * the License.
+ */
+package org.apache.jetspeed.cache;
+
+import java.util.List;
+import java.util.Set;
+
+import org.apache.pluto.om.entity.PortletEntity;
+import org.apache.pluto.om.window.PortletWindow;
+
+/**
+ * [EMAIL PROTECTED] org.apache.jetspeed.cache.impl.PortletWindowCache} is an 
abstraction of a caching mechanism for use
+ * within [EMAIL PROTECTED] 
org.apache.jetspeed.container.window.impl.PortletWindowAccessorImpl}.
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
+ * @see PortletWindowAccessorImpl
+ * @see EhPortletWindowCache
+ * 
+ */
+public interface PortletWindowCache
+{
+    /**
+     * Gets a [EMAIL PROTECTED] PortletWindow} from the cache.
+     * 
+     * @param windowId Id of the window to get from the cache.
+     * @return [EMAIL PROTECTED] PortletWindow} whose <code>id</code> to 
+     * [EMAIL PROTECTED] PortletWindow#getId()} or <code>null</code> if no 
window exists that matches
+     * <code>windowId</code>.
+     */
+    PortletWindow getPortletWindow(String windowId);
+    
+    /**
+     * Gets a [EMAIL PROTECTED] PortletWindow} from the cache whose [EMAIL 
PROTECTED] PortletEntity}'s ([EMAIL PROTECTED] 
PortletWindow#getPortletEntity()})
+     * equals <code>portletEntityId</code>.
+     * 
+     * @param portletEntityId id of [EMAIL PROTECTED] PortletEntity} whose 
window want want to retrieve from cache.
+     * @return [EMAIL PROTECTED] PortletWindow} whose [EMAIL PROTECTED] 
PortletEntity}'s id equals <code>portletEntityId</code>
+     * or <code>null</code> if no windows exists in the cache that match said 
criteria.
+     */
+    PortletWindow getPortletWindowByEntityId(String portletEntityId);
+    
+    /**
+     * Stores a [EMAIL PROTECTED] PortletWindow} in the cache using the [EMAIL 
PROTECTED] PortletWindow#getId()#toString()}
+     * as the key for the cache.
+     * 
+     * @param window [EMAIL PROTECTED] PortletWindow} to put into the cache.
+     */
+    void putPortletWindow(PortletWindow window);
+    
+    /**
+     * Removes a [EMAIL PROTECTED] PortletWindow} from cache using the 
<code>windowId</code>
+     * as the cache key.
+     * 
+     * @param windowId Id of the [EMAIL PROTECTED] PortletWindow} we want to 
remove from the cache.
+     */
+    void removePortletWindow(String windowId);
+
+    /**
+     * Removes a [EMAIL PROTECTED] PortletWindow} from the cache whose [EMAIL 
PROTECTED] PortletEntity}'s id 
+     * matches <code>portletEntityId</code>.
+     * 
+     * @param portletEntityId id of the [EMAIL PROTECTED] PortletEntity} whose 
parent [EMAIL PROTECTED] PortletWindow}
+     * is to be removed from the cache.
+     */
+    void removePortletWindowByPortletEntityId(String portletEntityId);
+    
+    /**
+     * 
+     * @return [EMAIL PROTECTED] List} of all the [EMAIL PROTECTED] 
PortletWindow}s in the cache.  If no cache
+     * entries exist an empty list is returned.  Never returns 
<code>null</code>.
+     */
+    Set getAllPortletWindows();
+
+}
\ No newline at end of file

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/container/window/PortletWindowAccessor.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/container/window/PortletWindowAccessor.java?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/container/window/PortletWindowAccessor.java
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/jetspeed-api/src/java/org/apache/jetspeed/container/window/PortletWindowAccessor.java
 Thu Nov  8 07:44:51 2007
@@ -107,9 +107,10 @@
     void removeWindow(PortletWindow window);
     
     /**
-     *  Get a list of all windows
+     *  Gets a [EMAIL PROTECTED] Set} of currently available [EMAIL PROTECTED] 
PortletWindow}s within
+     *  the current engine instance.
      *  
-     * @return
+     * @return [EMAIL PROTECTED] Set} of [EMAIL PROTECTED] PortletWindow}s, 
never returns <code>null</code>
      */
     Set getPortletWindows();
 }

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/cache.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/cache.xml?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/cache.xml
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/cache.xml
 Thu Nov  8 07:44:51 2007
@@ -196,6 +196,21 @@
                <constructor-arg index="0">
                        <ref bean="ehActiveAuthenticationCache" />
                </constructor-arg>
-       </bean>
+       </bean>
+       
+       <bean id="ehPortletWindowCache"
+               class="org.springframework.cache.ehcache.EhCacheFactoryBean">
+               <property name="cacheManager">
+                       <ref local="cacheManager" />
+               </property>
+               <property name="cacheName" value="portletWindowCache" />
+       </bean>
+       
+    <bean id="portletWindowCache"
+               class="org.apache.jetspeed.cache.impl.EhPortletWindowCache">
+               <constructor-arg index="0">
+                       <ref bean="ehPortletWindowCache" />
+               </constructor-arg>
+       </bean>
 
 </beans>

Modified: 
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/jetspeed-spring.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/jetspeed-spring.xml?rev=593209&r1=593208&r2=593209&view=diff
==============================================================================
--- 
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/jetspeed-spring.xml
 (original)
+++ 
portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/WEB-INF/assembly/jetspeed-spring.xml
 Thu Nov  8 07:44:51 2007
@@ -95,8 +95,11 @@
         <constructor-arg index='2'>
             <ref 
bean="org.apache.jetspeed.components.portletregistry.PortletRegistry" />
         </constructor-arg>        
+         <constructor-arg index='3'>
+            <ref bean="portletWindowCache" />
+        </constructor-arg>
         <!-- enable window validation -->
-        <constructor-arg type="boolean" index='3'>
+        <constructor-arg type="boolean" index='4'>
             <value>false</value>
         </constructor-arg>
     </bean>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to