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 2005/10/01 21:34:06 UTC

svn commit: r293017 - in /cocoon/trunk: ./ src/java/ src/java/org/apache/cocoon/core/osgi/ src/osgi-servlet/ src/osgi-servlet/org/apache/cocoon/service/servlet/impl/ src/webapp/

Author: danielf
Date: Sat Oct  1 12:33:44 2005
New Revision: 293017

URL: http://svn.apache.org/viewcvs?rev=293017&view=rev
Log:
Followed Vadim's ideas and moved creation of Core and Cocoon from the cocoon bundle to the webapp bundle. Core and Cocoon are registred as OSGi services through the ECM/OSGi Service adapters and used in the osgi-servlet bundle. Also cleaned up manifests, imports and whitespace.

Modified:
    cocoon/trunk/init.xargs
    cocoon/trunk/src/java/Manifest.mf
    cocoon/trunk/src/java/org/apache/cocoon/core/osgi/CoreBlockActivator.java
    cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiBootstrapEnvironment.java
    cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiCoreServiceManager.java
    cocoon/trunk/src/java/org/apache/cocoon/core/osgi/ServiceManagerActivator.java
    cocoon/trunk/src/osgi-servlet/Manifest.mf
    cocoon/trunk/src/osgi-servlet/org/apache/cocoon/service/servlet/impl/Activator.java
    cocoon/trunk/src/webapp/Manifest.mf

Modified: cocoon/trunk/init.xargs
URL: http://svn.apache.org/viewcvs/cocoon/trunk/init.xargs?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/init.xargs (original)
+++ cocoon/trunk/init.xargs Sat Oct  1 12:33:44 2005
@@ -68,5 +68,5 @@
 -start lib/core/knopflerfish-frameworkcommands-1.0.0.jar
 -start lib/core/knopflerfish-logcommands-1.0.0.jar
 -start lib/core/knopflerfish-http_all-1.1.0.jar
--start build/osgi/org.apache.cocoon_1.0.0.jar
+-start build/osgi/org.apache.cocoon_webapp_1.0.0.jar
 -start build/osgi/org.apache.cocoon_servlet_1.0.0.jar

Modified: cocoon/trunk/src/java/Manifest.mf
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/Manifest.mf?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/java/Manifest.mf (original)
+++ cocoon/trunk/src/java/Manifest.mf Sat Oct  1 12:33:44 2005
@@ -9,8 +9,7 @@
 Bundle-Vendor: Apache
 Bundle-DocURL: http://cocoon.apache.org
 Bundle-ContactAddress: http://cocoon.apache.org
-Bundle-Activator: org.apache.cocoon.core.osgi.CoreBlockActivator
-Bundle-Category: block
+Bundle-Category: library
 Bundle-Classpath: 
  .,
  avalon-framework-api-4.3.jar,

Modified: cocoon/trunk/src/java/org/apache/cocoon/core/osgi/CoreBlockActivator.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/core/osgi/CoreBlockActivator.java?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/core/osgi/CoreBlockActivator.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/core/osgi/CoreBlockActivator.java Sat Oct  1 12:33:44 2005
@@ -21,7 +21,6 @@
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.context.Context;
 import org.apache.avalon.framework.service.ServiceException;
-import org.apache.cocoon.Cocoon;
 import org.apache.cocoon.Processor;
 import org.apache.cocoon.core.BootstrapEnvironment;
 import org.apache.cocoon.core.Core;
@@ -37,12 +36,12 @@
 
     public void start(final BundleContext ctx) throws Exception {
         
-	BootstrapEnvironment env = new OSGiBootstrapEnvironment(this.classLoader, ctx);
-	env.log("OSGiBootstrapEnvironment created");
-	CoreUtil coreUtil = new CoreUtil(env);
-	env.log("CoreUtil created");
-	this.core = coreUtil.getCore();
-	this.processor = coreUtil.createCocoon();
+        BootstrapEnvironment env = new OSGiBootstrapEnvironment(this.classLoader, ctx);
+        env.log("OSGiBootstrapEnvironment created");
+        CoreUtil coreUtil = new CoreUtil(env);
+        env.log("CoreUtil created");
+        this.core = coreUtil.getCore();
+        this.processor = coreUtil.createCocoon();
 
         super.start(ctx);
     }
@@ -71,6 +70,6 @@
     protected void addComponents(CoreServiceManager manager) 
     throws ServiceException, ConfigurationException {
         manager.addInstance(Core.ROLE, this.core);
-        manager.addInstance(Cocoon.class.getName(), this.processor);
+        manager.addInstance(Processor.ROLE, this.processor);
     }
 }

Modified: cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiBootstrapEnvironment.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiBootstrapEnvironment.java?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiBootstrapEnvironment.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiBootstrapEnvironment.java Sat Oct  1 12:33:44 2005
@@ -59,7 +59,7 @@
         LoggerManager logManager = new OSGiLoggerManager(bc, LogService.LOG_DEBUG);
         this.logger = logManager.getDefaultLogger();
 
