7 feb 2014 (marrs & uiterlix):

This prototype demonstrates the new concurrency principles that form the basis for the DM:

 * All external events that influence the state of dependencies are recorded and given 
   to the serial executor of the component. We record whatever data comes in, so when the
   actual job is run by the serial executor, we still have access to the original data
   without having to access other sources whose state might have changed since.
 * The serial executor of a component will execute a job immediately if it is being called
   by the thread that is already executing jobs.
 * If the serial executor of a component had not yet started a job, it will queue and start
   it on the current thread.
 * If the serial executor gets invoked from a different thread than the one currently
   executing jobs, the job will be put at the end of the queue. As mentioned before, any
   data associated with the event will also be recorded so it is available when the job
   executes.
 * State in the component and dependency can only be modified via the serial executor
   thread. This means we don't need explicit synchronization anywhere.

20 sept 2014 (pderop):

 * Added support for parallelism: To allow components to be started and handled in parallel, you can
   now register in the OSGi service registry a ComponentExecutorFactory service that is used to get
   an Executor for the management of all components dependencies/lifecycle callbacks. See javadoc
   from the org.apache.felix.dm.ComponentExecutorFactory interface for more informations.
   
   You can also take a look at the the org.apache.felix.dependencymanager.samples project, which is
   registering a ComponentExecutorFactory from org.apache.felix.dependencymanager.samples.tpool
   bundle.
  
   See also the following property in the org.apache.felix.dependencymanager.samples/bnd.bnd 

	org.apache.felix.dependencymanager.parallel=\
		'!org.apache.felix.dependencymanager.samples.tpool, *',\

  Here, all components will be handled by Executors provided by the ComponentExecutorFactory,
  except those having a package starting with "org.apache.felix.dependencymanager.samples.tpool"
  (because the threadpool is itself defined using the Dependency Manager API).









