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/07/04 00:33:52 UTC

svn commit: r208999 - in /cocoon/whiteboard/osgi: ./ bundles/cocoon/ bundles/cocoon_servlet/ bundles/cocoon_servlet/resources/ bundles/cocoon_servlet/src/ bundles/cocoon_servlet/src/org/ bundles/cocoon_servlet/src/org/apache/ bundles/cocoon_servlet/src...

Author: danielf
Date: Sun Jul  3 15:33:50 2005
New Revision: 208999

URL: http://svn.apache.org/viewcvs?rev=208999&view=rev
Log:
A Cocoon servlet bundle, that try to find a sitemap bundle, create a CocoonServlet and register it in the HTTPService. It doesn't work yet, classloading problems during initialization.

Added:
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/build.xml
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/resources/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/
    cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/Activator.java   (with props)
    cocoon/whiteboard/osgi/jars-external/http/
    cocoon/whiteboard/osgi/jars-external/http/http_api-1.1.0.jar   (with props)
    cocoon/whiteboard/osgi/jars-external/log/
    cocoon/whiteboard/osgi/jars-external/log/log_api-1.0.0.jar   (with props)
Modified:
    cocoon/whiteboard/osgi/build.xml
    cocoon/whiteboard/osgi/bundles/cocoon/build.xml
    cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml
    cocoon/whiteboard/osgi/init.xargs
    cocoon/whiteboard/osgi/props.xargs

Modified: cocoon/whiteboard/osgi/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/build.xml?rev=208999&r1=208998&r2=208999&view=diff
==============================================================================
--- cocoon/whiteboard/osgi/build.xml (original)
+++ cocoon/whiteboard/osgi/build.xml Sun Jul  3 15:33:50 2005
@@ -7,6 +7,7 @@
     <ant dir="bundles/cocoon"           target="all"/>
     <ant dir="bundles/cocoon_testcase"  target="all"/>
     <ant dir="bundles/cocoon_webapp"    target="all"/>
+    <ant dir="bundles/cocoon_servlet"   target="all"/>
    </target>
  
    <target name="clean">
@@ -14,6 +15,7 @@
     <ant dir="bundles/cocoon"           target="clean"/>
     <ant dir="bundles/cocoon_testcase"  target="clean"/>
     <ant dir="bundles/cocoon_webapp"    target="clean"/>
+    <ant dir="bundles/cocoon_servlet"   target="clean"/>
    </target>
 
 </project>

Modified: cocoon/whiteboard/osgi/bundles/cocoon/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon/build.xml?rev=208999&r1=208998&r2=208999&view=diff
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon/build.xml (original)
+++ cocoon/whiteboard/osgi/bundles/cocoon/build.xml Sun Jul  3 15:33:50 2005
@@ -33,7 +33,7 @@
     <mapper type="flatten"/>
   </pathconvert>
 
-  <property name="export.package"        value="org.apache.avalon.framework.context,org.apache.avalon.framework.logger,org.apache.avalon.framework.service,org.apache.cocoon,org.apache.cocoon.components.blocks,org.apache.cocoon.components.classloader,org.apache.cocoon.components.fam,org.apache.cocoon.components.modules.input,org.apache.cocoon.components.pipeline.impl,org.apache.cocoon.components.source.impl,org.apache.cocoon.components.treeprocessor,org.apache.cocoon.components.treeprocessor.sitemap,org.apache.cocoon.core,org.apache.cocoon.core.container,org.apache.cocoon.environment,org.apache.cocoon.environment.impl,org.apache.cocoon.generation,org.apache.cocoon.matching,org.apache.cocoon.reading,org.apache.cocoon.serialization,org.apache.cocoon.components.source,org.apache.cocoon.transformation,org.apache.cocoon.util,org.apache.cocoon.util.log,org.apache.avalon.excalibur.logger,org.apache.excalibur.source,org.apache.excalibur.source.impl,org.apache.excalibur.xml.impl,org.apache.excalibur.xml.xslt,org.apache.excalibur.xmlizer,org.apache.log"/>
+  <property name="export.package"        value="javax.servlet,javax.servlet.http,org.apache.avalon.framework.context,org.apache.avalon.framework.logger,org.apache.avalon.framework.service,org.apache.cocoon,org.apache.cocoon.components.blocks,org.apache.cocoon.components.classloader,org.apache.cocoon.components.fam,org.apache.cocoon.components.modules.input,org.apache.cocoon.components.pipeline.impl,org.apache.cocoon.components.source,org.apache.cocoon.components.source.impl,org.apache.cocoon.components.treeprocessor,org.apache.cocoon.components.treeprocessor.sitemap,org.apache.cocoon.core,org.apache.cocoon.core.container,org.apache.cocoon.environment,org.apache.cocoon.environment.impl,org.apache.cocoon.generation,org.apache.cocoon.matching,org.apache.cocoon.reading,org.apache.cocoon.serialization,org.apache.cocoon.servlet,org.apache.cocoon.transformation,org.apache.cocoon.util,org.apache.cocoon.util.log,org.apache.avalon.excalibur.logger,org.apache.excalibur.source,org.apache.excalibur.source.impl,org.apache.excalibur.xml.impl,org.apache.excalibur.xml.xslt,org.apache.excalibur.xmlizer,org.apache.log"/>
 
   <property name = "bundle.build.lib"    value = "false"/>
   <property name = "bundle.build.api"    value = "false"/>

