Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/io.reactivex.rxjava/io.reactivex.rxjava-2.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.configadmin/org.apache.felix.configadmin-1.8.4.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.configadmin/org.apache.felix.configadmin-1.8.4.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.configadmin/org.apache.felix.configadmin-1.8.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.annotation/org.apache.felix.dependencymanager.annotation-4.0.3.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.annotation/org.apache.felix.dependencymanager.annotation-4.0.3.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.annotation/org.apache.felix.dependencymanager.annotation-4.0.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.runtime/org.apache.felix.dependencymanager.runtime-4.0.2.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.runtime/org.apache.felix.dependencymanager.runtime-4.0.2.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.runtime/org.apache.felix.dependencymanager.runtime-4.0.2.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.3.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.3.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.eventadmin/org.apache.felix.eventadmin-1.4.3.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.eventadmin/org.apache.felix.eventadmin-1.4.3.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.eventadmin/org.apache.felix.eventadmin-1.4.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.http.api/org.apache.felix.http.api-2.3.0.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.http.api/org.apache.felix.http.api-2.3.0.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.http.api/org.apache.felix.http.api-2.3.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.http.servlet-api/org.apache.felix.http.servlet-api-1.0.0.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.http.servlet-api/org.apache.felix.http.servlet-api-1.0.0.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.apache.felix.http.servlet-api/org.apache.felix.http.servlet-api-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.reactivestreams.reactive-streams/org.reactivestreams.reactive-streams-1.0.0.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.reactivestreams.reactive-streams/org.reactivestreams.reactive-streams-1.0.0.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/localrepo/org.reactivestreams.reactive-streams/org.reactivestreams.reactive-streams-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml.sha
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml.sha?rev=1719841&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml.sha 
(added)
+++ felix/sandbox/pderop/dependencymanager-lambda/cnf/releaserepo/index.xml.sha 
Sun Dec 13 22:23:57 2015
@@ -0,0 +1 @@
+262a924c4164db96f2409bfbe8d20793eb0c91a51c3dcd7c2160cde2bac8a492
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager-lambda/cnf/src/.gitignore
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/cnf/src/.gitignore?rev=1719841&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/dependencymanager-lambda/gradle.properties
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/gradle.properties?rev=1719841&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-lambda/gradle.properties (added)
+++ felix/sandbox/pderop/dependencymanager-lambda/gradle.properties Sun Dec 13 
22:23:57 2015
@@ -0,0 +1,14 @@
+# cnf project name
+bnd_cnf=cnf
+
+# bnd_jar can also be a URL.
+bnd_jar=cnf/gradle/biz.aQute.bnd.gradle.jar
+
+# bnd_build can be set to the name of a "master" project whose dependencies 
will seed the set of projects to build.
+bnd_build=
+
+# Default gradle task to build
+bnd_defaultTask=build
+
+# This should be false. It only needs to be true in rare cases.
+bnd_preCompileRefresh=false

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.classpath
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.classpath?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.classpath
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.gitignore
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.gitignore?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.gitignore
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.gitignore
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,2 @@
+/bin/
+/generated/

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.project
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.project?rev=1719841&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/.project
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/bnd.bnd
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,29 @@
+-buildpath: \
+       org.apache.felix.dependencymanager;version=4.1,\
+       org.apache.felix.dependencymanager.shell;version=4.0,\
+       org.apache.felix.gogo.runtime;version=0.12,\
+       org.apache.felix.dependencymanager.lambda;version=latest,\
+       ${junit},\
+       osgi.core;version=5.0,\
+       osgi.cmpn;version=5.0
+-runbundles: \
+       org.apache.felix.metatype;version=1.0.10,\
+       org.apache.felix.gogo.runtime;version=0.12.1,\
+       org.apache.felix.log;version=1.0.1,\
+       org.apache.felix.dependencymanager;version=4.2.0,\
+       org.apache.felix.dependencymanager.shell;version=4.0.1,\
+       org.apache.felix.configadmin;version=1.8.4,\
+       org.apache.felix.dependencymanager.lambda;version=latest,\
+       biz.aQute.junit;version=1.3.0
+-runee: JavaSE-1.8
+-runfw: org.apache.felix.framework;version='[5.2.0,5.2.0]'
+-runvm: -ea
+Bundle-Version: 0.0.0.${tstamp}
+Private-Package:  \
+       org.apache.felix.dm.builder.lambda.itest
+Test-Cases:  \
+       ${classes;CONCRETE;EXTENDS;junit.framework.TestCase}
+javac.source:          1.8
+javac.target:          1.8
+-tester: biz.aQute.junit
+

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/AbstractServiceDependencyTest.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,101 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import static 
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class AbstractServiceDependencyTest extends TestBase {
+   public void testAbstractClassDependency() {
+       DependencyManager m = getDM();
+       // helper class that ensures certain steps get executed in sequence
+       Ensure e = new Ensure();
+       // create a service provider and consumer
+       Component sp = component(m, comp -> comp
+                  .autoAdd(false).provides(ServiceAbstract.class).impl(new 
ServiceProvider(e)));
+       
+       Component sc = component(m, comp -> comp
+                  .autoAdd(false).impl(new ServiceConsumer(e))
+                  .withService(ServiceAbstract.class, srv -> 
srv.onAdd(ServiceConsumer::bind).onRemove(ServiceConsumer::unbind)));
+       m.add(sp);
+       m.add(sc);
+       m.remove(sp);
+       // ensure we executed all steps inside the component instance
+       e.step(8);
+       m.clear();
+   }
+
+   static abstract class ServiceAbstract {
+       public abstract void invoke();
+   }
+
+   static class ServiceProvider extends ServiceAbstract {
+       private final Ensure m_ensure;
+       public ServiceProvider(Ensure e) {
+           m_ensure = e;
+       }
+
+       public void start() {
+           m_ensure.step(1);
+       }
+
+       public void invoke() {
+           m_ensure.step(4);
+       }
+
+       public void stop() {
+           m_ensure.step(7);
+       }
+   }
+
+   static class ServiceConsumer {
+       private volatile ServiceAbstract m_service;
+       private final Ensure m_ensure;
+
+       public ServiceConsumer(Ensure e) {
+           m_ensure = e;
+       }
+
+       public void bind(ServiceAbstract service) {
+           m_ensure.step(2);
+           m_service = service;
+       }
+
+       public void start() {
+           m_ensure.step(3);
+           m_service.invoke();
+       }
+
+       public void stop() {
+           m_ensure.step(5);
+       }
+
+       public void unbind(ServiceAbstract service) {
+           System.out.println("UNBINDDDDDDDDDDDDDDDDDDDDDDDDDDD");
+           Assert.assertEquals(m_service, service);
+           m_ensure.step(6);
+       }
+   }
+}
\ No newline at end of file

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ComponentTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ComponentTest.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ComponentTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ComponentTest.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,93 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import static 
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import java.util.Map;
+
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Assert;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class ComponentTest extends TestBase {
+    private final Ensure m_ensure = new Ensure();
+    
+    public void testSimple() throws Exception {
+        final DependencyManager dm = getDM();
+
+        java.util.function.Consumer<Provider> cons = (p) -> 
System.out.println("Injected provider: " + p);
+
+        // Create consumer (dependency is required by default using builder 
api).
+        component(dm, comp -> comp
+                       .factory(Consumer::new)
+                       .withService(Provider.class, srv -> 
srv.filter("(name=provider2)").onAdd(cons::accept).onAdd(Consumer::add).onRemove(Consumer::remove))
+                       .withService(Provider.class, srv -> 
srv.filter("(name=provider1)").autoConfig("m_autoConfiguredProvider")));
+                
+        // Create providers (auto added to dependency manager)
+        component(dm, comp -> comp
+                       .impl(new Provider() { public String toString() { 
return "provider1";}})
+                       .provides(Provider.class).properties("name", 
"provider1"));
+                       
+        component(dm, comp -> comp
+                       .impl(new Provider() { public String toString() { 
return "provider2";}})
+                       .provides(Provider.class).properties("name", 
"provider2"));
+                       
+        m_ensure.waitForStep(2, 5000);
+        dm.clear();
+        m_ensure.waitForStep(5, 5000);
+    }
+    
+    public static interface Provider {         
+    }
+    
+    public class Consumer {
+        Provider m_provider;
+        Provider m_autoConfiguredProvider;
+        
+        @SuppressWarnings("rawtypes")
+               void add(Provider provider, Map props) {
+            Assert.assertNotNull(provider);
+            Assert.assertEquals("provider2", props.get("name"));
+            m_provider = provider;
+            m_ensure.step(1);
+        }
+        
+        void start() {
+            Assert.assertNotNull(m_autoConfiguredProvider);
+            Assert.assertEquals("provider1", 
m_autoConfiguredProvider.toString());
+            m_ensure.step(2);
+        }
+        
+        void stop() {
+            m_ensure.step(3);
+        }
+        
+        void destroy() {
+            m_ensure.step(4);
+        }
+        
+        void remove(Provider provider) {
+            Assert.assertEquals(m_provider, provider);
+            m_ensure.step(5);
+        }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/Ensure.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/Ensure.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/Ensure.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/Ensure.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,174 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import java.io.PrintStream;
+
+import org.junit.Assert;
+
+/**
+ * Helper class to make sure that steps in a test happen in the correct order. 
Instantiate
+ * this class and subsequently invoke <code>step(nr)</code> with steps 
starting at 1. You
+ * can also have threads wait until you arrive at a certain step.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class Ensure {
+    private final boolean DEBUG;
+    private static long INSTANCE = 0;
+    private static final int RESOLUTION = 100;
+    private static PrintStream STREAM = System.out;
+    int step = 0;
+    private Throwable m_throwable;
+    
+    public Ensure() {
+        this(true);
+    }
+    
+    public Ensure(boolean debug) {
+        DEBUG = debug;
+        if (DEBUG) {
+            INSTANCE++;
+        }
+    }
+
+    public void setStream(PrintStream output) {
+        STREAM = output;
+    }
+    
+    /**
+     * Mark this point as step <code>nr</code>.
+     * 
+     * @param nr the step we are in
+     */
+    public synchronized void step(int nr) {
+        step++;
+        Assert.assertEquals(nr, step);
+        if (DEBUG) {
+            String info = getLineInfo(3);
+            STREAM.println("[Ensure " + INSTANCE + "] step " + step + " [" + 
currentThread() + "] " + info);
+        }
+        notifyAll();
+    }
+
+    private String getLineInfo(int depth) {
+        StackTraceElement[] trace = Thread.currentThread().getStackTrace();
+        String info = trace[depth].getClassName() + "." + 
trace[depth].getMethodName() + ":" + trace[depth].getLineNumber();
+        return info;
+    }
+    
+    /**
+     * Mark this point as the next step.
+     */
+    public synchronized void step() {
+        step++;
+        if (DEBUG) {
+            String info = getLineInfo(3);
+            STREAM.println("[Ensure " + INSTANCE + "] next step " + step + " 
[" + currentThread() + "] " + info);
+        }
+        notifyAll();
+    }
+
+    /**
+     * Wait until we arrive at least at step <code>nr</code> in the process, 
or fail if that
+     * takes more than <code>timeout</code> milliseconds. If you invoke wait 
on a thread,
+     * you are effectively assuming some other thread will invoke the 
<code>step(nr)</code>
+     * method.
+     * 
+     * @param nr the step to wait for
+     * @param timeout the number of milliseconds to wait
+     */
+    public synchronized void waitForStep(int nr, int timeout) {
+        final int initialTimeout = timeout;
+        if (DEBUG) {
+            String info = getLineInfo(3);
+            STREAM.println("[Ensure " + INSTANCE + "] waiting for step " + nr 
+ " [" + currentThread() + "] " + info);
+        }
+        while (step < nr && timeout > 0) {
+            try {
+                wait(RESOLUTION);
+                timeout -= RESOLUTION;
+            }
+            catch (InterruptedException e) {}
+        }
+        if (step < nr) {
+            throw new IllegalStateException("Timed out waiting for " + 
initialTimeout + " ms for step " + nr + ", we are still at step " + step);
+        }
+        if (DEBUG) {
+            String info = getLineInfo(3);
+            STREAM.println("[Ensure " + INSTANCE + "] arrived at step " + nr + 
" [" + currentThread() + "] " + info);
+        }
+    }
+    
+    private String currentThread() {
+        Thread thread = Thread.currentThread();
+        return thread.getId() + " " + thread.getName();
+    }
+    
+    public static Runnable createRunnableStep(final Ensure ensure, final int 
nr) {
+        return new Runnable() { public void run() { ensure.step(nr); }};
+    }
+    
+    public synchronized void steps(Steps steps) {
+        steps.next(this);
+    }
+    
+    /** 
+     * Helper class for naming a list of step numbers. If used with the 
steps(Steps) method
+     * you can define at which steps in time this point should be passed. That 
means you can
+     * check methods that will get invoked multiple times during a test.
+     */
+    public static class Steps {
+        private final int[] m_steps;
+        private int m_stepIndex;
+
+        /** 
+         * Create a list of steps and initialize the step counter to zero.
+         */
+        public Steps(int... steps) {
+            m_steps = steps;
+            m_stepIndex = 0;
+        }
+
+        /**
+         * Ensure we're at the right step. Will throw an index out of bounds 
exception if we enter this step more often than defined.
+         */
+        public void next(Ensure ensure) {
+            ensure.step(m_steps[m_stepIndex++]);
+        }
+    }
+
+    /**
+     * Saves a thrown exception that occurred in a different thread. You can 
only save one exception
+     * at a time this way.
+     */
+    public synchronized void throwable(Throwable throwable) {
+        m_throwable = throwable;
+    }
+
+    /**
+     * Throws a <code>Throwable</code> if one occurred in a different thread 
and that thread saved it
+     * using the <code>throwable()</code> method.
+     */
+    public synchronized void ensure() throws Throwable {
+        if (m_throwable != null) {
+            throw m_throwable;
+        }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ResourceProvider.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ResourceProvider.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ResourceProvider.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ResourceProvider.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,122 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import java.net.URL;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.apache.felix.dm.ResourceHandler;
+import org.apache.felix.dm.ResourceUtil;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+class ResourceProvider {
+       final URL[] m_resources;
+    final BundleContext m_context;
+    final Map<ResourceHandler, Filter> m_handlers = new HashMap<>();
+
+       ResourceProvider(BundleContext ctx, URL ... resources) {
+               m_context = ctx;
+               m_resources = resources;
+       }
+       
+    public void change() {
+        for (int i = 0; i < m_resources.length; i++) {
+               change(i);
+        }      
+    }
+    
+    @SuppressWarnings({ "deprecation", "unchecked" })
+       public void change(int resourceIndex) {
+        Map<ResourceHandler, Filter> handlers = new HashMap<>();
+        synchronized (m_handlers) {
+            handlers.putAll(m_handlers);
+        }
+        for (Map.Entry<ResourceHandler, Filter> e : handlers.entrySet()) {
+               ResourceHandler handler = e.getKey();
+               Filter filter = e.getValue();
+               if (filter == null || filter.match((Dictionary<String, ? 
>)ResourceUtil.createProperties(m_resources[resourceIndex]))) {
+                       handler.changed(m_resources[resourceIndex]);
+            }
+        }
+    }
+
+    @SuppressWarnings({ "deprecation", "unchecked" })
+       public void add(ResourceHandler handler, 
ServiceReference<ResourceHandler> ref) {
+        String filterString = (String) ref.getProperty("filter");
+        Filter filter = null;
+        if (filterString != null) {
+            try {
+                filter = m_context.createFilter(filterString);
+            }
+            catch (InvalidSyntaxException e) {
+                Assert.fail("Could not create filter for resource handler: " + 
e);
+                return;
+            }
+        }
+        for (int i = 0; i < m_resources.length; i++) {
+            if (filter == null || filter.match((Dictionary<String, ? >) 
ResourceUtil.createProperties(m_resources[i]))) {
+                synchronized (m_handlers) {
+                    m_handlers.put(handler, filter);
+                }
+                handler.added(m_resources[i]);
+            }
+        }
+    }
+
+    public void remove(ResourceHandler handler, 
ServiceReference<ResourceHandler> ref) {
+        Filter filter;
+        synchronized (m_handlers) {
+            filter = (Filter) m_handlers.remove(handler);
+        }
+        if (filter != null) {
+               removeResources(handler, filter);
+        }
+    }
+
+    @SuppressWarnings({ "deprecation", "unchecked" })
+       private void removeResources(ResourceHandler handler, Filter filter) {
+            for (int i = 0; i < m_resources.length; i++) {
+                if (filter == null || filter.match((Dictionary<String, ? 
>)ResourceUtil.createProperties(m_resources[i]))) {
+                    handler.removed(m_resources[i]);
+                }
+            }
+        }
+
+    public void destroy() {
+        Map<ResourceHandler, Filter> handlers = new HashMap<>();
+        synchronized (m_handlers) {
+            handlers.putAll(m_handlers);
+        }
+
+        for (Map.Entry<ResourceHandler, Filter> e : handlers.entrySet()) {
+            ResourceHandler handler = e.getKey();
+            Filter filter = e.getValue();
+            removeResources(handler, filter);
+        }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyTest.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyTest.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,97 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import static 
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class ServiceDependencyTest extends TestBase {
+    public void testServiceRegistrationAndConsumption() {
+        DependencyManager m = getDM();
+        // helper class that ensures certain steps get executed in sequence
+        Ensure e = new Ensure();
+        // create a service provider and consumer
+        Component sp = component(m, comp -> comp.autoAdd(false).impl(new 
ServiceProvider(e)).provides(ServiceInterface.class));
+        Component sc = component(m, comp -> comp.autoAdd(false).impl(new 
ServiceConsumer(e)).withService(ServiceInterface.class));
+                       
+        Component sc2 = component(m, comp -> comp.autoAdd(false).impl(new 
ServiceConsumerCallbacks(e))
+                       .withService(ServiceInterface.class, srv -> 
srv.required(false).onAdd(ServiceConsumerCallbacks::add).onRemove(ServiceConsumerCallbacks::remove)));
+
+        m.add(sp);
+        m.add(sc);
+        m.remove(sc);
+        m.add(sc2);
+        m.remove(sp);
+        m.remove(sc2);
+        // ensure we executed all steps inside the component instance
+        e.step(6);
+    }
+    
+    static interface ServiceInterface {
+        public void invoke();
+    }
+
+    static class ServiceProvider implements ServiceInterface {
+        private final Ensure m_ensure;
+        public ServiceProvider(Ensure e) {
+            m_ensure = e;
+        }
+        public void invoke() {
+            m_ensure.step(2);
+        }
+    }
+
+    static class ServiceConsumer {
+        private volatile ServiceInterface m_service;
+        private final Ensure m_ensure;
+
+        public ServiceConsumer(Ensure e) {
+            m_ensure = e;
+        }
+        
+        public void init() {
+            m_ensure.step(1);
+            m_service.invoke();
+        }
+        
+        public void destroy() {
+            m_ensure.step(3);
+        }
+    }
+
+    static class ServiceConsumerCallbacks {
+        private final Ensure m_ensure;
+
+        public ServiceConsumerCallbacks(Ensure e) {
+            m_ensure = e;
+        }
+        
+        public void add(ServiceInterface service) {
+            m_ensure.step(4);
+        }
+        public void remove(ServiceInterface service) {
+            m_ensure.step(5);
+        }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyThroughCallbackInstanceTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyThroughCallbackInstanceTest.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyThroughCallbackInstanceTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceDependencyThroughCallbackInstanceTest.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,83 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import org.junit.Assert;
+
+import static 
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class ServiceDependencyThroughCallbackInstanceTest extends TestBase {
+    public void testServiceWithCallbacksAndOneDependency() {
+        invokeTest(context, 1);
+    }
+    
+    public void testServiceWithCallbacksAndThreeDependencies() {
+        invokeTest(context, 3);
+    }
+
+    private void invokeTest(BundleContext context, int numberOfServices) {
+        DependencyManager m = getDM();
+        // create a number of services
+               for (int i = 0; i < numberOfServices; i++) {
+                       final int num = i;
+                       component(m, comp -> comp
+                                       .provides(Service.class).impl(new 
Service() {
+                                               public String toString() {
+                                                       return "A" + num;
+                                               }}));
+               }
+
+               // create a service with dependency which will be invoked on a 
callback instance
+               CallbackInstance instance = new CallbackInstance();
+               component(m, comp -> comp
+                               .impl(new SimpleService() {})
+                               .withService(Service.class, srv -> 
srv.onAdd(instance::added).onRemove(instance::removed)));
+               
+               Assert.assertEquals(numberOfServices, instance.getCount());
+               m.clear();
+    }
+    
+    public static interface Service {
+    }
+    
+    public static interface SimpleService {
+    }
+    
+    public static class CallbackInstance {
+       int m_count = 0;
+
+       void added(Service service) {
+           System.out.println("added " + service);
+               m_count++;
+       }
+       
+       void removed(Service service) {
+       }       
+       
+       int getCount() {
+               return m_count;
+       }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUpdateTest.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUpdateTest.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUpdateTest.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUpdateTest.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,147 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import static 
org.apache.felix.dm.builder.lambda.DependencyActivatorBase.component;
+
+import java.net.URL;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Properties;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.ResourceHandler;
+
+/**
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class ServiceUpdateTest extends TestBase {
+    public void testServiceUpdate() throws Exception {
+        final DependencyManager m = getDM();
+        // helper class that ensures certain steps get executed in sequence
+        Ensure e = new Ensure();
+        // create a resource provider
+        ResourceProvider provider = new ResourceProvider(context, new 
URL("file://localhost/path/to/file1.txt"));        
+        // activate it
+        component(m, comp -> comp
+                       .impl(new ServiceProvider(e))
+                       .withService(ServiceInterface.class, srv -> srv
+                                       
.onAdd(ServiceProvider::add).onChange(ServiceProvider::change).onRemove(ServiceProvider::remove)));
+        component(m, comp -> comp
+                       .impl(provider)
+                       .withService(ResourceHandler.class, srv -> 
srv.onAdd(ResourceProvider::add).onRemove(ResourceProvider::remove)));
+               
+        // TODO implement resource adapters in new builder API and use it for 
the following resource adapter.
+        
+        // create a resource adapter for our single resource
+        // note that we can provide an actual implementation instance here 
because there will be only one
+        // adapter, normally you'd want to specify a Class here
+        CallbackInstance callbackInstance = new CallbackInstance(e);
+        Hashtable<String, String> serviceProps = new Hashtable<String, 
String>();
+        serviceProps.put("number", "1");
+        Component component = 
m.createResourceAdapterService("(&(path=/path/to/*.txt)(host=localhost))", 
false, callbackInstance, "changed")
+            .setImplementation(new ResourceAdapter(e))
+            .setInterface(ServiceInterface.class.getName(), serviceProps)
+            .setCallbacks(callbackInstance, "init", "start", "stop", 
"destroy");
+        m.add(component);
+        // wait until the single resource is available
+        e.waitForStep(1, 5000);
+        // wait until the component gets the dependency injected
+        e.waitForStep(2, 5000);
+        // trigger a 'change' in our resource
+        provider.change();
+        // wait until the changed callback is invoked
+        e.waitForStep(3, 5000);        
+        // wait until the changed event arrived at the component
+        e.waitForStep(4, 5000);
+        System.out.println("Done!");
+     }
+    
+    static class ResourceAdapter implements ServiceInterface {
+        protected URL m_resource; // injected by reflection.
+        
+        ResourceAdapter(Ensure e) {
+        }
+
+        public void invoke() {
+            // TODO Auto-generated method stub
+            
+        }
+    }
+        
+    static interface ServiceInterface {
+        public void invoke();
+    }
+
+    static class ServiceProvider {
+        private final Ensure m_ensure;
+        public ServiceProvider(Ensure e) {
+            m_ensure = e;
+        }
+        void add(ServiceInterface i) {
+            m_ensure.step(2);
+        }
+        void change(ServiceInterface i) {
+            System.out.println("Change...");
+            m_ensure.step(4);
+        }
+        void remove(ServiceInterface i) {
+            System.out.println("Remove...");
+        }
+    }    
+    
+    static class CallbackInstance {
+        private final Ensure m_ensure;
+        public CallbackInstance(Ensure e) {
+            m_ensure = e;
+        }
+        
+        void init() {
+            System.out.println("init");
+        }
+        void start() {
+            System.out.println("start");
+            m_ensure.step(1);
+        }
+        void stop() {
+            System.out.println("stop");
+        }
+        void destroy() {
+            System.out.println("destroy");
+        }
+        void changed(Component component) {
+            System.out.println("resource changed");
+            m_ensure.step(3);
+            
+            Properties newProps = new Properties();
+            // update the component's service properties
+            Dictionary<String, String> dict = component.getServiceProperties();
+            Enumeration<String> e = dict.keys();
+            while (e.hasMoreElements()) {
+                String key = e.nextElement();
+                String value = dict.get(key);
+                newProps.setProperty(key, value);
+            }
+            newProps.setProperty("new-property", "2");
+            component.getServiceRegistration().setProperties(newProps);
+        }
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUtil.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUtil.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUtil.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/ServiceUtil.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,176 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import java.util.List;
+
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * OSGi service utilities (copied from dependency manager implementation).
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public class ServiceUtil {
+    /**
+     * Returns the service ranking of a service, based on its service 
reference. If
+     * the service has a property specifying its ranking, that will be 
returned. If
+     * not, the default ranking of zero will be returned.
+     * 
+     * @param ref the service reference to determine the ranking for
+     * @return the ranking
+     */
+    public static int getRanking(ServiceReference ref) {
+        return getRankingAsInteger(ref).intValue();
+    }
+    
+    /**
+     * Returns the service ranking of a service, based on its service 
reference. If
+     * the service has a property specifying its ranking, that will be 
returned. If
+     * not, the default ranking of zero will be returned.
+     * 
+     * @param ref the service reference to determine the ranking for
+     * @return the ranking
+     */
+    public static Integer getRankingAsInteger(ServiceReference ref) {
+        Integer rank = (Integer) ref.getProperty(Constants.SERVICE_RANKING);
+        if (rank != null) {
+            return rank;
+        }
+        return new Integer(0);
+    }
+    
+    /**
+     * Returns the service ID of a service, based on its service reference. 
This
+     * method is aware of service aspects as defined by the dependency manager 
and
+     * will return the ID of the orginal service if you give it an aspect.
+     * 
+     * @param ref the service reference to determine the service ID of
+     * @return the service ID
+     */
+    public static long getServiceId(ServiceReference ref) {
+        return getServiceIdAsLong(ref).longValue();
+    }
+    
+    /**
+     * Returns the service ID of a service, based on its service reference. 
This
+     * method is aware of service aspects as defined by the dependency manager 
and
+     * will return the ID of the orginal service if you give it an aspect.
+     * 
+     * @param ref the service reference to determine the service ID of
+     * @return the service ID
+     */
+    public static Long getServiceIdAsLong(ServiceReference ref) {
+       return getServiceIdObject(ref);
+    }
+    
+    public static Long getServiceIdObject(ServiceReference ref) {
+        Long aid = (Long) ref.getProperty(DependencyManager.ASPECT);
+        if (aid != null) {
+            return aid;
+        }
+        Long sid = (Long) ref.getProperty(Constants.SERVICE_ID);
+        if (sid != null) {
+            return sid;
+        }
+        throw new IllegalArgumentException("Invalid service reference, no 
service ID found");
+    }
+
+    /**
+     * Determines if the service is an aspect as defined by the dependency 
manager.
+     * Aspects are defined by a property and this method will check for its 
presence.
+     * 
+     * @param ref the service reference
+     * @return <code>true</code> if it's an aspect, <code>false</code> 
otherwise
+     */
+    public static boolean isAspect(ServiceReference ref) {
+        Long aid = (Long) ref.getProperty(DependencyManager.ASPECT);
+        return (aid != null);
+    }
+    
+    /**
+     * Converts a service reference to a string, listing both the bundle it was
+     * registered from and all properties.
+     * 
+     * @param ref the service reference
+     * @return a string representation of the service
+     */
+    public static String toString(ServiceReference ref) {
+        if (ref == null) {
+            return "ServiceReference[null]";
+        }
+        else {
+            StringBuffer buf = new StringBuffer();
+            Bundle bundle = ref.getBundle();
+            if (bundle != null) {
+                buf.append("ServiceReference[");
+                buf.append(bundle.getBundleId());
+                buf.append("]{");
+            }
+            else {
+                buf.append("ServiceReference[unregistered]{");
+            }
+            buf.append(propertiesToString(ref, null));
+            buf.append("}");
+            return buf.toString();
+        }
+    }
+    
+    /**
+     * Converts the properties of a service reference to a string.
+     * 
+     * @param ref the service reference
+     * @param exclude a list of properties to exclude, or <code>null</code> to 
show everything
+     * @return a string representation of the service properties
+     */
+    public static String propertiesToString(ServiceReference ref, List<String> 
exclude) {
+        StringBuffer buf = new StringBuffer();
+        String[] keys = ref.getPropertyKeys();
+        for (int i = 0; i < keys.length; i++) {
+            if (i > 0) { 
+                buf.append(','); 
+            }
+            buf.append(keys[i]);
+            buf.append('=');
+            Object val = ref.getProperty(keys[i]);
+            if (exclude == null || !exclude.contains(val)) {
+                if (val instanceof String[]) {
+                    String[] valArray = (String[]) val;
+                    StringBuffer valBuf = new StringBuffer();
+                    valBuf.append('{');
+                    for (int j = 0; j < valArray.length; j++) {
+                        if (valBuf.length() > 1) {
+                            valBuf.append(',');
+                        }
+                        valBuf.append(valArray[j].toString());
+                    }
+                    valBuf.append('}');
+                    buf.append(valBuf);
+                }
+                else {
+                    buf.append(val.toString());
+                }
+            }
+        }
+        return buf.toString();
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/TestBase.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/TestBase.java?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/TestBase.java
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/src/org/apache/felix/dm/builder/lambda/itest/TestBase.java
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,354 @@
+/*
+ * 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.felix.dm.builder.lambda.itest;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Hashtable;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.Assert;
+import junit.framework.TestCase;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.ComponentExecutorFactory;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.log.LogService;
+
+/**
+ * Base class for all integration tests.
+ * 
+ * @author <a href="mailto:[email protected]";>Felix Project Team</a>
+ */
+public abstract class TestBase extends TestCase implements LogService, 
FrameworkListener {
+    // Default OSGI log service level.
+    protected final static int LOG_LEVEL = LogService.LOG_WARNING;
+    
+    // optional thread pool used by parallel dependency managers
+    private volatile ExecutorService m_threadPool;
+    
+    // flag used to check if the threadpool must be used for a given test.
+    protected volatile boolean m_parallel;
+        
+    // Flag used to check if some errors have been logged during the execution 
of a given test.
+    private volatile boolean m_errorsLogged;
+
+    // We implement OSGI log service.
+    protected ServiceRegistration logService;
+    
+    // Our bundle context
+    protected BundleContext context;
+
+    // Our dependency manager used to create test components.
+    protected volatile DependencyManager m_dm;
+
+    // The Registration for the DM threadpool.
+    private ServiceRegistration m_componentExecutorFactoryReg;
+
+    public TestBase() {
+    }
+       
+    protected void setParallel() {
+        m_parallel = true;
+    }
+    
+    public void setUp() throws Exception {
+       warn("Setting up test " + getClass().getName());
+       context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+       Hashtable<String, Object> props = new Hashtable<>();
+       props.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
+        logService = context.registerService(LogService.class.getName(), this, 
props);
+        context.addFrameworkListener(this);
+        m_dm = new DependencyManager(context);
+        if (m_parallel) {
+            warn("Using threadpool ...");
+            m_threadPool = 
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
+            m_componentExecutorFactoryReg = 
context.registerService(ComponentExecutorFactory.class.getName(), 
+                new ComponentExecutorFactory() {
+                    @Override
+                    public Executor getExecutorFor(Component component) {
+                        return m_threadPool;
+                    }
+                },
+                null);
+        }
+    }
+    
+    public void tearDown() throws Exception {
+       warn("Tearing down test " + getClass().getName());
+       logService.unregister();
+       context.removeFrameworkListener(this);
+        clearComponents();
+        if (m_parallel && m_componentExecutorFactoryReg != null) {
+           m_componentExecutorFactoryReg.unregister();
+           m_threadPool.shutdown();
+            try {
+                m_threadPool.awaitTermination(60, TimeUnit.SECONDS);
+            } catch (InterruptedException e) {
+            }
+       }
+        Assert.assertFalse(errorsLogged());
+    }
+        
+    protected DependencyManager getDM() {
+        return m_dm;
+    }
+                
+    protected void clearComponents() {
+        m_dm.clear();
+        warn("All component cleared.");
+    }
+
+    /**
+     * Creates and provides an Ensure object with a name service property into 
the OSGi service registry.
+     */
+    protected ServiceRegistration register(Ensure e, String name) {
+        Hashtable<String, String> props = new Hashtable<String, String>();
+        props.put("name", name);
+        return context.registerService(Ensure.class.getName(), e, props);
+    }
+
+    /**
+     * Helper method used to stop a given bundle.
+     * 
+     * @param symbolicName
+     *            the symbolic name of the bundle to be stopped.
+     */
+    protected void stopBundle(String symbolicName) {
+        // Stop the test.annotation bundle
+        boolean found = false;
+        for (Bundle b : context.getBundles()) {
+            if (b.getSymbolicName().equals(symbolicName)) {
+                try {
+                    found = true;
+                    b.stop();
+                } catch (BundleException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        if (!found) {
+            throw new IllegalStateException("bundle " + symbolicName + " not 
found");
+        }
+    }
+
+    /**
+     * Helper method used to start a given bundle.
+     * 
+     * @param symbolicName
+     *            the symbolic name of the bundle to be started.
+     */
+    protected void startBundle(String symbolicName) {
+        // Stop the test.annotation bundle
+        boolean found = false;
+        for (Bundle b : context.getBundles()) {
+            if (b.getSymbolicName().equals(symbolicName)) {
+                try {
+                    found = true;
+                    b.start();
+                } catch (BundleException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        if (!found) {
+            throw new IllegalStateException("bundle " + symbolicName + " not 
found");
+        }
+    }
+
+    /**
+     * Helper method used to get a given bundle.
+     * 
+     * @param symbolicName
+     *            the symbolic name of the bundle to get.
+     */
+    protected Bundle getBundle(String symbolicName) {
+        for (Bundle b : context.getBundles()) {
+            if (b.getSymbolicName().equals(symbolicName)) {
+                return b;
+            }
+        }
+        throw new IllegalStateException("bundle " + symbolicName + " not 
found");
+    }
+    
+    /**
+     * Suspend the current thread for a while.
+     * 
+     * @param n
+     *            the number of milliseconds to wait for.
+     */
+    protected void sleep(int ms) {
+        try {
+            Thread.sleep(ms);
+        } catch (InterruptedException e) {
+        }
+    }
+
+    public void log(int level, String message) {
+        checkError(level, null);
+        if (LOG_LEVEL >= level) {
+            System.out.println(getLevel(level) + " - " + 
Thread.currentThread().getName() + " : " + message);
+        }
+    }
+
+    public void log(int level, String message, Throwable exception) {
+        checkError(level, exception);
+        if (LOG_LEVEL >= level) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(getLevel(level) + " - " + 
Thread.currentThread().getName() + " : ");
+            sb.append(message);
+            parse(sb, exception);
+            System.out.println(sb.toString());
+        }
+    }
+
+    public void log(ServiceReference sr, int level, String message) {
+        checkError(level, null);
+        if (LOG_LEVEL >= level) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(getLevel(level) + " - " + 
Thread.currentThread().getName() + " : ");
+            sb.append(message);
+            System.out.println(sb.toString());
+        }
+    }
+
+    public void log(ServiceReference sr, int level, String message, Throwable 
exception) {
+        checkError(level, exception);
+        if (LOG_LEVEL >= level) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(getLevel(level) + " - " + 
Thread.currentThread().getName() + " : ");
+            sb.append(message);
+            parse(sb, exception);
+            System.out.println(sb.toString());
+        }
+    }
+
+    protected boolean errorsLogged() {
+        return m_errorsLogged;
+    }
+
+    private void parse(StringBuilder sb, Throwable t) {
+        if (t != null) {
+            sb.append(" - ");
+            StringWriter buffer = new StringWriter();
+            PrintWriter pw = new PrintWriter(buffer);
+            t.printStackTrace(pw);
+            sb.append(buffer.toString());
+            m_errorsLogged = true;
+        }
+    }
+
+    private String getLevel(int level) {
+        switch (level) {
+            case LogService.LOG_DEBUG :
+                return "DEBUG";
+            case LogService.LOG_ERROR :
+                return "ERROR";
+            case LogService.LOG_INFO :
+                return "INFO";
+            case LogService.LOG_WARNING :
+                return "WARN";
+            default :
+                return "";
+        }
+    }
+
+    private void checkError(int level, Throwable exception) {
+        if (level <= LOG_ERROR) {
+            m_errorsLogged = true;
+        }
+        if (exception != null) {
+            m_errorsLogged = true;
+        }
+    }
+
+    public void frameworkEvent(FrameworkEvent event) {
+        int eventType = event.getType();
+        String msg = getFrameworkEventMessage(eventType);
+        int level = (eventType == FrameworkEvent.ERROR) ? LOG_ERROR : 
LOG_WARNING;
+        if (msg != null) {
+            log(level, msg, event.getThrowable());
+        } else {
+            log(level, "Unknown fwk event: " + event);
+        }
+    }
+
+    private String getFrameworkEventMessage(int event) {
+        switch (event) {
+            case FrameworkEvent.ERROR :
+                return "FrameworkEvent: ERROR";
+            case FrameworkEvent.INFO :
+                return "FrameworkEvent INFO";
+            case FrameworkEvent.PACKAGES_REFRESHED :
+                return "FrameworkEvent: PACKAGE REFRESHED";
+            case FrameworkEvent.STARTED :
+                return "FrameworkEvent: STARTED";
+            case FrameworkEvent.STARTLEVEL_CHANGED :
+                return "FrameworkEvent: STARTLEVEL CHANGED";
+            case FrameworkEvent.WARNING :
+                return "FrameworkEvent: WARNING";
+            default :
+                return null;
+        }
+    }
+
+    protected void warn(String msg, Object ... params) {
+       if (LOG_LEVEL >= LogService.LOG_WARNING) {
+           log(LogService.LOG_WARNING, params.length > 0 ? String.format(msg, 
params) : msg);
+       }
+    }
+
+    @SuppressWarnings("unused")
+    protected void info(String msg, Object ... params) {
+       if (LOG_LEVEL >= LogService.LOG_INFO) {
+           log(LogService.LOG_INFO, params.length > 0 ? String.format(msg, 
params) : msg);
+       }
+    }
+
+    @SuppressWarnings("unused")
+    protected void debug(String msg, Object ... params) {
+       if (LOG_LEVEL >= LogService.LOG_DEBUG) {
+           log(LogService.LOG_DEBUG, params.length > 0 ? String.format(msg, 
params) : msg);
+       }
+    }
+
+    protected void error(String msg, Object ... params) {
+        log(LogService.LOG_ERROR, params.length > 0 ? String.format(msg, 
params) : msg);
+    }
+
+    protected void error(String msg, Throwable err, Object ... params) {
+        log(LogService.LOG_ERROR, params.length > 0 ? String.format(msg, 
params) : msg, err);
+    }
+
+    protected void error(Throwable err) {
+        log(LogService.LOG_ERROR, "error", err);
+    }
+}

Added: 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/testdir/TEST-org.apache.felix.dependencymanager.builder.java.itest-0.0.0.xml
URL: 
http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/testdir/TEST-org.apache.felix.dependencymanager.builder.java.itest-0.0.0.xml?rev=1719841&view=auto
==============================================================================
--- 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/testdir/TEST-org.apache.felix.dependencymanager.builder.java.itest-0.0.0.xml
 (added)
+++ 
felix/sandbox/pderop/dependencymanager-lambda/org.apache.felix.dependencymanager.lambda.itest/testdir/TEST-org.apache.felix.dependencymanager.builder.java.itest-0.0.0.xml
 Sun Dec 13 22:23:57 2015
@@ -0,0 +1,224 @@
+
+<testsuite name='test.org.apache.felix.dependencymanager.builder.java.itest' 
tests='12' time='0.427' failures='0' skipped='0' 
target='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java.itest/generated/org.apache.felix.dependencymanager.builder.java.itest.jar'
 timestamp='2015-11-13T11:50:24' hostname='nx0012' 
framework='org.apache.felix.framework [0]' errors='0' framework-version='5.2.0'>
+  <properties>
+    <property name='launch.activators' value=''/>
+    <property name='java.runtime.name' value='Java(TM) SE Runtime 
Environment'/>
+    <property name='launch.embedded' value='false'/>
+    <property name='sun.boot.library.path' 
value='/opt/jdk1.8.0_65/jre/lib/amd64'/>
+    <property name='java.vm.version' value='25.65-b01'/>
+    <property name='java.vm.vendor' value='Oracle Corporation'/>
+    <property name='java.vendor.url' value='http://java.oracle.com/'/>
+    <property name='path.separator' value=':'/>
+    <property name='java.vm.name' value='Java HotSpot(TM) 64-Bit Server VM'/>
+    <property name='file.encoding.pkg' value='sun.io'/>
+    <property name='launch.timeout' value='0'/>
+    <property name='user.country' value='US'/>
+    <property name='sun.java.launcher' value='SUN_STANDARD'/>
+    <property name='sun.os.patch.level' value='unknown'/>
+    <property name='launch.keep' value='false'/>
+    <property name='java.vm.specification.name' value='Java Virtual Machine 
Specification'/>
+    <property name='user.dir' 
value='/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java.itest'/>
+    <property name='launch.bundles' 
value='/home/nxuser/.bnd/cache/https%3A%2F%2Fraw.githubusercontent.com%2Fbndtools%2Fbundle-hub%2Fmaster%2Forg.apache.felix.metatype/org.apache.felix.metatype-1.1.2.jar,/home/nxuser/.bnd/cache/https%3A%2F%2Fraw.githubusercontent.com%2Fbndtools%2Fbundle-hub%2Fmaster%2Forg.apache.felix.gogo.runtime/org.apache.felix.gogo.runtime-0.16.2.jar,/home/nxuser/.bnd/cache/https%3A%2F%2Fraw.githubusercontent.com%2Fbndtools%2Fbundle-hub%2Fmaster%2Forg.apache.felix.log/org.apache.felix.log-1.0.1.jar,/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar,/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.3.jar,/home/nxuser/.bnd/cache/https%3A%2F%2Fraw.githubusercontent.com%2Fbndtools%2Fbundle-hub%2Fmaster%2Forg.apache.felix.configadmin/org.ap
 
ache.felix.configadmin-1.8.8.jar,/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java/generated/org.apache.felix.dependencymanager.builder.java.jar,/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/localrepo/net.jodah.typetools/net.jodah.typetools-0.4.5.jar,/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/cache/biz.aQute.junit/biz.aQute.junit-latest.jar,/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java.itest/generated/org.apache.felix.dependencymanager.builder.java.itest.jar'/>
+    <property name='java.runtime.version' value='1.8.0_65-b17'/>
+    <property name='java.awt.graphicsenv' 
value='sun.awt.X11GraphicsEnvironment'/>
+    <property name='java.endorsed.dirs' 
value='/opt/jdk1.8.0_65/jre/lib/endorsed'/>
+    <property name='os.arch' value='amd64'/>
+    <property name='java.io.tmpdir' value='/tmp'/>
+    <property name='line.separator' value='
+'/>
+    <property name='java.vm.specification.vendor' value='Oracle Corporation'/>
+    <property name='os.name' value='Linux'/>
+    <property name='launch.name' 
value='org.apache.felix.dependencymanager.builder.java.itest'/>
+    <property name='sun.jnu.encoding' value='UTF-8'/>
+    <property name='java.library.path' 
value='/home/nxuser/pp/lib:/home/nxuser/pp/lib:/home/nxuser/pp/lib:/home/nxuser/pp/lib::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib'/>
+    <property name='launcher.properties' 
value='/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java.itest/generated/launch755104101909327293.properties'/>
+    <property name='java.specification.name' value='Java Platform API 
Specification'/>
+    <property name='java.class.version' value='52.0'/>
+    <property name='launch.storage.dir' 
value='/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java.itest/generated/fw'/>
+    <property name='sun.management.compiler' value='HotSpot 64-Bit Tiered 
Compilers'/>
+    <property name='os.version' value='4.1.10-100.fc21.x86_64'/>
+    <property name='user.home' value='/home/nxuser'/>
+    <property name='user.timezone' value='Europe/Paris'/>
+    <property name='java.awt.printerjob' value='sun.print.PSPrinterJob'/>
+    <property name='file.encoding' value='UTF-8'/>
+    <property name='java.specification.version' value='1.8'/>
+    <property name='java.class.path' 
value='/home/nxuser/.bnd/cache/https%3A%2F%2Fraw.githubusercontent.com%2Fbndtools%2Fbundle-hub%2Fmaster%2Forg.apache.felix.framework/org.apache.felix.framework-5.2.0.jar:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/cache/biz.aQute.launcher/biz.aQute.launcher-latest.jar'/>
+    <property name='user.name' value='nxuser'/>
+    <property name='java.vm.specification.version' value='1.8'/>
+    <property name='sun.java.command' value='aQute.launcher.Launcher'/>
+    <property name='java.home' value='/opt/jdk1.8.0_65/jre'/>
+    <property name='sun.arch.data.model' value='64'/>
+    <property name='user.language' value='en'/>
+    <property name='java.specification.vendor' value='Oracle Corporation'/>
+    <property name='awt.toolkit' value='sun.awt.X11.XToolkit'/>
+    <property name='java.vm.info' value='mixed mode'/>
+    <property name='launch.services' value='true'/>
+    <property name='launch.noreferences' value='false'/>
+    <property name='java.version' value='1.8.0_65'/>
+    <property name='launch.notificationPort' value='34677'/>
+    <property name='java.ext.dirs' 
value='/opt/jdk1.8.0_65/jre/lib/ext:/usr/java/packages/lib/ext'/>
+    <property name='sun.boot.class.path' 
value='/opt/jdk1.8.0_65/jre/lib/resources.jar:/opt/jdk1.8.0_65/jre/lib/rt.jar:/opt/jdk1.8.0_65/jre/lib/sunrsasign.jar:/opt/jdk1.8.0_65/jre/lib/jsse.jar:/opt/jdk1.8.0_65/jre/lib/jce.jar:/opt/jdk1.8.0_65/jre/lib/charsets.jar:/opt/jdk1.8.0_65/jre/lib/jfr.jar:/opt/jdk1.8.0_65/jre/classes'/>
+    <property name='java.vendor' value='Oracle Corporation'/>
+    <property name='file.separator' value='/'/>
+    <property name='java.vendor.url.bug' 
value='http://bugreport.sun.com/bugreport/'/>
+    <property name='sun.io.unicode.encoding' value='UnicodeLittle'/>
+    <property name='sun.cpu.endian' value='little'/>
+    <property name='launch.trace' value='false'/>
+    <property name='launch.system.packages' 
value='sun.reflect,org.osgi.framework;version="1.8",org.osgi.framework.dto;version="1.8";uses:="org.osgi.dto",org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",org.osgi.framework.hooks.weaving;version="1.1";uses:="org.osgi.framework.wiring",org.osgi.framework.launch;version="1.2";uses:="org.osgi.framework",org.osgi.framework.namespace;version="1.1";uses:="org.osgi.resource",org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",org.osgi.framework.wiring.dto;version="1.2";uses:="org.osgi.dto,org.osgi.resource.dto",org.osgi.resource;version="1.0",org.osgi.resource.dto;version="1.0";uses:="org.osgi.d
 
to",org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",org.osgi.service.url;version="1.0",org.osgi.service.resolver;version="1.0";uses:="org.osgi.resource",org.osgi.util.tracker;version="1.5.1";uses:="org.osgi.framework",org.osgi.dto;version="1.0"'/>
+    <property name='sun.desktop' value='gnome'/>
+    <property name='sun.cpu.isalist' value=''/>
+  </properties>
+  <bundles>
+    <bundle version='5.2.0' location='System Bundle' 
bsn='org.apache.felix.framework' modified='1970-01-01T01:00:00' state='32' 
id='0'/>
+    <bundle version='1.1.2' 
location='reference:file:/home/nxuser/.bnd/cache/https%253A%252F%252Fraw.githubusercontent.com%252Fbndtools%252Fbundle-hub%252Fmaster%252Forg.apache.felix.metatype/org.apache.felix.metatype-1.1.2.jar'
 bsn='org.apache.felix.metatype' modified='2015-11-13T11:50:24' state='32' 
id='1'/>
+    <bundle version='0.16.2' 
location='reference:file:/home/nxuser/.bnd/cache/https%253A%252F%252Fraw.githubusercontent.com%252Fbndtools%252Fbundle-hub%252Fmaster%252Forg.apache.felix.gogo.runtime/org.apache.felix.gogo.runtime-0.16.2.jar'
 bsn='org.apache.felix.gogo.runtime' modified='2015-11-13T11:50:24' state='32' 
id='2'/>
+    <bundle version='1.0.1' 
location='reference:file:/home/nxuser/.bnd/cache/https%253A%252F%252Fraw.githubusercontent.com%252Fbndtools%252Fbundle-hub%252Fmaster%252Forg.apache.felix.log/org.apache.felix.log-1.0.1.jar'
 bsn='org.apache.felix.log' modified='2015-11-13T11:50:24' state='32' id='3'/>
+    <bundle version='4.2.0' 
location='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.2.0.jar'
 bsn='org.apache.felix.dependencymanager' modified='2015-11-13T11:50:24' 
state='32' id='4'/>
+    <bundle version='4.0.3' 
location='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.3.jar'
 bsn='org.apache.felix.dependencymanager.shell' modified='2015-11-13T11:50:24' 
state='32' id='5'/>
+    <bundle version='1.8.8' 
location='reference:file:/home/nxuser/.bnd/cache/https%253A%252F%252Fraw.githubusercontent.com%252Fbndtools%252Fbundle-hub%252Fmaster%252Forg.apache.felix.configadmin/org.apache.felix.configadmin-1.8.8.jar'
 bsn='org.apache.felix.configadmin' modified='2015-11-13T11:50:24' state='32' 
id='6'/>
+    <bundle version='1.0.0' 
location='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java/generated/org.apache.felix.dependencymanager.builder.java.jar'
 bsn='org.apache.felix.dependencymanager.builder.java' 
modified='2015-11-13T11:50:24' state='32' id='7'/>
+    <bundle version='0.4.5.SNAPSHOT' 
location='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/localrepo/net.jodah.typetools/net.jodah.typetools-0.4.5.jar'
 bsn='net.jodah.typetools' modified='2015-11-13T11:50:24' state='32' id='8'/>
+    <bundle version='1.3.0.201501161926' 
location='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/cnf/cache/biz.aQute.junit/biz.aQute.junit-latest.jar'
 bsn='biz.aQute.junit' modified='2015-11-13T11:50:24' state='32' id='9'/>
+    <bundle version='0.0.0.201511131050' 
location='reference:file:/home/nxuser/work/osgi/sandbox/pderop/dependencymanager.builder.java/org.apache.felix.dependencymanager.builder.java.itest/generated/org.apache.felix.dependencymanager.builder.java.itest.jar'
 bsn='org.apache.felix.dependencymanager.builder.java.itest' 
modified='2015-11-13T11:50:24' state='32' target='true' id='10'/>
+  </bundles>
+  <testcase name='testAbstractClassDependency' time='0.206' 
classname='org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest'>
+    <system-out>
+      WARN - main : Setting up test 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest
+      
+[Ensure 2] step 1 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceProvider.start:61
+      
+[Ensure 2] step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceConsumer.bind:82
+      
+[Ensure 2] step 3 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceConsumer.start:87
+      
+[Ensure 2] step 4 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceProvider.invoke:65
+      
+[Ensure 2] step 5 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceConsumer.stop:92
+      
+UNBINDDDDDDDDDDDDDDDDDDDDDDDDDDD
+[Ensure 2] step 6 [1 main]
+       
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceConsumer.unbind:98
+      
+[Ensure 2] step 7 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest$ServiceProvider.stop:69
+      
+[Ensure 2] step 8 [1 main] 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest.testAbstractClassDependency:46
+      
+WARN - main : Tearing down test 
org.apache.felix.dm.builder.java.itest.AbstractServiceDependencyTest
+      
+WARN - main : All component cleared.
+    </system-out>
+  </testcase>
+  <testcase name='testSimple' time='0.45' 
classname='org.apache.felix.dm.builder.java.itest.ComponentTest'>
+    <system-out>
+      WARN - main : Setting up test 
org.apache.felix.dm.builder.java.itest.ComponentTest
+      
+[Ensure 2] step 1 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest$Consumer.add:72
+      
+Injected provider: provider2
+[Ensure 2] step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest$Consumer.start:78
+      
+[Ensure 2] waiting for step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest.testSimple:55
+      
+[Ensure 2] arrived at step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest.testSimple:55
+      
+[Ensure 2] step 3 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest$Consumer.stop:82
+      
+[Ensure 2] step 4 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest$Consumer.destroy:86
+      
+[Ensure 2] step 5 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest$Consumer.remove:91
+      
+[Ensure 2] waiting for step 5 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest.testSimple:57
+      
+[Ensure 2] arrived at step 5 [1 main] 
org.apache.felix.dm.builder.java.itest.ComponentTest.testSimple:57
+      
+WARN - main : Tearing down test 
org.apache.felix.dm.builder.java.itest.ComponentTest
+      
+WARN - main : All component cleared.
+    </system-out>
+  </testcase>
+  <testcase name='testServiceRegistrationAndConsumption' time='0.25' 
classname='org.apache.felix.dm.builder.java.itest.ServiceDependencyTest'>
+    <system-out>
+      WARN - main : Setting up test 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest
+      
+[Ensure 3] step 1 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest$ServiceConsumer.init:74
+      
+[Ensure 3] step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest$ServiceProvider.invoke:61
+      
+[Ensure 3] step 3 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest$ServiceConsumer.destroy:79
+      
+[Ensure 3] step 4 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest$ServiceConsumerCallbacks.add:91
+      
+[Ensure 3] step 5 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest$ServiceConsumerCallbacks.remove:94
+      
+[Ensure 3] step 6 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest.testServiceRegistrationAndConsumption:48
+      
+WARN - main : Tearing down test 
org.apache.felix.dm.builder.java.itest.ServiceDependencyTest
+      
+WARN - main : All component cleared.
+    </system-out>
+  </testcase>
+  <testcase name='testServiceWithCallbacksAndOneDependency' time='0.15' 
classname='org.apache.felix.dm.builder.java.itest.ServiceDependencyThroughCallbackInstanceTest'>
+    <system-out>
+      WARN - main : Setting up test 
org.apache.felix.dm.builder.java.itest.ServiceDependencyThroughCallbackInstanceTest
+      
+added A0
+WARN - main : Tearing down test 
org.apache.felix.dm.builder.java.itest.ServiceDependencyThroughCallbackInstanceTest
+      
+WARN - main : All component cleared.
+    </system-out>
+  </testcase>
+  <testcase name='testServiceWithCallbacksAndThreeDependencies' time='0.14' 
classname='org.apache.felix.dm.builder.java.itest.ServiceDependencyThroughCallbackInstanceTest'>
+    <system-out>
+      WARN - main : Setting up test 
org.apache.felix.dm.builder.java.itest.ServiceDependencyThroughCallbackInstanceTest
+      
+added A2
+added A1
+added A0
+WARN - main : Tearing down test
+       
org.apache.felix.dm.builder.java.itest.ServiceDependencyThroughCallbackInstanceTest
+      
+WARN - main : All component cleared.
+    </system-out>
+  </testcase>
+  <testcase name='testServiceUpdate' time='0.79' 
classname='org.apache.felix.dm.builder.java.itest.ServiceUpdateTest'>
+    <system-out>
+      WARN - main : Setting up test 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest
+      
+init
+start
+[Ensure 4] step 1 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest$CallbackInstance.start:121
+      
+[Ensure 4] step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest$ServiceProvider.add:99
+      
+[Ensure 4] waiting for step 1 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:65
+      
+[Ensure 4] arrived at step 1 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:65
+      
+[Ensure 4] waiting for step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:67
+      
+[Ensure 4] arrived at step 2 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:67
+      
+resource changed
+[Ensure 4] step 3 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest$CallbackInstance.changed:131
+      
+Change...
+[Ensure 4] step 4 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest$ServiceProvider.change:103
+      
+[Ensure 4] waiting for step 3 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:71
+      
+[Ensure 4] arrived at step 3 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:71
+      
+[Ensure 4] waiting for step 4 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:73
+      
+[Ensure 4] arrived at step 4 [1 main] 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest.testServiceUpdate:73
+      
+Done!
+WARN - main : Tearing down test 
org.apache.felix.dm.builder.java.itest.ServiceUpdateTest
+      
+Remove...
+stop
+destroy
+WARN - main : All component cleared.
+    </system-out>
+  </testcase>
+</testsuite>
\ No newline at end of file



Reply via email to