-        Bundle bundle = getSitemapBundle(bc, this.logger);
+        Bundle bundle = bc.getBundle();
         if (bundle == null) {
             throw new Exception("No sitemap bundle");
         }
@@ -180,31 +180,6 @@
     public String getClassPath(Settings settings) {
         return null;
     }
-
-    private Bundle getSitemapBundle(BundleContext bc, Logger log) {
-        String SITEMAP = "sitemap";
-        Bundle[] bundles = bc.getBundles();
-        for (int i = 0; i < bundles.length; i++) {
-            Bundle bundle = bundles[i];
-            try {
-                log.info("checking bundle " + bundle + " name=" + bundle.getHeaders().get(Constants.BUNDLE_NAME) + " category=" + bundle.getHeaders().get(Constants.BUNDLE_CATEGORY) + " state=" + bundle.getState());
-                if ((bundle.getState() == Bundle.INSTALLED ||
-                     bundle.getState() == Bundle.RESOLVED ||
-                     bundle.getState() == Bundle.ACTIVE)) {
-                    log.info("ok state");
-                    if (SITEMAP.equals(bundle.getHeaders().get(Constants.BUNDLE_CATEGORY))) {
-                        log.info("sitemap");
-                        return bundle;
-                    }
-                }
-            } catch (NullPointerException e) {
-                // BUNDLE_CATEGORY not present in the headers of the
-                // bundle, nothing to do.
-            }
-        }
-        return null;
-    }
-
 
     public class OSGiContext extends AbstractContext {
 

Modified: cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiCoreServiceManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiCoreServiceManager.java?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiCoreServiceManager.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/core/osgi/OSGiCoreServiceManager.java Sat Oct  1 12:33:44 2005
@@ -21,6 +21,7 @@
 
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.components.ComponentInfo;
 import org.apache.cocoon.core.container.CoreServiceManager;
@@ -58,24 +59,43 @@
      */
     public void addComponent(String role, String className, Configuration configuration, ComponentInfo info) throws ConfigurationException {
         super.addComponent(role, className, configuration, info);
-        if (configuration.getAttributeAsBoolean("exported", false)) {
+        if (configuration.getAttributeAsBoolean("exported", true)) {
             ComponentHandler handler = (ComponentHandler)super.componentHandlers.get(role);
             if (!handler.isSingleton()) {
                 throw new ConfigurationException("Only singleton services can be exported as OSGi services, at " +
-                        configuration.getLocation());
+                                                 configuration.getLocation());
             }
-            
-            String itfName = OSGiServiceManager.getServiceInterface(role);
-            String hint = OSGiServiceManager.getServiceHint(role);
-            Dictionary dict = null;
-            if (hint != null) {
-                dict = new Hashtable();
-                dict.put(OSGiServiceManager.HINT_PROPERTY, hint);
-            }
-            
-            Object service = new ComponentHandlerFactory(handler);
-            ctx.registerService(itfName, service, dict);
+            this.addService(role, handler);
+        }
+    }
+    
+    /**
+     * Catch a component insertion and register it as OSGi services.
+     */
+    public void addInstance(String role, Object instance) throws ServiceException {
+        super.addInstance(role, instance);
+        ComponentHandler handler = (ComponentHandler)super.componentHandlers.get(role);
+        if (!handler.isSingleton()) {
+            throw new ServiceException("Only singleton services can be exported as OSGi services, at " +
+                                       instance.toString());
         }
+        this.addService(role, handler);
+    }
+
+    /**
+     * Register a component as an OSGi service.
+     */
+    protected void addService(String role, ComponentHandler handler) {
+        String itfName = OSGiServiceManager.getServiceInterface(role);
+        String hint = OSGiServiceManager.getServiceHint(role);
+        Dictionary dict = null;
+        if (hint != null) {
+            dict = new Hashtable();
+            dict.put(OSGiServiceManager.HINT_PROPERTY, hint);
+        }
+
+        Object service = new ComponentHandlerFactory(handler);
+        ctx.registerService(itfName, service, dict);
     }
     
     /**

Modified: cocoon/trunk/src/java/org/apache/cocoon/core/osgi/ServiceManagerActivator.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/core/osgi/ServiceManagerActivator.java?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/core/osgi/ServiceManagerActivator.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/core/osgi/ServiceManagerActivator.java Sat Oct  1 12:33:44 2005
@@ -96,8 +96,8 @@
     }
 
     protected Context getContext() throws Exception {
-	Core core = (Core)this.parentManager.lookup(Core.ROLE);
-	return core.getContext();
+        Core core = (Core)this.parentManager.lookup(Core.ROLE);
+        return core.getContext();
     }
 
     /**

Modified: cocoon/trunk/src/osgi-servlet/Manifest.mf
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/osgi-servlet/Manifest.mf?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/osgi-servlet/Manifest.mf (original)
+++ cocoon/trunk/src/osgi-servlet/Manifest.mf Sat Oct  1 12:33:44 2005
@@ -14,7 +14,6 @@
  javax.servlet,
  javax.servlet.http,
  org.apache.avalon.excalibur.logger,
- org.apache.avalon.framework.context,
  org.apache.avalon.framework.logger,
  org.apache.cocoon,
  org.apache.cocoon.core,
@@ -22,20 +21,11 @@
  org.apache.cocoon.components.notification,
  org.apache.cocoon.environment,
  org.apache.cocoon.environment.http,
- org.apache.cocoon.servlet,
  org.apache.cocoon.servlet.multipart,
- org.apache.cocoon.util,
- org.apache.commons.lang,
  org.apache.commons.lang.time,
- org.apache.excalibur.source.impl,
- org.apache.excalibur.xml.impl,
- org.apache.excalibur.xml.xpath,
- org.apache.excalibur.xml.xslt,
- org.apache.excalibur.xmlizer,
  org.osgi.framework,
  org.osgi.service.http,
- org.osgi.service.log,
- org.osgi.util.tracker
+ org.osgi.service.log
 DynamicImport-Package: org.apache.cocoon.*
 Bundle-UUID: org.apache.cocoon:cocoon_servlet:1.0.0:impl
 Built-From: C:\cygwin\usr\local\svn\cocoon\osgi\bundles\cocoon_servlet

Modified: cocoon/trunk/src/osgi-servlet/org/apache/cocoon/service/servlet/impl/Activator.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/osgi-servlet/org/apache/cocoon/service/servlet/impl/Activator.java?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/osgi-servlet/org/apache/cocoon/service/servlet/impl/Activator.java (original)
+++ cocoon/trunk/src/osgi-servlet/org/apache/cocoon/service/servlet/impl/Activator.java Sat Oct  1 12:33:44 2005
@@ -20,11 +20,9 @@
 import org.apache.avalon.excalibur.logger.LoggerManager;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.cocoon.Processor;
-import org.apache.cocoon.core.BootstrapEnvironment;
 import org.apache.cocoon.core.Core;
-import org.apache.cocoon.core.CoreUtil;
-import org.apache.cocoon.core.osgi.OSGiBootstrapEnvironment;
 import org.apache.cocoon.core.osgi.OSGiLoggerManager;
+import org.apache.cocoon.core.osgi.OSGiServiceManager;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceEvent;
@@ -41,7 +39,6 @@
 
     static BundleContext bc;
     static final String  SERVLET_ALIAS = "/";     // the http server root
-    static final String  SITEMAP = "sitemap";
 
     private HashSet registrations = new HashSet();
     private ClassLoader classLoader = getClass().getClassLoader();
@@ -53,14 +50,12 @@
 
         Activator.bc  = bc;
 
-        BootstrapEnvironment env = new OSGiBootstrapEnvironment(this.classLoader, Activator.bc);
-        env.log("OSGiBootstrapEnvironment created");
-        CoreUtil coreUtil = new CoreUtil(env);
-        env.log("CoreUtil created");
         LoggerManager logManager = new OSGiLoggerManager(bc, LogService.LOG_DEBUG);
         this.logger = logManager.getDefaultLogger();
-        this.core = coreUtil.getCore();
-        this.processor = coreUtil.createCocoon();
+
+        OSGiServiceManager manager = new OSGiServiceManager(Activator.bc);
+        this.core = (Core)manager.lookup(Core.ROLE);
+        this.processor = (Processor)manager.lookup(Processor.ROLE);
 
         ServiceListener listener = new ServiceListener() {
                 public void serviceChanged(ServiceEvent ev) {

Modified: cocoon/trunk/src/webapp/Manifest.mf
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/webapp/Manifest.mf?rev=293017&r1=293016&r2=293017&view=diff
==============================================================================
--- cocoon/trunk/src/webapp/Manifest.mf (original)
+++ cocoon/trunk/src/webapp/Manifest.mf Sat Oct  1 12:33:44 2005
@@ -8,12 +8,10 @@
 Bundle-Vendor: Apache
 Bundle-DocURL: http://cocoon.apache.org
 Bundle-ContactAddress: http://cocoon.apache.org
-Bundle-Activator: 
+Bundle-Activator: org.apache.cocoon.core.osgi.CoreBlockActivator
 Bundle-Category: sitemap
-Import-Package: org.osgi.framework
+Import-Package: 
+ org.osgi.framework,
+ org.apache.cocoon
+DynamicImport-Package: org.apache.cocoon.*
 Bundle-UUID: org.apache.cocoon:cocoon_webapp:1.0.0:impl
-Built-From: F:\os\cocoon\whiteboard\osgi\bundles\cocoon_webapp
-Build-Date: Wed June 29 2005, 12:58:41
-Bundle-SubversionURL: https://svn.apache.org/repos/asf/cocoon/whiteboa
- rd/osgi/
-