Added: cocoon/whiteboard/osgi/bundles/cocoon_servlet/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon_servlet/build.xml?rev=208999&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon_servlet/build.xml (added)
+++ cocoon/whiteboard/osgi/bundles/cocoon_servlet/build.xml Sun Jul  3 15:33:50 2005
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE project [
+  <!ENTITY bundlebuild_include  SYSTEM "../../ant/bundlebuild_include.xml">
+]>
+
+<project name="cocoon_servlet" default="all">
+
+  <property name="cocoon.trunk"          location="../../../trunk"/>
+  <property name="topdir"                location="../.."/>
+
+  <path id="bundle.compile.path">
+   <pathelement location="lib/cocoon.jar"/>
+   <pathelement location="lib/servlet-2_3.jar"/>
+   <pathelement location="${topdir}/jars-external/http/http_api-1.1.0.jar"/>
+   <pathelement location="${topdir}/jars-external/log/log_api-1.0.0.jar"/>
+  </path>
+
+  <property name="bundle.description"    value="Cocoon servlet bundle"/>
+  <property name="bundle.vendor"         value="Apache"/>
+  <property name="bundle.category"       value="servlet"/>
+  <property name="bundle.version"        value="1.0.0"/>
+
+  <property name="impl.pattern"          value="org/apache/cocoon/service/servlet/impl/**"/>
+  <property name="import.package"        value="javax.servlet,javax.servlet.http,org.apache.cocoon.servlet,org.osgi.framework,org.osgi.service.http,org.osgi.service.log,org.osgi.util.tracker"/>
+
+  <property name="do.bundle.custom.pre"  value="true"/>
+
+  <target name="bundle.custom.pre">
+    <mkdir dir="lib"/>
+    <unzip src="${topdir}/jars/cocoon/cocoon_all-1.0.0.jar"
+           dest="lib">
+      <fileset dir=".">
+        <include name="cocoon.jar"/>
+        <include name="servlet-2_3.jar"/>
+      </fileset>
+    </unzip>
+  </target>
+
+  <property name="do.bundle.custom.post"  value="true"/>
+
+  <target name="bundle.custom.post">
+    <delete dir="lib"/>
+  </target>
+
+  &bundlebuild_include;
+
+</project>
+
+
+
+
+
+
+

