You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2006/05/08 01:34:08 UTC
svn commit: r404870 - in /cocoon/trunk/core:
cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/
cocoon-core/META-INF/ cocoon-core/src/main/java/org/apache/cocoon/sitemap/
cocoon-webapp/META-INF/
Author: danielf
Date: Sun May 7 16:34:07 2006
New Revision: 404870
URL: http://svn.apache.org/viewcvs?rev=404870&view=rev
Log:
* Made service references available as servlet context attributes in the blocks.
* The BlockServlet can create and manage servlets given their classname as the property servletClass.
* cocoon-core and cocoon-web get their SitemapServlets created through BlockServlets.
* The SitemapServlet doesn't depend on any OSGi code anymore.
Modified:
cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockContext.java
cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockServlet.java
cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF
cocoon/trunk/core/cocoon-core/META-INF/components.xml
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java
cocoon/trunk/core/cocoon-webapp/META-INF/components.xml
Modified: cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockContext.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockContext.java?rev=404870&r1=404869&r2=404870&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockContext.java (original)
+++ cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockContext.java Sun May 7 16:34:07 2006
@@ -44,7 +44,7 @@
public static final String SUPER = "super";
- private Hashtable attributes;
+ private Hashtable attributes = new Hashtable();
private Servlet servlet;
private String mountPath;
private Dictionary properties;
@@ -56,7 +56,14 @@
* @see javax.servlet.ServletContext#getAttribute(java.lang.String)
*/
public Object getAttribute(String name) {
- return this.attributes.get(name);
+ Object value = this.attributes.get(name);
+ // Make service references available as servlet context attributes
+ // FIXME: The other attribute methods should reflect that service references
+ // are available as attributes
+ if (value == null) {
+ value = this.componentContext.locateService(name);
+ }
+ return value;
}
/*
Modified: cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockServlet.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockServlet.java?rev=404870&r1=404869&r2=404870&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockServlet.java (original)
+++ cocoon/trunk/core/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlockServlet.java Sun May 7 16:34:07 2006
@@ -90,14 +90,21 @@
return this.blockContext;
}
- protected void activate(ComponentContext componentContext) {
+ protected void activate(ComponentContext componentContext)
+ throws InstantiationException, IllegalAccessException, ClassNotFoundException {
this.componentContext = componentContext;
this.blockContext = new BlockContext();
this.blockContext.setProperties(this.componentContext.getProperties());
this.blockContext.setMountPath((String) this.componentContext.getProperties().get("path"));
- this.blockServlet =
- (Servlet) this.componentContext.locateService("blockServlet");
+ String blockServletClass = (String) this.componentContext.getProperties().get("servletClass");
+ if (blockServletClass != null) {
+ this.blockServlet =
+ (Servlet) this.componentContext.getBundleContext().getBundle().loadClass(blockServletClass).newInstance();
+ } else {
+ this.blockServlet =
+ (Servlet) this.componentContext.locateService("blockServlet");
+ }
this.blockContext.setServlet(this.blockServlet);
this.blockContext.activate(this.componentContext);
}
Modified: cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF?rev=404870&r1=404869&r2=404870&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF (original)
+++ cocoon/trunk/core/cocoon-core/META-INF/MANIFEST.MF Sun May 7 16:34:07 2006
@@ -47,7 +47,7 @@
target/osgi/lib/xml-resolver-1.1.jar,
target/osgi/lib/easymock-1.1.jar,
target/osgi/lib/jmock-1.0.1.jar,
- target/osgi/lib/junit-3.8.1.jar,
+ target/osgi/lib/junit-3.8.2.jar,
target/osgi/lib/xmlunit-0.8.jar,
target/osgi/lib/activemq-optional-3.2.jar
Export-Package: junit.framework,
@@ -130,6 +130,7 @@
org.springframework.beans.factory.config
Import-Package: javax.servlet;version="2.3.0",
javax.servlet.http;version="2.3.0",
+ org.apache.cocoon.blocks,
org.osgi.framework,
org.osgi.service.component,
org.osgi.service.log
Modified: cocoon/trunk/core/cocoon-core/META-INF/components.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/META-INF/components.xml?rev=404870&r1=404869&r2=404870&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/META-INF/components.xml (original)
+++ cocoon/trunk/core/cocoon-core/META-INF/components.xml Sun May 7 16:34:07 2006
@@ -36,19 +36,22 @@
bind="setSettings"/>
</scr:component>
- <scr:component name="org.apache.cocoon.core.sitemap.SitemapServlet">
- <scr:implementation class="org.apache.cocoon.sitemap.SitemapServlet"/>
- <scr:service>
- <scr:provide interface="javax.servlet.Servlet"/>
- </scr:service>
- <scr:property name="path" value="/sitemap-test"/>
- <scr:property name="sitemapPath" value="/COB-INF/sitemap.xmap"/>
- <scr:reference name="beanFactory"
+ <scr:component name="org.apache.cocoon.core.BlockServlet">
+ <scr:implementation class="org.apache.cocoon.blocks.BlockServlet"/>
+ <scr:service>
+ <scr:provide interface="javax.servlet.Servlet"/>
+ </scr:service>
+
+ <scr:property name="path" value="/sitemap-test"/>
+ <scr:property name="servletClass" value="org.apache.cocoon.sitemap.SitemapServlet"/>
+ <scr:property name="sitemapPath" value="/COB-INF/sitemap.xmap"/>
+
+ <scr:reference name="interface org.springframework.web.context.WebApplicationContext.ROOT"
interface="org.apache.cocoon.core.osgi.CocoonSpringBeanRegistry"
- target="(component.name=org.apache.cocoon.core.osgi.SpringEcmFactory)"
- bind="setBeanFactory"/>
- </scr:component>
-
+ target="(component.name=org.apache.cocoon.core.osgi.SpringEcmFactory)"
+ bind="setBeanFactory"/>
+ </scr:component>
+
<!--scr:component name="org.apache.cocoon.core.osgi.SpringBridge">
<scr:implementation class="org.apache.cocoon.core.osgi.OSGiSpringBridge"/>
<scr:service>
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java?rev=404870&r1=404869&r2=404870&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/sitemap/SitemapServlet.java Sun May 7 16:34:07 2006
@@ -33,13 +33,13 @@
import org.apache.cocoon.components.treeprocessor.TreeProcessor;
import org.apache.cocoon.core.CoreUtil;
import org.apache.cocoon.core.Settings;
-import org.apache.cocoon.core.osgi.CocoonSpringBeanRegistry;
import org.apache.cocoon.environment.Context;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.http.HttpContext;
import org.apache.cocoon.environment.http.HttpEnvironment;
import org.apache.cocoon.environment.internal.EnvironmentHelper;
-import org.osgi.service.component.ComponentContext;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.web.context.WebApplicationContext;
/**
* Use this servlet as entry point to Cocoon. It wraps the @link {@link TreeProcessor} and delegates
@@ -54,9 +54,9 @@
private static final String DEFAULT_SITEMAP_PATH = "/COB-INF/sitemap.xmap";
private static final String SITEMAP_PATH_PROPERTY = "sitemapPath";
- private CocoonSpringBeanRegistry beanFactory;
+ private BeanFactory beanFactory;
private Logger logger;
- private String sitemapPath = DEFAULT_SITEMAP_PATH;
+ private String sitemapPath;
protected Context cocoonContext;
private Processor processor;
private Settings settings;
@@ -67,7 +67,17 @@
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
-
+
+ // Get a bean factory from the servlet context
+ this.beanFactory =
+ (BeanFactory) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
+ if (this.beanFactory == null)
+ throw new ServletException("No BeanFactory in the context");
+
+ this.sitemapPath = this.getServletContext().getInitParameter(SITEMAP_PATH_PROPERTY);
+ if (this.sitemapPath == null)
+ this.sitemapPath = DEFAULT_SITEMAP_PATH;
+
// get components from the beanFactory
this.logger = (Logger) this.beanFactory.getBean("org.apache.avalon.framework.logger.Logger");
this.settings = (Settings) this.beanFactory.getBean(Settings.ROLE);
@@ -153,28 +163,4 @@
treeProcessorConf.setAttribute("file", this.sitemapPath);
return treeProcessorConf;
}
-
- /**
- * Get a Spring BeanFactory injected by OSGi declarative services.
- */
- protected void setBeanFactory(CocoonSpringBeanRegistry beanFactory) {
- this.beanFactory = beanFactory;
- }
-
- /**
- * Set the path of the sitemap
- */
- public void setSitemapPath(String sitemapPath) {
- this.sitemapPath = sitemapPath;
- }
-
- /**
- * This Method is used in an OSGi environment to activate this servlet as bundle.
- *
- * @param componentContext - The component context is made available and gives access to OSGi framework information
- */
- protected void activate(ComponentContext componentContext) throws Exception {
- this.setSitemapPath((String) componentContext.getProperties().get(SITEMAP_PATH_PROPERTY));
- }
-
}
Modified: cocoon/trunk/core/cocoon-webapp/META-INF/components.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/core/cocoon-webapp/META-INF/components.xml?rev=404870&r1=404869&r2=404870&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-webapp/META-INF/components.xml (original)
+++ cocoon/trunk/core/cocoon-webapp/META-INF/components.xml Sun May 7 16:34:07 2006
@@ -38,18 +38,21 @@
bind="setParentBeanFactory"/>
</scr:component>
- <!-- The SitemapServlet of this bundle -->
- <scr:component name="org.apache.cocoon.webapp.SitemapServlet">
- <scr:implementation class="org.apache.cocoon.sitemap.SitemapServlet"/>
+ <!-- The BlockServlet of this bundle -->
+ <scr:component name="org.apache.cocoon.webapp.BlockServlet">
+ <scr:implementation class="org.apache.cocoon.blocks.BlockServlet"/>
<scr:service>
<scr:provide interface="javax.servlet.Servlet"/>
- </scr:service>
+ </scr:service>
+
<scr:property name="path" value="/cocoon-webapp"/>
+ <scr:property name="servletClass" value="org.apache.cocoon.sitemap.SitemapServlet"/>
<scr:property name="sitemapPath" value="/src/main/webapp/sitemap.xmap"/>
- <scr:reference name="beanFactory"
+
+ <scr:reference name="interface org.springframework.web.context.WebApplicationContext.ROOT"
interface="org.apache.cocoon.core.osgi.CocoonSpringBeanRegistry"
target="(component.name=org.apache.cocoon.webapp.SpringEcmFactory)"
bind="setBeanFactory"/>
- </scr:component>
+ </scr:component>
</components>