cziegeler 2004/02/02 00:39:37
Modified: src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory
PortletInvokerFactoryImpl.java
LocalPortletInvokerImpl.java
Log:
Implement destroy() of local portlets
Revision Changes Path
1.3 +27 -2
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/PortletInvokerFactoryImpl.java
Index: PortletInvokerFactoryImpl.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/PortletInvokerFactoryImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PortletInvokerFactoryImpl.java 27 Jan 2004 09:56:37 -0000 1.2
+++ PortletInvokerFactoryImpl.java 2 Feb 2004 08:39:37 -0000 1.3
@@ -45,6 +45,12 @@
*/
package org.apache.cocoon.portal.pluto.factory;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
@@ -52,6 +58,7 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.cocoon.portal.pluto.om.PortletDefinitionImpl;
import org.apache.pluto.factory.PortletInvokerFactory;
import org.apache.pluto.invoker.PortletInvoker;
@@ -67,7 +74,7 @@
*/
public class PortletInvokerFactoryImpl
extends AbstractFactory
-implements PortletInvokerFactory, Serviceable, Contextualizable {
+implements PortletInvokerFactory, Serviceable, Contextualizable, ThreadSafe,
Disposable {
/** The avalon context */
protected Context context;
@@ -75,6 +82,9 @@
/** The service manager */
protected ServiceManager manager;
+ /** All local portlets */
+ protected List localPortlets = Collections.synchronizedList(new
ArrayList());
+
/* (non-Javadoc)
* @see
org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
*/
@@ -90,6 +100,20 @@
}
/* (non-Javadoc)
+ * @see org.apache.avalon.framework.activity.Disposable#dispose()
+ */
+ public void dispose() {
+ final Iterator i = this.localPortlets.iterator();
+ while (i.hasNext()) {
+ LocalPortletInvokerImpl current =
(LocalPortletInvokerImpl)i.next();
+ current.destroy();
+ }
+ this.localPortlets.clear();
+ this.manager = null;
+ this.context = null;
+ }
+
+ /* (non-Javadoc)
* @see
org.apache.pluto.factory.PortletInvokerFactory#getPortletInvoker(org.apache.pluto.om.portlet.PortletDefinition)
*/
public PortletInvoker getPortletInvoker(PortletDefinition
portletDefinition) {
@@ -103,6 +127,7 @@
invoker =
((PortletDefinitionImpl)portletDefinition).getLocalPortletInvoker();
if ( invoker == null ) {
invoker = new LocalPortletInvokerImpl(portletDefinition,
this.servletConfig);
+ this.localPortlets.add(invoker);
((PortletDefinitionImpl)portletDefinition).setLocalPortletInvoker(invoker);
try {
ContainerUtil.enableLogging(invoker, this.getLogger());
1.3 +10 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/LocalPortletInvokerImpl.java
Index: LocalPortletInvokerImpl.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/LocalPortletInvokerImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LocalPortletInvokerImpl.java 27 Jan 2004 09:56:38 -0000 1.2
+++ LocalPortletInvokerImpl.java 2 Feb 2004 08:39:37 -0000 1.3
@@ -188,4 +188,13 @@
this.portlet.init(portletConfig);
}
+ /**
+ * Destroy the associated portlet
+ */
+ public void destroy() {
+ if (this.portlet != null ) {
+ this.portlet.destroy();
+ this.portlet = null;
+ }
+ }
}