You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/11/13 21:58:31 UTC

svn commit: r1639515 - in /felix/sandbox/pderop/dependencymanager-prototype: cnf/localrepo/ cnf/localrepo/org.apache.felix.ipojo.api/ cnf/localrepo/org.apache.felix.ipojo.composite/ cnf/localrepo/org.apache.felix.ipojo.gogo/ cnf/localrepo/org.apache.fe...

Author: pderop
Date: Thu Nov 13 20:58:30 2014
New Revision: 1639515

URL: http://svn.apache.org/r1639515
Log:
Added ipojo benchmark, after having followed the suggestion made by Guillaume (only create one PrimitiveComponentType per component class).
The performance seems better, however I believe that some investigation should still be done, either in my test which may be still invalid,
or somewhere else.
See http://www.mail-archive.com/users%40felix.apache.org/msg15447.html

Added:
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo/
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.api/
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.api/org.apache.felix.ipojo.api-1.12.0.jar   (with props)
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.composite/
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.composite/org.apache.felix.ipojo.composite-1.12.0.jar   (with props)
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.gogo/
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.gogo/org.apache.felix.ipojo.gogo-1.12.0.jar   (with props)
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo/org.apache.felix.ipojo-1.12.0.jar   (with props)
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/ipojo.bnd
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/Activator.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/IpojoScenario.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/ScenarioComponentInstance.java
Modified:
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml
    felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha
    felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml
    felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml.sha
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/bnd.bnd
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/controller/impl/ScenarioControllerImpl.java

Modified: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml?rev=1639515&r1=1639514&r2=1639515&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha?rev=1639515&r1=1639514&r2=1639515&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/index.xml.sha Thu Nov 13 20:58:30 2014
@@ -1 +1 @@
-928ec126399e3d77047781c32dfacbf135702a25b2315d74087906102aacb33f
\ No newline at end of file
+a1bfdcceda47c3403337ea0e4159687d3ee0e988c964a3b8875806ceba8ad557
\ No newline at end of file

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

Propchange: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.api/org.apache.felix.ipojo.api-1.12.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.composite/org.apache.felix.ipojo.composite-1.12.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.composite/org.apache.felix.ipojo.composite-1.12.0.jar?rev=1639515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.composite/org.apache.felix.ipojo.composite-1.12.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.gogo/org.apache.felix.ipojo.gogo-1.12.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.gogo/org.apache.felix.ipojo.gogo-1.12.0.jar?rev=1639515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo.gogo/org.apache.felix.ipojo.gogo-1.12.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

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