Added: cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/Activator.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/Activator.java?rev=208999&view=auto
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/Activator.java (added)
+++ cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/Activator.java Sun Jul  3 15:33:50 2005
@@ -0,0 +1,178 @@
+/*
+ * Copyright 1999-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.service.servlet.impl;
+
+import java.util.Hashtable;
+import java.net.URL;
+import java.io.InputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.cocoon.servlet.CocoonServlet;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.http.HttpContext;
+import org.osgi.service.http.HttpService;
+import org.osgi.service.log.LogService;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * Activator which register a Cocoon servlet
+ */
+
+public class Activator implements BundleActivator {
+
+    static BundleContext bc;
+    static ServiceTracker logTracker;
+    static final String  SERVLET_ALIAS = "/";     // the http server root
+    static final String  SITEMAP = "sitemap";
+
+    private Hashtable registrations = new Hashtable();
+    private Bundle sitemapBundle;
+    
+    public void start(BundleContext bc) throws BundleException {
+
+        this.bc  = bc;
+        this.logTracker = new ServiceTracker(bc, LogService.class.getName(), null);
+        this.logTracker.open();
+
+        // FIXME: Add a BundleListener to detect if a sitemap bundle
+        // is installed, updated or uninstalled.
+        this.sitemapBundle = getSitemapBundle();
+        ((LogService)this.logTracker.getService()).log(LogService.LOG_INFO, "set sitemap bundle " + this.sitemapBundle);
+
+        ServiceListener listener = new ServiceListener() {
+                public void serviceChanged(ServiceEvent ev) {
+                    ServiceReference sr = ev.getServiceReference();
+                    
+                    switch(ev.getType()) {
+                    case ServiceEvent.REGISTERED:
+                        setRoot(sr);
+                        break;
+                    case ServiceEvent.UNREGISTERING:
+                        unsetRoot(sr);
+                        break;
+                    }
+                }
+            };
+        
+        String filter = "(objectclass=" + HttpService.class.getName() + ")";
+        
+        try {
+            bc.addServiceListener(listener, filter);
+            
+            ServiceReference[] srl = bc.getServiceReferences(null, filter);
+            for(int i = 0; srl != null && i < srl.length; i++) {
+                listener.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
+                                                         srl[i]));
+            }
+        } catch (Exception e) {
+            ((LogService)this.logTracker.getService()).log(LogService.LOG_ERROR,
+                                                           "Failed to set up listener for http service", e);
+        }
+    }
+  
+    public void stop(BundleContext bc) throws BundleException {
+    }
+
+    private Bundle getSitemapBundle() {
+        Bundle[] bundles = this.bc.getBundles();
+        for (int i = 0; i < bundles.length; i++) {
+            Bundle bundle = bundles[i];
+            try {
+                ((LogService)this.logTracker.getService()).log(LogService.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)) {
+                    ((LogService)this.logTracker.getService()).log(LogService.LOG_INFO, "ok state");
+                    if (SITEMAP.equals(bundle.getHeaders().get(Constants.BUNDLE_CATEGORY))) {
+                        ((LogService)this.logTracker.getService()).log(LogService.LOG_INFO, "sitemap");
+                        return bundle;
+                    }
+                }
+            } catch (NullPointerException e) {
+                // BUNDLE_CATEGORY not present in the headers of the
+                // bundle, nothing to do.
+            }
+        }
+        return null;
+    }
+
+    private void setRoot(ServiceReference sr) {
+        
+        if(registrations.containsKey(sr)) {
+            return; // already done
+        }
+        
+        ((LogService)this.logTracker.getService()).log(LogService.LOG_INFO, "set root for " + sr);
+
+        HttpService http = (HttpService)bc.getService(sr);
+
+        HttpContext context = new HttpContext() {
+                public boolean handleSecurity(HttpServletRequest  request,
+                                              HttpServletResponse response) 
+                    throws java.io.IOException {
+                    return true;
+                }
+        
+                public URL getResource(String name) {
+                    if (sitemapBundle != null) {
+                        return sitemapBundle.getResource(name);
+                    } else {
+                        return null;
+                    }
+                }
+        
+                public String getMimeType(String reqEntry) {
+                    return null; // server decides type
+                }
+            };
+    
+        try {
+            Hashtable parameters = new Hashtable();
+            parameters.put("work-directory", "work");
+            http.registerServlet(SERVLET_ALIAS, new CocoonServlet(), parameters, context);
+
+            registrations.put(sr, context);
+        } catch (Exception e) {
+            ((LogService)this.logTracker.getService()).log(LogService.LOG_ERROR,
+                                                           "Failed to register resource", e);
+        }
+    } 
+
+    private void unsetRoot(ServiceReference sr) {
+        if(!registrations.containsKey(sr)) {
+            return; // nothing to do
+        }
+
+        ((LogService)this.logTracker.getService()).log(LogService.LOG_INFO, "unset root for " + sr);
+    
+        HttpService http = (HttpService)bc.getService(sr);
+    
+        if(http != null) {
+            http.unregister(SERVLET_ALIAS);
+            bc.ungetService(sr);
+        }
+        registrations.remove(sr);
+    }
+
+}

Propchange: cocoon/whiteboard/osgi/bundles/cocoon_servlet/src/org/apache/cocoon/service/servlet/impl/Activator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml?rev=208999&r1=208998&r2=208999&view=diff
==============================================================================
--- cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml (original)
+++ cocoon/whiteboard/osgi/bundles/cocoon_testcase/build.xml Sun Jul  3 15:33:50 2005
@@ -27,7 +27,7 @@
 
   <property name="impl.pattern"          value="org/apache/cocoon/**"/>
   <property name="bundle.classpath"      value=".,cocoon-testcase.jar"/>
