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>