Propchange: felix/sandbox/pderop/dependencymanager-prototype/cnf/localrepo/org.apache.felix.ipojo/org.apache.felix.ipojo-1.12.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Modified: felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml?rev=1639515&r1=1639514&r2=1639515&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml.sha?rev=1639515&r1=1639514&r2=1639515&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml.sha (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/cnf/releaserepo/index.xml.sha Thu Nov 13 20:58:30 2014
@@ -1 +1 @@
-ebca8e263dc50b66bf38f211c0615eb96f79fe6384468a74cc36ae9737b97b93
\ No newline at end of file
+8c342facec78371dd0bc0258736dc768ec099dfcf391ac1aadac9532e9d18e6e
\ No newline at end of file

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/bnd.bnd?rev=1639515&r1=1639514&r2=1639515&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/bnd.bnd (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/bnd.bnd Thu Nov 13 20:58:30 2014
@@ -1,7 +1,10 @@
 -buildpath:  \
 	org.apache.felix.dependencymanager;version=latest,\
 	osgi.core;version=4.2,\
-	biz.aQute.bndlib;version=2.2
+	org.apache.felix.ipojo.composite;version=1.12,\
+	org.apache.felix.ipojo;version=1.12,\
+	org.apache.felix.ipojo.api;version=1.12,\
+	osgi.cmpn;version=4.2
 -runbundles:  \
 	org.apache.felix.dependencymanager;version=latest,\
 	org.apache.felix.dependencymanager.shell;version=latest,\
@@ -11,8 +14,11 @@
 	org.apache.felix.gogo.shell;version=0.10.0,\
 	org.apache.felix.gogo.runtime;version=0.10.0,\
 	org.apache.felix.scr;version=1.8.2,\
-	org.apache.felix.dependencymanager.benchmark.scenario;version=latest,\
-	org.apache.felix.configadmin;version=1.8.0
+	org.apache.felix.configadmin;version=1.8.0,\
+	org.apache.felix.ipojo;version=1.12.0,\
+	org.apache.felix.ipojo.api;version=1.12.0,\
+	org.apache.felix.ipojo.composite;version=1.12.0,\
+	org.apache.felix.ipojo.gogo;version=1.12.0
 -runfw: org.apache.felix.framework;version='[4.4.0,4.4.0]'
 
 -sub:  \

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/ipojo.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/ipojo.bnd?rev=1639515&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/ipojo.bnd (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/ipojo.bnd Thu Nov 13 20:58:30 2014
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dm.benchmark.ipojo
+Bundle-Activator: org.apache.felix.dm.benchmark.ipojo.Activator
\ No newline at end of file

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/controller/impl/ScenarioControllerImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/controller/impl/ScenarioControllerImpl.java?rev=1639515&r1=1639514&r2=1639515&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/controller/impl/ScenarioControllerImpl.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/controller/impl/ScenarioControllerImpl.java Thu Nov 13 20:58:30 2014
@@ -40,10 +40,10 @@ public class ScenarioControllerImpl impl
      * List of bundles to be executed by the benchmark.
      */
     final List<String> TESTS = Arrays.asList(
-        "org.apache.felix.dependencymanager.benchmark.ipojo",
         "org.apache.felix.dependencymanager.benchmark.scr",
         "org.apache.felix.dependencymanager.benchmark.dependencymanager",
-        "org.apache.felix.dependencymanager.benchmark.dependencymanager.parallel"
+        "org.apache.felix.dependencymanager.benchmark.dependencymanager.parallel",
+        "org.apache.felix.dependencymanager.benchmark.ipojo"
     );
     
     /**

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/Activator.java?rev=1639515&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/Activator.java Thu Nov 13 20:58:30 2014
@@ -0,0 +1,50 @@
+package org.apache.felix.dm.benchmark.ipojo;
+
+import org.apache.felix.dm.benchmark.controller.ScenarioController;
+import org.apache.felix.dm.benchmark.scenario.Helper;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+public class Activator implements BundleActivator, ServiceTrackerCustomizer {   
+	BundleContext m_context;
+	IpojoScenario m_scenario;
+	
+    @Override
+    public void start(BundleContext context) throws Exception {
+        Helper.debug(() -> Activator.class.getName() + ".start()");
+        m_context = context;
+        // Wait for the ScenarioController, before starting the actual stress test.               
+	    Filter filter = context.createFilter("(objectClass=" + ScenarioController.class.getName() + ")");
+	    ServiceTracker tracker = new ServiceTracker(context, filter, this);
+	    tracker.open();        
+    }
+
+	@Override
+	public Object addingService(ServiceReference reference) {
+		// At this point, we can create our Component instance
+		ScenarioController controller = (ScenarioController) m_context.getService(reference);
+		m_scenario = new IpojoScenario(m_context);
+		m_scenario.start();
+		return controller;
+	}
+
+	@Override
+	public void modifiedService(ServiceReference reference, Object service) {
+	}
+
+	@Override
+	public void removedService(ServiceReference reference, Object service) {
+	}
+	
+    @Override
+    public void stop(BundleContext context) throws Exception {
+        Helper.debug(() -> Activator.class.getName() + ".stop()");
+        if (m_scenario != null) {
+        	m_scenario.stop();
+        }
+    }
+}

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/IpojoScenario.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/IpojoScenario.java?rev=1639515&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/IpojoScenario.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/IpojoScenario.java Thu Nov 13 20:58:30 2014
@@ -0,0 +1,185 @@
+package org.apache.felix.dm.benchmark.ipojo;
+
+import static org.apache.felix.dm.benchmark.scenario.Artist.ALBUMS;
+import static org.apache.felix.dm.benchmark.scenario.Artist.ARTISTS;
+import static org.apache.felix.dm.benchmark.scenario.Artist.TRACKS;
+
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.apache.felix.dm.benchmark.controller.ScenarioController;
+import org.apache.felix.dm.benchmark.scenario.Album;
+import org.apache.felix.dm.benchmark.scenario.Artist;
+import org.apache.felix.dm.benchmark.scenario.Helper;
+import org.apache.felix.dm.benchmark.scenario.Track;
+import org.apache.felix.dm.benchmark.scenario.impl.AlbumImpl;
+import org.apache.felix.dm.benchmark.scenario.impl.ArtistImpl;
+import org.apache.felix.dm.benchmark.scenario.impl.TrackImpl;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.api.Dependency;
+import org.apache.felix.ipojo.api.PrimitiveComponentType;
+import org.apache.felix.ipojo.api.Service;
+import org.apache.felix.ipojo.api.ServiceProperty;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Benchark using iPojo.
+ */
+public class IpojoScenario {
+    /**
+     * List of Component instances (Artists, Albums, Tracks).
+     */
+    List<ComponentInstance> m_component = new ArrayList<>();
+            
+    /**
+     * Component type for our "Artist" components
+     */
+    final PrimitiveComponentType m_artistType;
+
+    /**
+     * Component type for our "Album" components
+     */
+    final PrimitiveComponentType m_albumType;
+
+    /**
+     * Component type for our "Artist" components
+     */
+    final PrimitiveComponentType m_trackType;
+    
+    /**
+     * This is all our created component instances
+     */
+    final List<ScenarioComponentInstance> m_instances = new ArrayList<>();
+
+    public IpojoScenario(BundleContext ctx) {
+        // Create our Artist component type
+        m_artistType = new PrimitiveComponentType()
+            .setBundleContext(ctx)            
+            .setClassName(ArtistImpl.class.getName())
+            .setValidateMethod("start")
+            .setInvalidateMethod("stop")
+            .addDependency(new Dependency().setBindMethod("bindController"))
+            .setImmediate(true)
+            .addService(new Service()
+                .setSpecification(Artist.class.getName())
+                .setCreationStrategy(Service.SINGLETON_STRATEGY));
+        // Create the Artist's albums dependencies.
+        IntStream.iterate(0, n -> n+1).limit(ALBUMS).forEach(i -> {
+            m_artistType.addDependency(new Dependency()
+                .setSpecification(Album.class.getName())
+                .setId("album" + i)
+                .setBindMethod("addAlbum"));
+        });
+        
+        // Create our Album component type
+        m_albumType = new PrimitiveComponentType()
+            .setBundleContext(ctx)
+            .setValidateMethod("start")
+            .setInvalidateMethod("stop")
+            .setClassName(AlbumImpl.class.getName())
+            .setImmediate(false)
+            .addDependency(new Dependency()
+                .setSpecification(ScenarioController.class.getName())
+                .setBindMethod("bindController"))
+            .addService(new Service()
+                .setSpecification(Album.class.getName())
+                .addProperty(new ServiceProperty().setName("id").setType("string"))
+            .setCreationStrategy(Service.SINGLETON_STRATEGY));
+        // Create the Album's tracks dependencies.
+        IntStream.iterate(0, n -> n+1).limit(TRACKS).forEach(i -> {
+            m_albumType.addDependency(new Dependency()
+                .setSpecification(Track.class.getName())
+                .setId("track" + i)
+                .setBindMethod("addTrack"));
+        });
+        
+        // Create our Track component type
+        m_trackType = new PrimitiveComponentType()
+            .setBundleContext(ctx)
+            .setClassName(TrackImpl.class.getName())
+            .setValidateMethod("start")
+            .setInvalidateMethod("stop")
+            .addDependency(new Dependency()
+                .setSpecification(ScenarioController.class.getName())
+                .setBindMethod("bindController"))               
+            .addService(new Service()
+                .setSpecification(Track.class.getName())
+                .addProperty(new ServiceProperty().setName("id").setType("string"))
+            .setCreationStrategy(Service.SINGLETON_STRATEGY));
+    }
+    
+    /**
+     * Initialize our Artists, Albums/Tracks.
+     */
+    public void start() {  
+        try {
+            Helper.debug(() -> "IPojoActivator.start()");
+
+            IntStream.range(0, ARTISTS)
+                .mapToObj(i -> createArtist()).peek(m_instances::add)
+                .flatMap(artist -> createAlbums(artist)).peek(m_instances::add)
+                .flatMap(album -> createTracks(album)).forEach(m_instances::add);
+                            
+            Helper.debug(() -> "started all ipojo components");
+        }
+        
+        catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
+    
+    public void stop() {
+        try {
+            Helper.debug(() -> "IPojoActivator.stop()");
+            m_instances.forEach(scenarioInstance -> scenarioInstance.getComponentInstance().dispose());
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
+
+    private ScenarioComponentInstance createArtist() {
+        // Create one artist with filters on all its albums.    
+        String id = String.valueOf(Helper.generateId());
+        Dictionary<String, Object> conf = new Hashtable<>();
+        Dictionary<String, String> confFilters = new Hashtable<>();
+        IntStream.iterate(0, n -> n+1).limit(ALBUMS).forEach(i -> {
+            String filterId = new StringBuilder(id).append("-").append(i).toString();
+            confFilters.put("album" + i, "(id=" + filterId + ")");
+        });
+        
+        conf.put("requires.filters", confFilters);
+        return new ScenarioComponentInstance(id, m_artistType, conf);
+    }
+    
+    /**
+     * Creates some albums for one given artist component.
+     */
+    private Stream<ScenarioComponentInstance> createAlbums(ScenarioComponentInstance artist) {
+        return IntStream.iterate(0, n -> n+1).limit(ALBUMS).mapToObj(a -> {
+            String albumId = new StringBuilder(artist.getId()).append("-").append(String.valueOf(a)).toString();
+            Dictionary<String, Object> conf = new Hashtable<>();
+            conf.put("id", albumId);
+            
+            Dictionary<String, String> confFilters = new Hashtable<>();
+            IntStream.iterate(0, n -> n+1).limit(TRACKS).forEach(t -> {
+                String filterId = new StringBuilder(albumId).append("-").append(t).toString();
+                confFilters.put("track" + t, "(id=" + filterId + ")");
+            });
+            
+            return new ScenarioComponentInstance(albumId, m_albumType, conf);           
+        });
+    }
+        
+    private Stream<ScenarioComponentInstance> createTracks(ScenarioComponentInstance album) {
+        return IntStream.iterate(0, n -> n+1).limit(TRACKS).mapToObj(i -> {
+            String trackId = new StringBuilder(album.getId()).append("-").append(String.valueOf(i)).toString();
+            Dictionary<String, Object> conf = new Hashtable<>();
+            conf.put("id", trackId);                        
+            return new ScenarioComponentInstance(trackId, m_trackType, conf);           
+        });
+   }
+}

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/ScenarioComponentInstance.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/ScenarioComponentInstance.java?rev=1639515&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/ScenarioComponentInstance.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.benchmark/src/org/apache/felix/dm/benchmark/ipojo/ScenarioComponentInstance.java Thu Nov 13 20:58:30 2014
@@ -0,0 +1,30 @@
+package org.apache.felix.dm.benchmark.ipojo;
+
+import java.util.Dictionary;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.MissingHandlerException;
+import org.apache.felix.ipojo.UnacceptableConfiguration;
+import org.apache.felix.ipojo.api.PrimitiveComponentType;
+
+/**
+ * Holder class for one of the scenario component instance (Artist, ALbum, Track).
+ */
+public class ScenarioComponentInstance {
+    final String m_id;
+    final ComponentInstance m_instance;
+    
+    public ScenarioComponentInstance(String id, PrimitiveComponentType type, Dictionary<?,?> conf) {
+        m_id = id;
+        try {
+            m_instance = type.createInstance(conf);
+        } catch (UnacceptableConfiguration | MissingHandlerException | ConfigurationException e) {
+            throw new RuntimeException("Could create component instance", e);
+        }
+    }
+    
+    public String getId() { return m_id; }
+    public ComponentInstance getComponentInstance() { return m_instance; }
+}
+