incubator-aries-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lin...@apache.org
Subject svn commit: r886314 - in /incubator/aries/trunk: blueprint/blueprint-core/ blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/ util/src/main/java/org/a...
Date Wed, 02 Dec 2009 21:35:07 GMT
Author: linsun
Date: Wed Dec  2 21:35:07 2009
New Revision: 886314

URL: http://svn.apache.org/viewvc?rev=886314&view=rev
Log:
ARIES-64 Have blueprint extender process bundles associated with composite bundle when detecting
the CompositeBundleFactory service + itest for this

Added:
    incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
  (with props)
Modified:
    incubator/aries/trunk/blueprint/blueprint-core/pom.xml
    incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
    incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java
    incubator/aries/trunk/util/src/main/java/org/apache/aries/util/tracker/AriesBundleTrackerCustomizer.java

Modified: incubator/aries/trunk/blueprint/blueprint-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/pom.xml?rev=886314&r1=886313&r2=886314&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/pom.xml (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/pom.xml Wed Dec  2 21:35:07 2009
@@ -52,6 +52,11 @@
           <scope>provided</scope>
       </dependency>
       <dependency>
+          <groupId>org.eclipse</groupId>
+          <artifactId>osgi</artifactId>
+          <scope>provided</scope>
+      </dependency>
+      <dependency>
           <groupId>org.apache.servicemix.bundles</groupId>
           <artifactId>org.apache.servicemix.bundles.cglib</artifactId>
           <optional>true</optional>
@@ -92,7 +97,7 @@
                         <Export-Package>
                             org.apache.aries.blueprint*;version="${pom.version}"
                         </Export-Package>
-                        <Import-Package>!org.apache.aries.blueprint*,org.apache.aries.util.tracker;resolution:=optional,*</Import-Package>
+                        <Import-Package>!org.apache.aries.blueprint*,org.apache.aries.util.tracker;resolution:=optional,org.osgi.service.framework;resolution:=optional,*</Import-Package>
                         <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
                         <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Bundle-DocURL</_removeheaders>
                     </instructions>

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java?rev=886314&r1=886313&r2=886314&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
(original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
Wed Dec  2 21:35:07 2009
@@ -45,6 +45,7 @@
 import org.osgi.framework.SynchronousBundleListener;
 import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.osgi.service.blueprint.container.BlueprintEvent;
+import org.osgi.service.framework.CompositeBundle;
 import org.osgi.util.tracker.BundleTracker;
 import org.osgi.util.tracker.BundleTrackerCustomizer;
 import org.slf4j.Logger;
@@ -86,22 +87,42 @@
         bt.open();
         
         Bundle[] bundles = context.getBundles();
+        checkAllBundles(bundles, sr);
+
+        LOGGER.debug("Blueprint extender started");
+    }
+
+
+    /**
+     *  this method check all bundles. if the sr is null, then we only check
+     *  bundles within the current bundle context where this bundle resides.  
+     *  if sr is not null, then we also check the bundles inside the child frameworks
+     *  that are associated with composite bundles 
+     * @param bundles  bundles to be checked
+     * @param sr       Service reference for the composite bundle factory service
+     */
+    private void checkAllBundles(Bundle[] bundles, ServiceReference sr) {
         for (Bundle b : bundles) {
-            // If the bundle is active, check it
-            if (b.getState() == Bundle.ACTIVE) {
-                checkBundle(b);
-            // Also check bundles in the starting state with a lazy activation policy
-            } else if (b.getState() == Bundle.STARTING) {
-                String activationPolicyHeader = (String) b.getHeaders().get(Constants.BUNDLE_ACTIVATIONPOLICY);
-                if (activationPolicyHeader != null && activationPolicyHeader.startsWith(Constants.ACTIVATION_LAZY))
{
+            if (sr != null && (b instanceof CompositeBundle)) {
+                // let's check bundles associated with the composite bundle
+                CompositeBundle cb = (CompositeBundle)b;
+                Bundle[] buns = cb.getCompositeFramework().getBundleContext().getBundles();
+                checkAllBundles(buns, sr);
+            } else {
+                // If the bundle is active, check it
+                if (b.getState() == Bundle.ACTIVE) {
                     checkBundle(b);
+                // Also check bundles in the starting state with a lazy activation policy
+                } else if (b.getState() == Bundle.STARTING) {
+                    String activationPolicyHeader = (String) b.getHeaders().get(Constants.BUNDLE_ACTIVATIONPOLICY);
+                    if (activationPolicyHeader != null && activationPolicyHeader.startsWith(Constants.ACTIVATION_LAZY))
{
+                        checkBundle(b);
+                    }
                 }
             }
         }
-        LOGGER.debug("Blueprint extender started");
     }
-
-
+    
     public void stop(BundleContext context) {
         LOGGER.debug("Stopping blueprint extender...");
         if (bt != null) {
@@ -362,12 +383,13 @@
         }
 
         public Object addingBundle(Bundle b, BundleEvent event) {
+
+            super.addingBundle(b, event);
             
             if (event == null) {
                 return null;
             }
-
-            super.addingBundle(b, event);
+            
             bundleChanged(event);
 
             return b;

Added: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java?rev=886314&view=auto
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
(added)
+++ incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
Wed Dec  2 21:35:07 2009
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.aries.blueprint.itests;
+
+import static org.junit.Assert.assertNotNull;
+import static org.ops4j.pax.exam.CoreOptions.equinox;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.ops4j.pax.exam.options.MavenArtifactProvisionOption;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.framework.CompositeBundle;
+import org.osgi.service.framework.CompositeBundleFactory;
+
+/**
+ * This test is based on the BlueprintContainerBTCustomizerTest.  but this test starts the
+ * blueprint sample before the blueprint bundle is started so going a slightly 
+ * different code path
+ *
+ */
+@RunWith(JUnit4TestRunner.class)
+public class BlueprintContainer2BTCustomizerTest extends AbstractIntegrationTest {
+
+    @Test
+    public void test() throws Exception {
+        // Create a config to check the property placeholder
+        ConfigurationAdmin ca = getOsgiService(ConfigurationAdmin.class);
+        Configuration cf = ca.getConfiguration("blueprint-sample-placeholder", null);
+        Hashtable props = new Hashtable();
+        props.put("key.b", "10");
+        cf.update(props);
+
+        
+        ServiceReference sr = bundleContext.getServiceReference("org.osgi.service.framework.CompositeBundleFactory");
+        if (sr != null) {
+             // install blueprint.sample into the composite context
+            CompositeBundleFactory cbf = (CompositeBundleFactory)bundleContext.getService(sr);
+            
+            Map<String, String> frameworkConfig = new HashMap<String, String>();
+            // turn on the line below to enable telnet localhost 10000 to the child framework
osgi console
+            // frameworkConfig.put("osgi.console", "10000");
+            
+            // construct composite bundle information
+            Map<String, String> compositeManifest = new HashMap<String, String>();
+            compositeManifest.put(Constants.BUNDLE_SYMBOLICNAME, "test-composite");
+            compositeManifest.put(Constants.BUNDLE_VERSION, "1.0.0");
+            // this import-package is used by the blueprint.sample
+            compositeManifest.put(Constants.IMPORT_PACKAGE, "org.osgi.service.blueprint.container");
+            // this export-package is used by pax junit runner as it needs to see the blueprint
sample package 
+            // for the test after the blueprint sample is started.
+            compositeManifest.put(Constants.EXPORT_PACKAGE, "org.apache.aries.blueprint.sample");
+            
+            CompositeBundle cb = cbf.installCompositeBundle(frameworkConfig, "test-composite",
compositeManifest);
+
+            BundleContext compositeBundleContext = cb.getCompositeFramework().getBundleContext();
+            // install the blueprint sample onto the framework associated with the composite
bundle
+            MavenArtifactProvisionOption mapo = CoreOptions.mavenBundle().groupId("org.apache.aries.blueprint").artifactId("org.apache.aries.blueprint.sample").version(
"1.0.0-incubating-SNAPSHOT");
+            // let's use input stream to avoid invoking mvn url handler which isn't avail
in the child framework.
+            InputStream is = new URL(mapo.getURL()).openStream();
+            Bundle bundle = compositeBundleContext.installBundle(mapo.getURL(), is);
+            assertNotNull(bundle);
+            
+            // start the composite bundle then the blueprint sample
+            cb.start();
+            bundle.start();
+            
+            // start the blueprint bundle and it should detect the previously started blueprint
sample
+            Bundle blueprintBundle = getInstalledBundle("org.apache.aries.blueprint");
+            blueprintBundle.start();
+            //Thread.sleep(5000);
+
+            // do the test
+            testBlueprintContainer(compositeBundleContext, bundle);
+            
+        }
+    }
+
+    @org.ops4j.pax.exam.junit.Configuration
+    public static Option[] configuration() {
+        Option[] options = options(
+            // Log
+            mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
+            mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
+            // Felix Config Admin
+            mavenBundle("org.apache.felix", "org.apache.felix.configadmin"),
+            // Felix mvn url handler
+            mavenBundle("org.ops4j.pax.url", "pax-url-mvn"),
+
+
+            // this is how you set the default log level when using pax logging (logProfile)
+            systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
+
+            // Bundles
+            mavenBundle("org.apache.aries", "org.apache.aries.util"),
+            mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint").noStart(),
+            // don't install the blueprint sample here as it will be installed onto the same
framework as the blueprint core bundle
+            // mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint.sample").noStart(),
+            mavenBundle("org.osgi", "org.osgi.compendium"),
+            // org.ops4j.pax.exam.container.def.PaxRunnerOptions.vmOption("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"),
+
+            equinox().version("3.5.0")
+        );
+        options = updateOptions(options);
+        return options;
+    }
+
+}

Propchange: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java?rev=886314&r1=886313&r2=886314&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java
(original)
+++ incubator/aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java
Wed Dec  2 21:35:07 2009
@@ -95,7 +95,6 @@
             
             // start the composite bundle then the blueprint sample
             cb.start();
-            Thread.sleep(5000);
             bundle.start();
 
             // do the test

Modified: incubator/aries/trunk/util/src/main/java/org/apache/aries/util/tracker/AriesBundleTrackerCustomizer.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/util/src/main/java/org/apache/aries/util/tracker/AriesBundleTrackerCustomizer.java?rev=886314&r1=886313&r2=886314&view=diff
==============================================================================
--- incubator/aries/trunk/util/src/main/java/org/apache/aries/util/tracker/AriesBundleTrackerCustomizer.java
(original)
+++ incubator/aries/trunk/util/src/main/java/org/apache/aries/util/tracker/AriesBundleTrackerCustomizer.java
Wed Dec  2 21:35:07 2009
@@ -55,27 +55,40 @@
             List<BundleTracker> btList = BundleTrackerFactory
                     .getBundleTrackerList(bundleScope);
 
-            if (event.getType() == BundleEvent.STOPPING) {
-                // if CompositeBundle is being stopped, let's remove the bundle
-                // tracker(s) associated with the composite bundle
-                if (btList != null) {
-                    // unregister the bundlescope off the factory and close
-                    // bundle trackers
-                    BundleTrackerFactory
-                            .unregisterAndCloseBundleTracker(bundleScope);
+            // bundle is already active and there is no event associated
+            // this can happen when bundle is first time added to the tracker
+            if (event == null) {
+                if (b.getState() == Bundle.ACTIVE) {
+                    openTracker(b, bundleScope, stateMask);
+                }
+            } else {
+                if (event.getType() == BundleEvent.STOPPING) {
+                    // if CompositeBundle is being stopped, let's remove the bundle
+                    // tracker(s) associated with the composite bundle
+                    if (btList != null) {
+                        // unregister the bundlescope off the factory and close
+                        // bundle trackers
+                        BundleTrackerFactory
+                                .unregisterAndCloseBundleTracker(bundleScope);
+                    }
+                } else if (event.getType() == BundleEvent.STARTING) {
+                    openTracker(b, bundleScope, stateMask);
                 }
-            } else if (event.getType() == BundleEvent.STARTING) {
-                // let's process each of the bundle in the CompositeBundle
-                CompositeBundle cb = (CompositeBundle) b;
-                BundleContext compositeBundleContext = cb
-                        .getCompositeFramework().getBundleContext();
-
-                // let's track each of the bundle in the CompositeBundle
-                BundleTracker bt = new BundleTracker(compositeBundleContext,
-                        stateMask, this);
-                bt.open();
-                BundleTrackerFactory.registerBundleTracker(bundleScope, bt);
             }
         }
     }
+        
+     private void openTracker(Bundle b, String bundleScope, int stateMask) {
+         // let's process each of the bundle in the CompositeBundle
+         CompositeBundle cb = (CompositeBundle) b;
+         BundleContext compositeBundleContext = cb
+                 .getCompositeFramework().getBundleContext();
+
+         // let's track each of the bundle in the CompositeBundle
+         BundleTracker bt = new BundleTracker(compositeBundleContext,
+                 stateMask, this);
+         bt.open();
+         BundleTrackerFactory.registerBundleTracker(bundleScope, bt);
+     }
+     
 }



Mime
View raw message