cziegeler 2004/01/27 01:56:51
Modified: src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory
PortletInvokerFactoryImpl.java AbstractFactory.java
LocalPortletInvokerImpl.java
src/blocks/portal/java/org/apache/cocoon/portal/pluto/services/factory
FactoryManagerServiceImpl.java
Log:
Factories can now use avalon components
Revision Changes Path
1.2 +39 -3
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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PortletInvokerFactoryImpl.java 27 Jan 2004 08:05:35 -0000 1.1
+++ PortletInvokerFactoryImpl.java 27 Jan 2004 09:56:37 -0000 1.2
@@ -45,6 +45,13 @@
*/
package org.apache.cocoon.portal.pluto.factory;
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Contextualizable;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.portal.pluto.om.PortletDefinitionImpl;
import org.apache.pluto.factory.PortletInvokerFactory;
import org.apache.pluto.invoker.PortletInvoker;
@@ -60,7 +67,27 @@
*/
public class PortletInvokerFactoryImpl
extends AbstractFactory
-implements PortletInvokerFactory {
+implements PortletInvokerFactory, Serviceable, Contextualizable {
+
+ /** The avalon context */
+ protected Context context;
+
+ /** The service manager */
+ protected ServiceManager manager;
+
+ /* (non-Javadoc)
+ * @see
org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
+ */
+ public void contextualize(Context context) throws ContextException {
+ this.context = context;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
/* (non-Javadoc)
* @see
org.apache.pluto.factory.PortletInvokerFactory#getPortletInvoker(org.apache.pluto.om.portlet.PortletDefinition)
@@ -77,17 +104,26 @@
if ( invoker == null ) {
invoker = new LocalPortletInvokerImpl(portletDefinition,
this.servletConfig);
((PortletDefinitionImpl)portletDefinition).setLocalPortletInvoker(invoker);
+ try {
+ ContainerUtil.enableLogging(invoker, this.getLogger());
+ ContainerUtil.contextualize(invoker, this.context);
+ ContainerUtil.service(invoker, this.manager);
+ ContainerUtil.initialize(invoker);
+ } catch (Exception ignore) {
+ this.getLogger().warn("Unable to initialize local
portlet invoker.", ignore);
+ }
}
} else {
invoker = new PortletInvokerImpl(portletDefinition,
this.servletConfig);
}
+
return invoker;
}
/* (non-Javadoc)
* @see
org.apache.pluto.factory.PortletInvokerFactory#releasePortletInvoker(org.apache.pluto.invoker.PortletInvoker)
*/
- public void releasePortletInvoker(PortletInvoker arg0) {
+ public void releasePortletInvoker(PortletInvoker invoker) {
// nothing to do here
}
1.2 +4 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/AbstractFactory.java
Index: AbstractFactory.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/AbstractFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractFactory.java 22 Jan 2004 14:01:22 -0000 1.1
+++ AbstractFactory.java 27 Jan 2004 09:56:37 -0000 1.2
@@ -47,6 +47,8 @@
import java.util.Map;
import javax.servlet.ServletConfig;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.pluto.factory.Factory;
@@ -58,6 +60,7 @@
* @version CVS $Id$
*/
public abstract class AbstractFactory
+extends AbstractLogEnabled
implements Factory {
/** The servlet config */
1.2 +53 -3
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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LocalPortletInvokerImpl.java 27 Jan 2004 08:05:35 -0000 1.1
+++ LocalPortletInvokerImpl.java 27 Jan 2004 09:56:38 -0000 1.2
@@ -58,6 +58,15 @@
import javax.portlet.RenderResponse;
import javax.servlet.ServletConfig;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.context.Contextualizable;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.util.ClassUtils;
import org.apache.pluto.factory.PortletObjectAccess;
import org.apache.pluto.invoker.PortletInvoker;
@@ -70,17 +79,57 @@
*
* @version CVS $Id$
*/
-public class LocalPortletInvokerImpl
-implements PortletInvoker {
+public class LocalPortletInvokerImpl
+extends AbstractLogEnabled
+implements PortletInvoker, Contextualizable, Serviceable, Initializable {
/** servlet configuration */
protected final ServletConfig servletConfig;
+
/** The portlet definition */
protected final PortletDefinition portletDefinition;
/** The portlet */
protected Portlet portlet;
+ /** The avalon context */
+ protected Context context;
+
+ /** The service manager */
+ protected ServiceManager manager;
+
+ /* (non-Javadoc)
+ * @see
org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
+ */
+ public void contextualize(Context context) throws ContextException {
+ this.context = context;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.avalon.framework.activity.Initializable#initialize()
+ */
+ public void initialize() throws Exception {
+ if (this.portlet != null) {
+ try {
+ ContainerUtil.enableLogging(this.portlet, this.getLogger());
+ ContainerUtil.contextualize(this.portlet, this.context);
+ ContainerUtil.service(this.portlet, this.manager);
+ ContainerUtil.initialize(this.portlet);
+ } catch (Exception ignore) {
+ // we ignore the exception here and throw later on a portlet
exception
+ this.getLogger().warn("Unable to initialize local portlet
invoker.", ignore);
+ this.portlet = null;
+ }
+ }
+ }
+
/**
* Constructor
*/
@@ -94,6 +143,7 @@
this.portlet = (Portlet)ClassUtils.newInstance(clazzName);
} catch (Exception ignore) {
// we ignore the exception here and throw later on a portlet
exception
+ this.getLogger().warn("Unable to initialize local portlet
invoker.", ignore);
}
}
1.4 +30 -4
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/services/factory/FactoryManagerServiceImpl.java
Index: FactoryManagerServiceImpl.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/services/factory/FactoryManagerServiceImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FactoryManagerServiceImpl.java 27 Jan 2004 08:05:35 -0000 1.3
+++ FactoryManagerServiceImpl.java 27 Jan 2004 09:56:51 -0000 1.4
@@ -65,9 +65,14 @@
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.portal.pluto.factory.ControllerFactoryImpl;
import org.apache.cocoon.portal.pluto.factory.ObjectIDFactoryImpl;
import org.apache.cocoon.portal.pluto.factory.PortletInvokerFactoryImpl;
@@ -103,18 +108,34 @@
* @version CVS $Id$
*/
public class FactoryManagerServiceImpl
-implements FactoryManagerService, Initializable, Contextualizable,
Disposable {
+extends AbstractLogEnabled
+implements FactoryManagerService, Initializable, Contextualizable,
Serviceable, Disposable {
+ /** The servlet configuration */
protected ServletConfig servletConfig;
+ /** The avalon context */
+ protected Context context;
+
+ /** The service manager */
+ protected ServiceManager manager;
+
/* (non-Javadoc)
* @see
org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
*/
public void contextualize(Context context) throws ContextException {
+ this.context = context;
this.servletConfig = (ServletConfig)
context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG);
}
/* (non-Javadoc)
+ * @see
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
+
+ /* (non-Javadoc)
* @see org.apache.avalon.framework.activity.Initializable#initialize()
*/
public void initialize()
@@ -153,9 +174,14 @@
Class factoryImpl = Class.forName (factoryImplName);
Factory factory = (Factory) factoryImpl.newInstance ();
+ ContainerUtil.enableLogging(factory, this.getLogger());
+ ContainerUtil.contextualize(factory, this.context);
+ ContainerUtil.service(factory, this.manager);
+ ContainerUtil.initialize(factory);
+
factory.init(this.servletConfig, new HashMap());
- factoryMap.put (factoryInterface, factory);
+ factoryMap.put (factoryInterface.getName(), factory);
// build up list in reverse order for later destruction
factoryList.add (0, factory);
@@ -195,7 +221,7 @@
public Factory getFactory (Class theClass) {
// at this state the services map is read-only,
// therefore we can go without synchronization
- return ((Factory) factoryMap.get (theClass));
+ return ((Factory) factoryMap.get (theClass.getName()));
}
private Map factoryMap = new HashMap();