-  <property name="import.package"        value="junit.framework,org.knopflerfish.service.junit,org.apache.avalon.framework.context,org.apache.avalon.framework.logger,org.apache.avalon.framework.service,org.apache.cocoon,org.apache.cocoon.components.blocks,org.apache.cocoon.components.fam,org.apache.cocoon.components.modules.input,org.apache.cocoon.components.pipeline.impl,org.apache.cocoon.components.source.impl,org.apache.cocoon.components.treeprocessor,org.apache.cocoon.core,org.apache.cocoon.core.container,org.apache.cocoon.environment,org.apache.cocoon.environment.impl,org.apache.cocoon.generation,org.apache.cocoon.matching,org.apache.cocoon.reading,org.apache.cocoon.serialization,org.apache.cocoon.components.source,org.apache.cocoon.transformation,org.apache.cocoon.util,org.apache.cocoon.util.log,org.apache.avalon.excalibur.logger,org.apache.excalibur.source,org.apache.excalibur.source.impl,org.apache.excalibur.xml.impl,org.apache.excalibur.xmlizer,org.apache.log"/>
+  <property name="import.package"        value="junit.framework,org.knopflerfish.service.junit,org.apache.avalon.framework.context,org.apache.avalon.framework.logger,org.apache.avalon.framework.service,org.apache.cocoon,org.apache.cocoon.components.blocks,org.apache.cocoon.components.classloader,org.apache.cocoon.components.fam,org.apache.cocoon.components.modules.input,org.apache.cocoon.components.pipeline.impl,org.apache.cocoon.components.source.impl,org.apache.cocoon.components.treeprocessor,org.apache.cocoon.components.treeprocessor.sitemap,org.apache.cocoon.core,org.apache.cocoon.core.container,org.apache.cocoon.environment,org.apache.cocoon.environment.impl,org.apache.cocoon.generation,org.apache.cocoon.matching,org.apache.cocoon.reading,org.apache.cocoon.serialization,org.apache.cocoon.components.source,org.apache.cocoon.transformation,org.apache.cocoon.util,org.apache.cocoon.util.log,org.apache.avalon.excalibur.logger,org.apache.excalibur.source,org.apache.excalibur.source.impl,org.apache.excalibur.xml.impl,org.apache.excalibur.xml.xslt,org.apache.excalibur.xmlizer,org.apache.log"/>
 
   <property name="do.bundle.custom.pre"  value="true"/>
 

Modified: cocoon/whiteboard/osgi/init.xargs
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/init.xargs?rev=208999&r1=208998&r2=208999&view=diff
==============================================================================
--- cocoon/whiteboard/osgi/init.xargs (original)
+++ cocoon/whiteboard/osgi/init.xargs Sun Jul  3 15:33:50 2005
@@ -18,7 +18,7 @@
 
 ## Some library bundles
 -initlevel 2
--install http://www.knopflerfish.org/releases/1.3.3/jars/jsdk/jsdk-2.2.jar
+-install cocoon/cocoon_all-1.0.0.jar
 
 ## HTTP Service
 -initlevel 4
@@ -33,11 +33,12 @@
 # JUnit
 -install ../jars-external/junit/junit_all-1.0.0.jar
 
--initlevel 8
--install cocoon/cocoon_all-1.0.0.jar
-
--initlevel 9
+-initlevel 7
 -install cocoon_testcase/cocoon_testcase-1.0.0.jar
+-install cocoon_webapp/cocoon_webapp-1.0.0.jar
+
+-initlevel 8
+-install cocoon_servlet/cocoon_servlet-1.0.0.jar
 
 -startlevel 9
 

Added: cocoon/whiteboard/osgi/jars-external/http/http_api-1.1.0.jar
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/jars-external/http/http_api-1.1.0.jar?rev=208999&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cocoon/whiteboard/osgi/jars-external/http/http_api-1.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cocoon/whiteboard/osgi/jars-external/log/log_api-1.0.0.jar
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/jars-external/log/log_api-1.0.0.jar?rev=208999&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cocoon/whiteboard/osgi/jars-external/log/log_api-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: cocoon/whiteboard/osgi/props.xargs
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/osgi/props.xargs?rev=208999&r1=208998&r2=208999&view=diff
==============================================================================
--- cocoon/whiteboard/osgi/props.xargs (original)
+++ cocoon/whiteboard/osgi/props.xargs Sun Jul  3 15:33:50 2005
@@ -16,7 +16,7 @@
 # Various debug flags
 -Dorg.knopflerfish.framework.debug.packages=false
 -Dorg.knopflerfish.framework.debug.errors=true
--Dorg.knopflerfish.framework.debug.classloader=false
+-Dorg.knopflerfish.framework.debug.classloader=true
 -Dorg.knopflerfish.framework.debug.startlevel=false
 -Dorg.knopflerfish.framework.debug.ldap=false