You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:25:15 UTC

[sling-org-apache-sling-commons-threads] annotated tag org.apache.sling.commons.threads-3.0.0 created (now 80b5bdd)

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a change to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git.


      at 80b5bdd  (tag)
 tagging 47e54c5dca7988405794f302cc34c60ca398fe0f (commit)
      by Carsten Ziegeler
      on Thu Dec 17 13:49:44 2009 +0000

- Log -----------------------------------------------------------------
org.apache.sling.commons.threads-3.0.0
-----------------------------------------------------------------------

This annotated tag includes the following new commits:

     new cdf4581  Add new threads module for providing thread pools.
     new c3a54e0  Set svn:ignore
     new 6569a93  Use thread pool to create new threads instead of directly instantiating threads.
     new a216040  Create own thread pool for eventing.
     new 5dfc716  Use thread pooling for scheduler as well. Create own pool for eventing.
     new f8c7fb7  Use jvm default thread factory and always provide priority and daemon settings.
     new a5761c4  Use thread pool configuration object to be extensible.
     new b9020b0  Move licence and notice to top level dir.
     new e413af3  Add incubator disclaimer.
     new 1597daa  Add notice files.
     new 3020eb2  Write first element in pom in one line (to avoid problems with the maven release plugin) and minor pom fixes.
     new 2c687bd  Update notice files.
     new 4c666b9  SLING-417: Move sling/threads to commons/threads
     new 8d1f9f1  SLING-417: Move threads to commons.
     new 23e3268  Eclude maven-eclipse.xml generated by the maven eclipse plugin.
     new 5fa8b5a  SLING-442: Clean up exports, imports, dependencies and used plugins.
     new f7b228d  SLING-479 Fix @scr.tags:   - normalize metadata attribute settings to "no"   - ensure proper metadata and ds attributes are set   - create metatype.properties files where required   - fix metatype.properties files
     new b8442a7  SLING-483: Add excludes for javadocs (WiP)
     new f31810f  SLING-495 - NOTICE files generated using mknotice script
     new 7a30ca2  SLING-495 - NOTICE files updated according to changes in revision 662927
     new fc95c64  SLING-495 - NOTICE files regenerated with revision 663097 changes
     new 601db57  Use released version of parent pom.
     new e4986f9  [maven-release-plugin] prepare release org.apache.sling.commons.threads-2.0.0-incubator
     new 7097543  [maven-release-plugin] prepare for next development iteration
     new bac4721  Fix reference to parent pom.
     new 88286dd  SLING-521: Restore more notice files.
     new dc0cc02  SLING-521: Separate between notice files for bin and src dists.
     new 82242fd  SLING-521: Separate between notice files for bin and src dists.
     new 64c2458  SLING-521: Separate between notice files for bin and src dists.
     new b29c28c  Change copyright year to 2008.
     new 88db633  Update to released versions.
     new 3aaff93  [maven-release-plugin] prepare release org.apache.sling.commons.threads-2.0.2-incubator
     new c5e1a11  [maven-release-plugin] prepare for next development iteration
     new bac3bfb  Use latest snapshots again to make project buildable.
     new 0720836  Use released parent pom where possible.
     new bb289e6  SLING-555 : Update all poms to use the latest parent pom; update parent pom to include the incubator repo for plugins and use latest plugins.
     new daee250  SLING-758 : Correctly evaluate block policy and use the correct handler.
     new 194ca0d  Add more logging to easier detect pool problems.
     new 21e9144  SLING-808 : Increase version to 5-incubator-SNAPSHOT
     new 3ad9b97  Update notice files to include 2009 in copyright statement.
     new 58081a1  SLING-829 Cosmetics to the bundle/project names
     new 3a9b17c  SLING-865 : Move to bundles
     new ae528ef  SLING-865 : Adjust reactor pom and svn information in each module.
     new 6807294  SLING-865 : Adjust path to parent pom and add profiles for samples and contrib
     new 7807d1c  Use release parent pom
     new 03fc7dc  [maven-release-plugin] prepare release org.apache.sling.commons.threads-2.0.4-incubator
     new a28c935  [maven-release-plugin] prepare for next development iteration
     new 4ca55b3  Use next dev version of parent pom
     new bed1b63  Set parent pom to released version.
     new 6ad9afb  Move Sling to new TLP location
     new 10df9b4  SLING-1011 : Remove disclaimer file.
     new ae744d2  SLING-1011 : Adjust svn location
     new 97b3488  SLING-1011 : Remove disclaimer from readme's, adjust links to webite, fix versions in poms.
     new 97733b6  SLING-1033 Upgrade to Sling parent POM 6 (and ensure web app has the leglize stuff, too)
     new ca64268  SLING-1205 Upgrade all projects to parent POM 8 and use OSGi provided OSGi libraries
     new 3423042  SLING-1244 : Redesign thread pool management
     new 1be56f6  [maven-release-plugin] prepare release org.apache.sling.commons.threads-3.0.0
     new 47e54c5  [maven-scm] copy for tag org.apache.sling.commons.threads-3.0.0

The 58 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].

[sling-org-apache-sling-commons-threads] 11/14: SLING-1205 Upgrade all projects to parent POM 8 and use OSGi provided OSGi libraries

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit ca6426828d7808a102de062a32cd53474ac427be
Author: Felix Meschberger <fm...@apache.org>
AuthorDate: Tue Dec 1 07:32:34 2009 +0000

    SLING-1205 Upgrade all projects to parent POM 8 and use OSGi provided OSGi libraries
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@885680 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7a06c13..931fd47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>6</version>
+        <version>8</version>
         <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
 
@@ -80,7 +80,7 @@
     </reporting>
     <dependencies>
         <dependency>
-            <groupId>org.apache.felix</groupId>
+            <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
         <dependency>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 14/14: [maven-scm] copy for tag org.apache.sling.commons.threads-3.0.0

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 47e54c5dca7988405794f302cc34c60ca398fe0f
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Dec 17 13:49:44 2009 +0000

    [maven-scm] copy for tag org.apache.sling.commons.threads-3.0.0
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.threads-3.0.0@891703 13f79535-47bb-0310-9956-ffa450edef68

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 05/14: Set parent pom to released version.

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit bed1b637d7b0280dcc501202f46228fcf8ef1b51
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu May 14 14:49:51 2009 +0000

    Set parent pom to released version.
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads@774798 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index d91c973..596e0f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>6-incubator-SNAPSHOT</version>
+        <version>5-incubator</version>
         <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 03/14: [maven-release-plugin] prepare for next development iteration

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit a28c9357ffc89c3e837ca41d68f5edd532a4fb79
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue May 5 15:22:53 2009 +0000

    [maven-release-plugin] prepare for next development iteration
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads@771798 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index d3f3290..596e0f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.commons.threads</artifactId>
     <packaging>bundle</packaging>
-    <version>2.0.4-incubator</version>
+    <version>2.0.5-incubator-SNAPSHOT</version>
 
     <name>Apache Sling Thread Support</name>
     <description>
@@ -37,9 +37,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/tags/org.apache.sling.commons.threads-2.0.4-incubator</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/tags/org.apache.sling.commons.threads-2.0.4-incubator</developerConnection>
-        <url>http://svn.apache.org/viewvc/incubator/sling/tags/org.apache.sling.commons.threads-2.0.4-incubator</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads</developerConnection>
+        <url>http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/commons/threads</url>
     </scm>
 
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 07/14: SLING-1011 : Remove disclaimer file.

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 10df9b4735067973fc37e5919cb8c1f09d102e91
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Jun 18 09:57:04 2009 +0000

    SLING-1011 : Remove disclaimer file.
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@785993 13f79535-47bb-0310-9956-ffa450edef68
---
 src/main/resources/META-INF/DISCLAIMER | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/src/main/resources/META-INF/DISCLAIMER b/src/main/resources/META-INF/DISCLAIMER
deleted file mode 100644
index 90850c2..0000000
--- a/src/main/resources/META-INF/DISCLAIMER
+++ /dev/null
@@ -1,7 +0,0 @@
-Apache Sling is an effort undergoing incubation at The Apache Software Foundation (ASF),
-sponsored by the Apache Jackrabbit PMC. Incubation is required of all newly accepted
-projects until a further review indicates that the infrastructure, communications,
-and decision making process have stabilized in a manner consistent with other
-successful ASF projects. While incubation status is not necessarily a reflection of
-the completeness or stability of the code, it does indicate that the project has yet
-to be fully endorsed by the ASF.
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 09/14: SLING-1011 : Remove disclaimer from readme's, adjust links to webite, fix versions in poms.

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 97b34884e20394839213729232c1e9eb16adc408
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Jun 18 10:47:55 2009 +0000

    SLING-1011 : Remove disclaimer from readme's, adjust links to webite, fix versions in poms.
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@786012 13f79535-47bb-0310-9956-ffa450edef68
---
 README.txt | 10 ----------
 pom.xml    |  2 +-
 2 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/README.txt b/README.txt
index 0b5beff..53f3771 100644
--- a/README.txt
+++ b/README.txt
@@ -2,16 +2,6 @@ Apache Sling Threads
 
 Support for thread handling like pooling.
 
-Disclaimer
-==========
-Apache Sling is an effort undergoing incubation at The Apache Software Foundation (ASF),
-sponsored by the Apache Jackrabbit PMC. Incubation is required of all newly accepted
-projects until a further review indicates that the infrastructure, communications,
-and decision making process have stabilized in a manner consistent with other
-successful ASF projects. While incubation status is not necessarily a reflection of
-the completeness or stability of the code, it does indicate that the project has yet
-to be fully endorsed by the ASF.
-
 Getting Started
 ===============
 
diff --git a/pom.xml b/pom.xml
index 6aeb166..4cdcd36 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.commons.threads</artifactId>
     <packaging>bundle</packaging>
-    <version>2.0.5-incubator-SNAPSHOT</version>
+    <version>2.0.5-SNAPSHOT</version>
 
     <name>Apache Sling Thread Support</name>
     <description>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 02/14: [maven-release-plugin] prepare release org.apache.sling.commons.threads-2.0.4-incubator

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 03fc7dc37bd7837ce2ca885fdca2b0db5902a305
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue May 5 15:22:38 2009 +0000

    [maven-release-plugin] prepare release org.apache.sling.commons.threads-2.0.4-incubator
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads@771796 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 589ae1f..d3f3290 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.commons.threads</artifactId>
     <packaging>bundle</packaging>
-    <version>2.0.3-incubator-SNAPSHOT</version>
+    <version>2.0.4-incubator</version>
 
     <name>Apache Sling Thread Support</name>
     <description>
@@ -37,9 +37,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads</developerConnection>
-        <url>http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/commons/threads</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/tags/org.apache.sling.commons.threads-2.0.4-incubator</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/tags/org.apache.sling.commons.threads-2.0.4-incubator</developerConnection>
+        <url>http://svn.apache.org/viewvc/incubator/sling/tags/org.apache.sling.commons.threads-2.0.4-incubator</url>
     </scm>
 
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 12/14: SLING-1244 : Redesign thread pool management

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 3423042c53fda9701009ae3d36bbc889e7e800e0
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Dec 17 12:38:10 2009 +0000

    SLING-1244 : Redesign thread pool management
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@891673 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  11 +-
 .../threads/ModifiableThreadPoolConfig.java        | 298 ++++++++++++++++++
 .../apache/sling/commons/threads/ThreadPool.java   |   8 +-
 .../sling/commons/threads/ThreadPoolConfig.java    | 197 +++---------
 .../sling/commons/threads/ThreadPoolManager.java   |  33 +-
 .../sling/commons/threads/impl/Activator.java      |  74 +++++
 .../commons/threads/impl/DefaultThreadPool.java    |  32 +-
 .../threads/impl/DefaultThreadPoolManager.java     | 343 +++++++++++++++++----
 .../threads/impl/ExtendedThreadFactory.java        |   1 -
 .../commons/threads/impl/ThreadPoolFacade.java     |  84 +++++
 .../OSGI-INF/metatype/metatype.properties          |  51 +++
 src/main/resources/OSGI-INF/metatype/metatype.xml  |  74 +++++
 12 files changed, 956 insertions(+), 250 deletions(-)

diff --git a/pom.xml b/pom.xml
index 931fd47..12e1c92 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.commons.threads</artifactId>
     <packaging>bundle</packaging>
-    <version>2.0.5-SNAPSHOT</version>
+    <version>3.0.0-SNAPSHOT</version>
 
     <name>Apache Sling Thread Support</name>
     <description>
@@ -54,8 +54,11 @@
                 <extensions>true</extensions>
                 <configuration>
                     <instructions>
+                        <Bundle-Activator>
+                            org.apache.sling.commons.threads.impl.Activator
+                        </Bundle-Activator>
                         <Export-Package>
-                            org.apache.sling.commons.threads;version=${pom.version}
+                            org.apache.sling.commons.threads;version=3.0.0
                         </Export-Package>
                         <Private-Package>
                             org.apache.sling.commons.threads.impl
@@ -81,6 +84,10 @@
     <dependencies>
         <dependency>
             <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/commons/threads/ModifiableThreadPoolConfig.java b/src/main/java/org/apache/sling/commons/threads/ModifiableThreadPoolConfig.java
new file mode 100644
index 0000000..51bd166
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/threads/ModifiableThreadPoolConfig.java
@@ -0,0 +1,298 @@
+/*
+ * 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.sling.commons.threads;
+
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * This is a modifiable thread pool configuration that can be instantiated
+ * and then configured to create a new thread pool.
+ *
+ * The default values for this configuration are:
+ * - min pool size: 5
+ * - max pool size: 5
+ * - queue size: -1
+ * - keep alive time: 60000
+ * - block policy: RUN
+ * - shutdown graceful: false
+ * - shutdown wait time: -1
+ * - priority: NORM
+ * - daemon: false
+ * - factory: null (= default jvm thread factory)
+ */
+public final class ModifiableThreadPoolConfig implements ThreadPoolConfig {
+
+    /** Configuration property for the min pool size. */
+    public static final String PROPERTY_MIN_POOL_SIZE = "minPoolSize";
+    /** Configuration property for the max pool size. */
+    public static final String PROPERTY_MAX_POOL_SIZE = "maxPoolSize";
+    /** Configuration property for the queue size. */
+    public static final String PROPERTY_QUEUE_SIZE = "queueSize";
+    /** Configuration property for the keep alive time. */
+    public static final String PROPERTY_KEEP_ALIVE_TIME = "keepAliveTime";
+    /** Configuration property for the block policy. */
+    public static final String PROPERTY_BLOCK_POLICY = "blockPolicy";
+    /** Configuration property for the shutdown graceful flag. */
+    public static final String PROPERTY_SHUTDOWN_GRACEFUL = "shutdownGraceful";
+    /** Configuration property for the shutdown wait time. */
+    public static final String PROPERTY_SHUTDOWN_WAIT_TIME = "shutdownWaitTime";
+    /** Configuration property for the priority. */
+    public static final String PROPERTY_PRIORITY = "priority";
+    /** Configuration property for the daemon flag. */
+    public static final String PROPERTY_DAEMON = "daemon";
+    /** Configuration property for the thread pool name. */
+    public static final String PROPERTY_NAME = "name";
+
+    /** The min pool size. */
+    private int minPoolSize = 5;
+
+    /** The max pool size. */
+    private int maxPoolSize = 5;
+
+    /** The queue size */
+    private int queueSize = -1;
+
+    /** The keep alive time. */
+    private long  keepAliveTime = 60000L;
+
+    /** The thread pool policy. Default is RUN. */
+    private ThreadPoolPolicy blockPolicy = ThreadPoolPolicy.RUN;
+
+    /** Try to shutdown gracefully? */
+    private  boolean shutdownGraceful = false;
+
+    /** Wait time during shutdown. */
+    private  int shutdownWaitTimeMs = -1;
+
+    /** Optional thread factory. */
+    private  ThreadFactory factory;
+
+    /** Thread priority. */
+    private  ThreadPriority   priority = ThreadPriority.NORM;
+
+    /** Create daemon threads? */
+    private  boolean isDaemon = false;
+
+    /**
+     * Create a new default configuration.
+     */
+    public ModifiableThreadPoolConfig() {
+        // nothing to do
+    }
+
+    /**
+     * Clone an existing configuration
+     * @param copy The config to clone
+     */
+    public ModifiableThreadPoolConfig(final ThreadPoolConfig copy) {
+        if ( copy != null ) {
+            this.minPoolSize = copy.getMinPoolSize();
+            this.maxPoolSize = copy.getMaxPoolSize();
+            this.queueSize = copy.getQueueSize();
+            this.keepAliveTime = copy.getKeepAliveTime();
+            this.blockPolicy = copy.getBlockPolicy();
+            this.shutdownGraceful = copy.isShutdownGraceful();
+            this.shutdownWaitTimeMs = copy.getShutdownWaitTimeMs();
+            this.factory = copy.getFactory();
+            this.priority = copy.getPriority();
+            this.isDaemon = copy.isDaemon();
+        }
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getMinPoolSize()
+     */
+    public int getMinPoolSize() {
+        return minPoolSize;
+    }
+
+    /**
+     * Set the min pool size.
+     * @param minPoolSize New min pool size.
+     */
+    public void setMinPoolSize(final int minPoolSize) {
+        this.minPoolSize = minPoolSize;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getMaxPoolSize()
+     */
+    public int getMaxPoolSize() {
+        return maxPoolSize;
+    }
+
+    /**
+     * Set the max pool size.
+     * @param maxPoolSize New max pool size.
+     */
+    public void setMaxPoolSize(final int maxPoolSize) {
+        this.maxPoolSize = maxPoolSize;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getQueueSize()
+     */
+    public int getQueueSize() {
+        return queueSize;
+    }
+
+    /**
+     * Set the queue size.
+     * @param queueSize New queue size.
+     */
+    public void setQueueSize(final int queueSize) {
+        this.queueSize = queueSize;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getKeepAliveTime()
+     */
+    public long getKeepAliveTime() {
+        return keepAliveTime;
+    }
+
+    /**
+     * Set the keep alive time.
+     * @param keepAliveTime New keep alive time.
+     */
+    public void setKeepAliveTime(final long keepAliveTime) {
+        this.keepAliveTime = keepAliveTime;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getBlockPolicy()
+     */
+    public ThreadPoolPolicy getBlockPolicy() {
+        return blockPolicy;
+    }
+
+    /**
+     * Set the block policy.
+     * @param blockPolicy The new block policy.
+     * @throws IllegalArgumentException If blockPolicy is null.
+     */
+    public void setBlockPolicy(final ThreadPoolPolicy blockPolicy) {
+        this.blockPolicy = blockPolicy;
+        if ( blockPolicy == null ) {
+            throw new IllegalArgumentException("Policy must not be null.");
+        }
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#isShutdownGraceful()
+     */
+    public boolean isShutdownGraceful() {
+        return shutdownGraceful;
+    }
+
+    /**
+     * Set if the pool should be shutdown graceful.
+     * @param shutdownGraceful The shutdown graceful setting.
+     */
+    public void setShutdownGraceful(final boolean shutdownGraceful) {
+        this.shutdownGraceful = shutdownGraceful;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getShutdownWaitTimeMs()
+     */
+    public int getShutdownWaitTimeMs() {
+        return shutdownWaitTimeMs;
+    }
+
+    /**
+     * Set the shutdown wait time.
+     * @param shutdownWaitTimeMs The new shutdown wait time.
+     */
+    public void setShutdownWaitTimeMs(final int shutdownWaitTimeMs) {
+        this.shutdownWaitTimeMs = shutdownWaitTimeMs;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getFactory()
+     */
+    public ThreadFactory getFactory() {
+        return factory;
+    }
+
+    /**
+     * Set the thread factory.
+     * @param factory The thread factory to be used or <code>null</code> to use
+     *                the default thread factory.
+     */
+    public void setFactory(final ThreadFactory factory) {
+        this.factory = factory;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#getPriority()
+     */
+    public ThreadPriority getPriority() {
+        return priority;
+    }
+
+    /**
+     * Set the thread priority.
+     * @param priority The thread priority.
+     * @throws IllegalArgumentException If priority is null.
+     */
+    public void setPriority(final ThreadPriority priority) {
+        if ( priority == null ) {
+            throw new IllegalArgumentException("Priority must not be null.");
+        }
+        this.priority = priority;
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolConfig#isDaemon()
+     */
+    public boolean isDaemon() {
+        return isDaemon;
+    }
+
+    /**
+     * Set the daemon handling.
+     * @param isDaemon The daemon setting.
+     */
+    public void setDaemon(final boolean isDaemon) {
+        this.isDaemon = isDaemon;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( obj instanceof ModifiableThreadPoolConfig ) {
+            final ModifiableThreadPoolConfig o = (ModifiableThreadPoolConfig)obj;
+            return this.minPoolSize == o.minPoolSize
+                && this.maxPoolSize == o.maxPoolSize
+                && this.queueSize == o.queueSize
+                && this.keepAliveTime == o.keepAliveTime
+                && this.blockPolicy.equals(o.blockPolicy)
+                && this.shutdownGraceful == o.shutdownGraceful
+                && this.shutdownWaitTimeMs == o.shutdownWaitTimeMs
+                && this.priority.equals(o.priority)
+                && this.isDaemon == o.isDaemon;
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        // we actually don't need hash code, but we don't want to violate the
+        // contract with equals
+        return this.blockPolicy.hashCode();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/commons/threads/ThreadPool.java b/src/main/java/org/apache/sling/commons/threads/ThreadPool.java
index e99c13e..d06d701 100644
--- a/src/main/java/org/apache/sling/commons/threads/ThreadPool.java
+++ b/src/main/java/org/apache/sling/commons/threads/ThreadPool.java
@@ -17,10 +17,8 @@
 package org.apache.sling.commons.threads;
 
 /**
- * The ThreadPool interface allows to start runnables by
+ * The thread pool interface allows to start runnables by
  * getting threads from a managed pool.
- *
- * @version $Id$
  */
 public interface ThreadPool {
 
@@ -36,9 +34,7 @@ public interface ThreadPool {
     String getName();
 
     /**
-     * Shut down the thread pool.
+     * The thread pool configuration.
      */
-    void shutdown();
-
     ThreadPoolConfig getConfiguration();
 }
diff --git a/src/main/java/org/apache/sling/commons/threads/ThreadPoolConfig.java b/src/main/java/org/apache/sling/commons/threads/ThreadPoolConfig.java
index 1274aaa..57fe344 100644
--- a/src/main/java/org/apache/sling/commons/threads/ThreadPoolConfig.java
+++ b/src/main/java/org/apache/sling/commons/threads/ThreadPoolConfig.java
@@ -19,11 +19,9 @@ package org.apache.sling.commons.threads;
 import java.util.concurrent.ThreadFactory;
 
 /**
- * The ThreadPool configuration.
- *
- * @version $Id$
+ * The thread pool configuration.
  */
-public final class ThreadPoolConfig {
+public interface ThreadPoolConfig {
 
     /** The thread pool policies. */
     public enum ThreadPoolPolicy {
@@ -39,164 +37,65 @@ public final class ThreadPoolConfig {
         MAX
     };
 
-    /** The min pool size. */
-    private int minPoolSize = 5;
-
-    /** The max pool size. */
-    private int maxPoolSize = 5;
-
-    /** The queue size */
-    private int queueSize = -1;
-
-    /** The keep alive time. */
-    private long  keepAliveTime = 60000L;
-
-    /** The thread pool policy. Default is RUN. */
-    private ThreadPoolPolicy blockPolicy = ThreadPoolPolicy.RUN;
-
-    private  boolean shutdownGraceful = false;
-
-    private  int shutdownWaitTimeMs = -1;
-
-    private  ThreadFactory factory;
-
-    private  ThreadPriority   priority = ThreadPriority.NORM;
-
-    private  boolean isDaemon = false;
-
-    /** Can this configuration still be changed? */
-    private boolean isWritable = true;
-
     /**
-     * Create a new default configuration.
+     * Return the minimum pool size.
+     * @return The minimum pool size.
      */
-    public ThreadPoolConfig() {
-        // nothing to do
-    }
+    int getMinPoolSize();
 
     /**
-     * Clone an existing configuration
-     * @param copy The config to clone
+     * Return the maximum pool size
+     * @return The maximum pool size.
      */
-    public ThreadPoolConfig(ThreadPoolConfig copy) {
-        this.minPoolSize = copy.minPoolSize;
-        this.maxPoolSize = copy.maxPoolSize;
-        this.queueSize = copy.queueSize;
-        this.keepAliveTime = copy.keepAliveTime;
-        this.blockPolicy = copy.blockPolicy;
-        this.shutdownGraceful = copy.shutdownGraceful;
-        this.shutdownWaitTimeMs = copy.shutdownWaitTimeMs;
-        this.factory = copy.factory;
-        this.priority = copy.priority;
-        this.isDaemon = copy.isDaemon;
-    }
-
-    protected void checkWritable() {
-        if ( !isWritable ) {
-            throw new IllegalStateException("ThreadPoolConfig is read-only.");
-        }
-    }
+    int getMaxPoolSize();
 
     /**
-     * Make the configuration read-only.
+     * Return the queue size.
+     * @return The queue size.
      */
-    public void makeReadOnly() {
-        this.isWritable = false;
-    }
-
-    public int getMinPoolSize() {
-        return minPoolSize;
-    }
-
-    public void setMinPoolSize(int minPoolSize) {
-        this.checkWritable();
-        this.minPoolSize = minPoolSize;
-    }
-
-    public int getMaxPoolSize() {
-        return maxPoolSize;
-    }
-
-    public void setMaxPoolSize(int maxPoolSize) {
-        this.checkWritable();
-        this.maxPoolSize = maxPoolSize;
-    }
-
-    public int getQueueSize() {
-        return queueSize;
-    }
-
-    public void setQueueSize(int queueSize) {
-        this.checkWritable();
-        this.queueSize = queueSize;
-    }
-
-    public long getKeepAliveTime() {
-        return keepAliveTime;
-    }
+    int getQueueSize();
 
-    public void setKeepAliveTime(long keepAliveTime) {
-        this.checkWritable();
-        this.keepAliveTime = keepAliveTime;
-    }
-
-    public ThreadPoolPolicy getBlockPolicy() {
-        return blockPolicy;
-    }
-
-    public void setBlockPolicy(ThreadPoolPolicy blockPolicy) {
-        this.checkWritable();
-        this.blockPolicy = blockPolicy;
-        if ( blockPolicy == null ) {
-            throw new IllegalArgumentException("Policy must not be null.");
-        }
-    }
-
-    public boolean isShutdownGraceful() {
-        return shutdownGraceful;
-    }
-
-    public void setShutdownGraceful(boolean shutdownGraceful) {
-        this.checkWritable();
-        this.shutdownGraceful = shutdownGraceful;
-    }
-
-    public int getShutdownWaitTimeMs() {
-        return shutdownWaitTimeMs;
-    }
-
-    public void setShutdownWaitTimeMs(int shutdownWaitTimeMs) {
-        this.checkWritable();
-        this.shutdownWaitTimeMs = shutdownWaitTimeMs;
-    }
+    /**
+     * Return the keep alive time.
+     * @return The keep alive time.
+     */
+    long getKeepAliveTime();
 
-    public ThreadFactory getFactory() {
-        return factory;
-    }
+    /**
+     * Return the block policy.
+     * @return The block policy.
+     */
+    ThreadPoolPolicy getBlockPolicy();
 
-    public void setFactory(ThreadFactory factory) {
-        this.checkWritable();
-        this.factory = factory;
-    }
+    /**
+     * Should this pool shutdown graceful.
+     * @return <code>true</code> if the pool should shutdown graceful.
+     */
+    boolean isShutdownGraceful();
 
-    public ThreadPriority getPriority() {
-        return priority;
-    }
+    /**
+     * Return the shutdown wait time in ms. A value below 1 means
+     * no waiting at shutdown.
+     * @return The shutdown wait time in ms.
+     */
+    int getShutdownWaitTimeMs();
 
-    public void setPriority(ThreadPriority priority) {
-        this.checkWritable();
-        if ( priority == null ) {
-            throw new IllegalArgumentException("Priority must not be null.");
-        }
-        this.priority = priority;
-    }
+    /**
+     * Return the thread pool factory. A value of null means the
+     * default jvm thread pool factory is used.
+     * @return The thread pool factory or <code>null</code>
+     */
+    ThreadFactory getFactory();
 
-    public boolean isDaemon() {
-        return isDaemon;
-    }
+    /**
+     * Return the priority for the threads.
+     * @return The priority for the threads.
+     */
+    ThreadPriority getPriority();
 
-    public void setDaemon(boolean isDaemon) {
-        this.checkWritable();
-        this.isDaemon = isDaemon;
-    }
+    /**
+     * Return if daemon threads should be created.
+     * @return <code>true</code> if daemon threads should be created.
+     */
+    boolean isDaemon();
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/commons/threads/ThreadPoolManager.java b/src/main/java/org/apache/sling/commons/threads/ThreadPoolManager.java
index fc9c060..e94a116 100644
--- a/src/main/java/org/apache/sling/commons/threads/ThreadPoolManager.java
+++ b/src/main/java/org/apache/sling/commons/threads/ThreadPoolManager.java
@@ -20,7 +20,6 @@ package org.apache.sling.commons.threads;
 /**
  * The <cod>ThreadPoolManager</code> manages thread pools.
  *
- * @version $Id$
  */
 public interface ThreadPoolManager {
 
@@ -28,29 +27,27 @@ public interface ThreadPoolManager {
     String DEFAULT_THREADPOOL_NAME = "default";
 
     /**
-     * Add a new pool.
-     * If a pool with the same name already exists, the new pool is not added
-     * and false is returned.
-     * @param pool The pool.
-     * @return True if the pool could be added, false otherwise.
-     */
-    boolean add(ThreadPool pool);
-
-    /**
      * Get a thread pool.
-     * If there is no thread pool with the given name, the default thread
-     * pool is returned.
+     * If there is no thread pool with the given name, a new thread pool with
+     * the default configuration is created and returned.
+     * A thread pool must be released when not used anymore with the
+     * {@link #release(ThreadPool)} method.
      * @param name The name of the thread pool or null for the default pool.
+     * @return A thread pool.
      */
     ThreadPool get(String name);
 
     /**
-     * Create a new thread pool.
-     * If a pool with the same name already exists, no new pool is created
-     * and <code>null</code> is returned.
-     * @param name Name must not be null.
+     * Create a new thread pool with this configuration.
+     * A thread pool must be released when not used anymore with the
+     * {@link #release(ThreadPool)} method.
      * @param config The thread pool configuration.
+     * @return A new thread pool.
+     */
+    ThreadPool create(ThreadPoolConfig config);
+
+    /**
+     * Release the thread pool again.
      */
-    ThreadPool create(String name,
-                      ThreadPoolConfig config);
+    void release(ThreadPool pool);
 }
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/Activator.java b/src/main/java/org/apache/sling/commons/threads/impl/Activator.java
new file mode 100644
index 0000000..7d02ae5
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/threads/impl/Activator.java
@@ -0,0 +1,74 @@
+/*
+ * 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.sling.commons.threads.impl;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.sling.commons.threads.ThreadPoolManager;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ManagedServiceFactory;
+
+/**
+ * This activator registers the thread pool manager.
+ */
+public class Activator implements BundleActivator {
+
+    /** The service registration for the thread pool manager. */
+    private ServiceRegistration serviceReg;
+
+    /** The thread pool manager. */
+    private DefaultThreadPoolManager service;
+
+    /** The bundle context. */
+    private BundleContext bundleContext;
+
+    /**
+     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+     */
+    public void start(BundleContext context) {
+        this.bundleContext = context;
+        final Dictionary<String, Object> props = new Hashtable<String, Object>();
+        props.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Thread Pool Manager");
+        props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
+        props.put(Constants.SERVICE_PID, DefaultThreadPool.class.getName() + ".factory");
+        this.service = new DefaultThreadPoolManager(this.bundleContext, props);
+        this.serviceReg = this.bundleContext.registerService(new String[] {ThreadPoolManager.class.getName(),
+                ManagedServiceFactory.class.getName()}, service, props);
+    }
+
+    /**
+     * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop(BundleContext context) {
+        if ( this.serviceReg != null ) {
+            this.serviceReg.unregister();
+            this.serviceReg = null;
+        }
+
+        if ( this.service != null ) {
+            this.service.destroy();
+            this.service = null;
+        }
+        this.bundleContext = null;
+    }
+}
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java b/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
index b75608f..bc954bf 100644
--- a/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
+++ b/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.sling.commons.threads.ModifiableThreadPoolConfig;
 import org.apache.sling.commons.threads.ThreadPool;
 import org.apache.sling.commons.threads.ThreadPoolConfig;
 import org.apache.sling.commons.threads.ThreadPoolManager;
@@ -35,8 +36,6 @@ import org.slf4j.LoggerFactory;
 /**
  * The DefaultThreadPool class implements the {@link ThreadPool} interface.
  * Instances of this class are managed by the {@link ThreadPoolManager}.
- *
- * @version $Id$
  */
 public class DefaultThreadPool
     implements ThreadPool {
@@ -50,7 +49,7 @@ public class DefaultThreadPool
     /** The executor. */
     protected ThreadPoolExecutor executor;
 
-    protected final ThreadPoolConfig configuration;
+    protected final ModifiableThreadPoolConfig configuration;
 
     /**
      * Create a new thread pool.
@@ -58,9 +57,7 @@ public class DefaultThreadPool
      *               is used
      */
     public DefaultThreadPool(final String name,
-                             ThreadPoolConfig origConfig) {
-        this.logger.info("ThreadPool [{}] initializing ...", name);
-
+                             final ThreadPoolConfig origConfig) {
         // name
         if ( name != null ) {
             this.name = name;
@@ -68,13 +65,15 @@ public class DefaultThreadPool
             this.name = DefaultThreadPoolManager.DEFAULT_THREADPOOL_NAME;
         }
 
-        this.configuration = new ThreadPoolConfig(origConfig);
+        this.logger.info("Initializing thread pool [{}]  ...", this.name);
+
+        this.configuration = new ModifiableThreadPoolConfig(origConfig);
 
         // factory
         final ThreadFactory delegateThreadFactory;
         if (this.configuration.getFactory() == null) {
-            logger.warn("No ThreadFactory is configured. Will use JVM default thread factory."
-                + ExtendedThreadFactory.class.getName());
+            logger.debug("Thread pool [{}] ; No ThreadFactory is configured. Will use JVM default thread factory: {}",
+                    this.name, ExtendedThreadFactory.class.getName());
             delegateThreadFactory = Executors.defaultThreadFactory();
         } else {
             delegateThreadFactory = this.configuration.getFactory();
@@ -82,7 +81,7 @@ public class DefaultThreadPool
         // Min pool size
         if (this.configuration.getMinPoolSize() < 1) {
             this.configuration.setMinPoolSize(1);
-            this.logger.warn("min-pool-size < 1 for pool \"" + name + "\". Set to 1");
+            this.logger.warn("min-pool-size < 1 for pool \"" + this.name + "\". Set to 1");
         }
         // Max pool size
         if ( this.configuration.getMaxPoolSize() < 0 ) {
@@ -95,7 +94,7 @@ public class DefaultThreadPool
         // Keep alive time
         if (this.configuration.getKeepAliveTime() < 0) {
             this.configuration.setKeepAliveTime(1000);
-            this.logger.warn("keep-alive-time-ms < 0 for pool \"" + name + "\". Set to 1000");
+            this.logger.warn("keep-alive-time-ms < 0 for pool \"" + this.name + "\". Set to 1000");
         }
 
         // Queue
@@ -132,8 +131,7 @@ public class DefaultThreadPool
                 queue,
                 threadFactory,
                 handler);
-        this.configuration.makeReadOnly();
-        this.logger.info("ThreadPool [{}] initialized.", name);
+        this.logger.info("Thread pool [{}] initialized.", name);
     }
 
     /**
@@ -173,9 +171,10 @@ public class DefaultThreadPool
     }
 
     /**
-     * @see org.apache.sling.commons.threads.ThreadPool#shutdown()
+     * Shut down the threadpool.
      */
     public void shutdown() {
+        this.logger.info("Shutting down thread pool [{}] ...", name);
         if ( this.executor != null ) {
             if (this.configuration.isShutdownGraceful()) {
                 this.executor.shutdown();
@@ -186,16 +185,17 @@ public class DefaultThreadPool
             try {
                 if (this.configuration.getShutdownWaitTimeMs() > 0) {
                     if (!this.executor.awaitTermination(this.configuration.getShutdownWaitTimeMs(), TimeUnit.MILLISECONDS)) {
-                        logger.warn("running commands have not terminated within "
+                        logger.warn("Running commands have not terminated within "
                             + this.configuration.getShutdownWaitTimeMs()
                             + "ms. Will shut them down by interruption");
                         this.executor.shutdownNow();
                     }
                 }
             } catch (final InterruptedException ie) {
-                this.logger.error("Cannot shutdown ThreadPool", ie);
+                this.logger.error("Cannot shutdown thread pool [" + this.name + "]", ie);
             }
             this.executor = null;
         }
+        this.logger.info("Thread pool [{}] is shut down.", this.name);
     }
 }
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPoolManager.java b/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPoolManager.java
index 4ed4811..c70dac6 100644
--- a/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPoolManager.java
+++ b/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPoolManager.java
@@ -16,118 +16,345 @@
  */
 package org.apache.sling.commons.threads.impl;
 
+import java.io.IOException;
+import java.util.Dictionary;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Map;
+import java.util.UUID;
 
+import org.apache.sling.commons.threads.ModifiableThreadPoolConfig;
 import org.apache.sling.commons.threads.ThreadPool;
 import org.apache.sling.commons.threads.ThreadPoolConfig;
 import org.apache.sling.commons.threads.ThreadPoolManager;
-import org.osgi.service.component.ComponentContext;
+import org.apache.sling.commons.threads.ThreadPoolConfig.ThreadPoolPolicy;
+import org.apache.sling.commons.threads.ThreadPoolConfig.ThreadPriority;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * The DefaultThreadPoolManager implements the {@link ThreadPoolManager} interface
- * and is responsible to manage {@link ThreadPool}s.
- *
- * @scr.component metatype="no"
- * @scr.service interface="org.apache.sling.commons.threads.ThreadPoolManager"
- *
- * @version $Id$
+ * and is responsible for managing {@link ThreadPool}s.
  */
-public class DefaultThreadPoolManager implements ThreadPoolManager {
+public class DefaultThreadPoolManager
+    implements ThreadPoolManager, ManagedServiceFactory {
 
     /** By default we use the logger for this class. */
-    protected Logger logger = LoggerFactory.getLogger(getClass());
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
 
     /** The managed thread pools */
-    protected final Map<String, ThreadPool> pools = new HashMap<String, ThreadPool>();
+    protected final Map<String, Entry> pools = new HashMap<String, Entry>();
+
+    /** The properties. */
+    protected final Dictionary<String, Object> properties;
+
+    /** The bundle context. */
+    protected final BundleContext bundleContext;
+
+    /** Service tracker for the config admin. */
+    protected final ServiceTracker configAdminTracker;
 
     /**
-     * Activate this component.
+     * Constructor and activate this component.
      */
-    protected void activate(ComponentContext context) throws Exception {
-        this.logger.info("Starting thread pool manager.");
-        final ThreadPool defaultPool = new DefaultThreadPool(
-                    DEFAULT_THREADPOOL_NAME,
-                    new ThreadPoolConfig());
-        synchronized ( this.pools ) {
-            this.pools.put(defaultPool.getName(), defaultPool);
-        }
-        this.logger.info("Thread pool manager startet with default pool.");
+    public DefaultThreadPoolManager(final BundleContext bc, final Dictionary<String, Object> props) {
+        this.properties = props;
+        this.bundleContext = bc;
+        this.configAdminTracker = new ServiceTracker(bc, ConfigurationAdmin.class.getName(), null);
+        this.configAdminTracker.open();
+        this.logger.info("Startet Apache Sling Thread Pool Manager: {}", getPid());
     }
 
     /**
      * Deactivate this component.
      */
-    protected void deactivate(ComponentContext context) throws Exception {
-        this.logger.info("Stopping thread pool manager.");
+    public void destroy() {
         this.logger.debug("Disposing all thread pools");
 
-        synchronized ( this.pools ) {
-            for (ThreadPool pool : this.pools.values()) {
-                this.logger.debug("Shutting down thread pool {}", pool.getName());
-
-                pool.shutdown();
+        this.configAdminTracker.close();
 
-                this.logger.debug("Thread pool " + pool.getName() + " is shut down.");
+        synchronized ( this.pools ) {
+            for (final Entry entry : this.pools.values()) {
+                entry.shutdown();
             }
             this.pools.clear();
         }
-        this.logger.info("Thread pool manager stopped.");
+        this.logger.info("Stopped Apache Sling Thread Pool Manager.");
     }
 
     /**
-     * @see org.apache.sling.commons.threads.ThreadPoolManager#add(org.apache.sling.commons.threads.ThreadPool)
+     * Helper method to get the pid
      */
-    public boolean add(ThreadPool pool) {
-        synchronized ( this.pools ) {
-            if (null != pools.get(pool.getName())) {
-                return false;
-            }
-            pools.put(pool.getName(), pool);
+    private String getPid() {
+        // as the activator put a string in the props we know that this is a string
+        return this.properties.get(Constants.SERVICE_PID).toString();
+    }
+
+    /**
+     * Create a dictionary with configuration properties for the configuration
+     */
+    private Dictionary<String, Object> getProperties(final String poolName, final ThreadPoolConfig config) {
+        final Dictionary<String, Object> props = new Hashtable<String, Object>();
+        props.put(ModifiableThreadPoolConfig.PROPERTY_MIN_POOL_SIZE, config.getMinPoolSize());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_MAX_POOL_SIZE, config.getMaxPoolSize());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_QUEUE_SIZE, config.getQueueSize());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_KEEP_ALIVE_TIME, config.getKeepAliveTime());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_BLOCK_POLICY, config.getBlockPolicy().toString());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_SHUTDOWN_GRACEFUL, config.isShutdownGraceful());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_SHUTDOWN_WAIT_TIME, config.getShutdownWaitTimeMs());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_PRIORITY, config.getPriority().toString());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_DAEMON, config.isDaemon());
+        props.put(ModifiableThreadPoolConfig.PROPERTY_NAME, poolName);
+
+        return props;
+    }
+
+    /**
+     * Create a thread pool configuration from a config admin configuration
+     */
+    private ThreadPoolConfig createConfig(final Dictionary<String, Object> props) {
+        final ModifiableThreadPoolConfig config = new ModifiableThreadPoolConfig();
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_MIN_POOL_SIZE) != null ) {
+            config.setMinPoolSize((Integer)props.get(ModifiableThreadPoolConfig.PROPERTY_MIN_POOL_SIZE));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_MAX_POOL_SIZE) != null ) {
+            config.setMaxPoolSize((Integer)props.get(ModifiableThreadPoolConfig.PROPERTY_MAX_POOL_SIZE));
         }
-        return true;
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_QUEUE_SIZE) != null ) {
+            config.setQueueSize((Integer)props.get(ModifiableThreadPoolConfig.PROPERTY_QUEUE_SIZE));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_KEEP_ALIVE_TIME) != null ) {
+            config.setKeepAliveTime((Long)props.get(ModifiableThreadPoolConfig.PROPERTY_KEEP_ALIVE_TIME));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_BLOCK_POLICY) != null ) {
+            config.setBlockPolicy(ThreadPoolPolicy.valueOf(props.get(ModifiableThreadPoolConfig.PROPERTY_BLOCK_POLICY).toString()));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_SHUTDOWN_GRACEFUL) != null ) {
+            config.setShutdownGraceful((Boolean)props.get(ModifiableThreadPoolConfig.PROPERTY_SHUTDOWN_GRACEFUL));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_SHUTDOWN_WAIT_TIME) != null ) {
+            config.setShutdownWaitTimeMs((Integer)props.get(ModifiableThreadPoolConfig.PROPERTY_SHUTDOWN_WAIT_TIME));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_PRIORITY) != null ) {
+            config.setPriority(ThreadPriority.valueOf(props.get(ModifiableThreadPoolConfig.PROPERTY_PRIORITY).toString()));
+        }
+        if ( props.get(ModifiableThreadPoolConfig.PROPERTY_DAEMON) != null ) {
+            config.setDaemon((Boolean)props.get(ModifiableThreadPoolConfig.PROPERTY_DAEMON));
+        }
+        return config;
     }
 
     /**
      * @see org.apache.sling.commons.threads.ThreadPoolManager#get(java.lang.String)
      */
-    public ThreadPool get(String name) {
-        if ( name == null ) {
-            name = DEFAULT_THREADPOOL_NAME;
-        }
+    public ThreadPool get(final String name) {
+        final String poolName = (name == null ? DEFAULT_THREADPOOL_NAME : name);
+        Entry entry = null;
         synchronized (this.pools) {
-            ThreadPool pool = this.pools.get(name);
-            if ( pool == null && !(name.equals(DEFAULT_THREADPOOL_NAME))) {
-                this.logger.info("Requested pool {} is not available, returning default pool.", name);
-                pool = this.pools.get(DEFAULT_THREADPOOL_NAME);
+            entry = this.pools.get(poolName);
+            if ( entry == null ) {
+                this.logger.debug("Creating new pool with name {}", poolName);
+                final ModifiableThreadPoolConfig config = new ModifiableThreadPoolConfig();
+                // check for config admin
+                final ConfigurationAdmin ca = (ConfigurationAdmin) this.configAdminTracker.getService();
+                if ( ca != null ) {
+                    try {
+                        final Configuration caConfig = ca.createFactoryConfiguration(getPid());
+                        caConfig.update(this.getProperties(poolName, config));
+                        entry = new Entry(caConfig.getProperties().get(Constants.SERVICE_PID).toString(), config, poolName);
+                    } catch (IOException e) {
+                        // there is not much we can do if we get an io exception
+                        // just log and continue
+                        this.logger.error("Unable to create configuration for thread pool " + poolName, e);
+                    }
+                } else {
+                    this.logger.error("Configuration admin is not available.");
+                }
+                // sanity check - if CA is not available or a problem occured during persisting
+                // we don't have an entry
+                if ( entry == null ) {
+                    entry = new Entry(null, config, poolName);
+                }
+                this.pools.put(poolName, entry);
             }
-            return pool;
+            return entry.incUsage();
+
         }
     }
 
     /**
-     * @see org.apache.sling.commons.threads.ThreadPoolManager#create(java.lang.String, org.apache.sling.commons.threads.ThreadPoolConfig)
+     * @see org.apache.sling.commons.threads.ThreadPoolManager#release(org.apache.sling.commons.threads.ThreadPool)
      */
-    public ThreadPool create(String name,
-                             ThreadPoolConfig config) {
-        if ( name == null ) {
-            throw new IllegalArgumentException("Name must not be null.");
+    public void release(ThreadPool pool) {
+        if ( pool instanceof ThreadPoolFacade ) {
+            synchronized ( this.pools ) {
+                final Entry entry = this.pools.get(pool.getName());
+                if ( entry != null ) {
+                    entry.decUsage();
+                }
+            }
         }
+
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPoolManager#create(org.apache.sling.commons.threads.ThreadPoolConfig)
+     */
+    public ThreadPool create(ThreadPoolConfig config) {
         if ( config == null ) {
             throw new IllegalArgumentException("Config must not be null.");
         }
+        final String name = "ThreadPool-" + UUID.randomUUID().toString();
+        final Entry entry = new Entry(null, config, name);
         synchronized ( this.pools ) {
-            ThreadPool pool = this.pools.get(name);
-            if ( pool != null ) {
-                // pool already exists
-                return null;
+            this.pools.put(name, entry);
+        }
+        return entry.incUsage();
+    }
+
+    /**
+     * @see org.osgi.service.cm.ManagedServiceFactory#getName()
+     */
+    public String getName() {
+        return this.properties.get(Constants.SERVICE_DESCRIPTION).toString();
+    }
+
+    /**
+     * @see org.osgi.service.cm.ManagedServiceFactory#updated(java.lang.String, java.util.Dictionary)
+     */
+    @SuppressWarnings("unchecked")
+    public void updated(String pid, Dictionary properties)
+    throws ConfigurationException {
+        final String name = (String) properties.get(ModifiableThreadPoolConfig.PROPERTY_NAME);
+        if ( name == null || name.length() == 0 ) {
+            throw new ConfigurationException(ModifiableThreadPoolConfig.PROPERTY_NAME, "Property is missing or empty.");
+        }
+        this.logger.debug("Updating {} with {}", pid, properties);
+        synchronized ( this.pools ) {
+            Entry foundEntry = null;
+            // we have to search the config by using the pid!
+            for (final Entry entry : this.pools.values()) {
+                if ( pid.equals(entry.getPid()) ) {
+                    foundEntry = entry;
+                    break;
+                }
+            }
+            final ThreadPoolConfig config = this.createConfig(properties);
+            if ( foundEntry != null ) {
+                // if the name changed - we have to reregister(!)
+                if ( !name.equals(foundEntry.getName()) ) {
+                    this.pools.remove(foundEntry.getName());
+                    this.pools.put(name, foundEntry);
+                }
+                // update
+                foundEntry.update(config, name);
+            } else {
+                // create
+                this.pools.put(name, new Entry(pid, config, name));
             }
-            pool = new DefaultThreadPool(name, config);
-            this.pools.put(name, pool);
-            return pool;
         }
     }
 
+    /**
+     * @see org.osgi.service.cm.ManagedServiceFactory#deleted(java.lang.String)
+     */
+    public void deleted(String pid) {
+        this.logger.debug("Deleting " + pid);
+        // we just remove the thread pool from our list of pools and readd it
+        // as an anonymous pool with default config(!) if it is used
+        synchronized ( this.pools ) {
+            Entry foundEntry = null;
+            // we have to search the config by using the pid!
+            for (final Entry entry : this.pools.values()) {
+                if ( pid.equals(entry.getPid()) ) {
+                    foundEntry = entry;
+                    break;
+                }
+            }
+            if ( foundEntry != null ) {
+                this.pools.remove(foundEntry.getName());
+                if ( foundEntry.isUsed() ) {
+                    // we register this with a new name
+                    final String name = "ThreadPool-" + UUID.randomUUID().toString();
+                    foundEntry.update(new ModifiableThreadPoolConfig(), name);
+                    this.pools.put(name, foundEntry);
+                }
+            }
+        }
+    }
+
+    private static final class Entry {
+        /** The configuration pid. (might be null for anonymous pools.*/
+        private final String pid;
+
+        /** Usage count. */
+        private volatile int count;
+
+        /** The configuration for the pool. */
+        private volatile ThreadPoolConfig config;
+
+        /** The name of the pool. */
+        private volatile String name;
+
+        /** The corresponding pool - might be null if unused. */
+        private volatile ThreadPoolFacade pool;
+
+        public Entry(final String pid, final ThreadPoolConfig config, final String name) {
+            this.pid = pid;
+            this.config = config;
+            this.name = name;
+        }
+
+        public String getPid() {
+            return this.pid;
+        }
+
+        public void shutdown() {
+            if ( this.pool != null ) {
+                this.pool.shutdown();
+                this.pool = null;
+            }
+        }
+
+        public ThreadPoolFacade incUsage() {
+            if ( pool == null ) {
+                pool = new ThreadPoolFacade(new DefaultThreadPool(name, this.config));
+            }
+            this.count++;
+            return pool;
+        }
+
+        public void decUsage() {
+            this.count--;
+            if ( this.count == 0 ) {
+                this.shutdown();
+            }
+        }
+
+        public void update(final ThreadPoolConfig config, final String name) {
+            if ( this.pool != null ) {
+                this.pool.setName(name);
+                if ( !this.config.equals(config) ) {
+                    this.pool.setPool(new DefaultThreadPool(name, config));
+                }
+            }
+            this.config = config;
+            this.name = name;
+        }
+
+        public String getName() {
+            return this.name;
+        }
+
+        public boolean isUsed() {
+            return this.count > 0;
+        }
+    }
 }
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/ExtendedThreadFactory.java b/src/main/java/org/apache/sling/commons/threads/impl/ExtendedThreadFactory.java
index b213fd8..87bb6a1 100644
--- a/src/main/java/org/apache/sling/commons/threads/impl/ExtendedThreadFactory.java
+++ b/src/main/java/org/apache/sling/commons/threads/impl/ExtendedThreadFactory.java
@@ -25,7 +25,6 @@ import org.apache.sling.commons.threads.ThreadPoolConfig;
  * This class is responsible to create new Thread instances.
  * It's a very basic implementation.
  *
- * @version $Id$
  */
 public final class ExtendedThreadFactory implements ThreadFactory {
 
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/ThreadPoolFacade.java b/src/main/java/org/apache/sling/commons/threads/impl/ThreadPoolFacade.java
new file mode 100644
index 0000000..145c9c8
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/threads/impl/ThreadPoolFacade.java
@@ -0,0 +1,84 @@
+/*
+ * 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.sling.commons.threads.impl;
+
+import org.apache.sling.commons.threads.ThreadPool;
+import org.apache.sling.commons.threads.ThreadPoolConfig;
+
+
+/**
+ * This is a facade which is delivered to clients. It allows
+ * to change the thread pool behind the facacde without affecting
+ * the client.
+ */
+public final class ThreadPoolFacade implements ThreadPool {
+
+    /** The thread pool */
+    private volatile DefaultThreadPool delegatee;
+
+    /** The name of the pool */
+    private String name;
+
+    public ThreadPoolFacade(final DefaultThreadPool pool) {
+        this.delegatee = pool;
+        this.name = pool.getName();
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPool#execute(java.lang.Runnable)
+     */
+    public void execute(Runnable runnable) {
+        this.delegatee.execute(runnable);
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPool#getConfiguration()
+     */
+    public ThreadPoolConfig getConfiguration() {
+        return this.delegatee.getConfiguration();
+    }
+
+    /**
+     * @see org.apache.sling.commons.threads.ThreadPool#getName()
+     */
+    public String getName() {
+        return this.name;
+    }
+
+    /**
+     * Shutdown this thread pool.
+     */
+    public void shutdown() {
+        this.delegatee.shutdown();
+    }
+
+    /**
+     * Update name
+     */
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /**
+     * Update pool
+     */
+    public void setPool(final DefaultThreadPool pool) {
+        final DefaultThreadPool oldPool = this.delegatee;
+        this.delegatee = pool;
+        oldPool.shutdown();
+    }
+}
diff --git a/src/main/resources/OSGI-INF/metatype/metatype.properties b/src/main/resources/OSGI-INF/metatype/metatype.properties
new file mode 100644
index 0000000..4108496
--- /dev/null
+++ b/src/main/resources/OSGI-INF/metatype/metatype.properties
@@ -0,0 +1,51 @@
+#
+#  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.
+#
+
+factory.config.name = Apache Sling Thread Pool Configuration
+factory.config.description = Configuration for a named thread pool.
+
+name.name=Name
+name.description=The unique name for this thread pool.
+
+minPoolSize.name=Min Pool Size
+minPoolSize.description=The minimum pool size.
+
+maxPoolSize.name=Max Pool Size
+maxPoolSize.description=The maximum pool size.
+
+queueSize.name=Queue Size
+queueSize.description=The queue size or -1 for an unlimited queue size.
+
+keepAliveTime.name=Keep Alive Time
+keepAliveTime.description=The keep alive time.
+
+blockPolicy.name=Block Policy
+blockPolicy.description=The block policy.
+
+shutdownGraceful.name=Shutdown Graceful
+shutdownGraceful.description=Should the pool be shutdown gracefully?
+
+daemon.name=Daemon Threads
+daemon.description=Should the pool create daemon threads?
+
+shutdownWaitTime.name=Shutdown Wait Time
+shutdownWaitTime.description=The shutdown wait time. A value below 1 means no wait time.
+
+priority.name=Priority
+priority.description=The default priority for the threads.
diff --git a/src/main/resources/OSGI-INF/metatype/metatype.xml b/src/main/resources/OSGI-INF/metatype/metatype.xml
new file mode 100644
index 0000000..6e3ff8c
--- /dev/null
+++ b/src/main/resources/OSGI-INF/metatype/metatype.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<metatype:MetaData
+    xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0"
+    localization="metatype">
+
+    <metatype:OCD
+        id="org.apache.sling.commons.threads.impl.DefaultThreadPool.factory"
+        name="%factory.config.name"
+        description="%factory.config.description">
+        <metatype:AD id="name"
+            type="String" name="%name.name"
+            description="%name.description" required="true"/>
+        <metatype:AD id="minPoolSize"
+            type="Integer" default="5" name="%minPoolSize.name"
+            description="%minPoolSize.description"/>
+        <metatype:AD id="maxPoolSize"
+            type="Integer" default="5" name="%queueSize.name"
+            description="%maxPoolSize.description" />
+        <metatype:AD id="queueSize"
+            type="Integer" default="-1" name="%queueSize.name"
+            description="%queueSize.description" />
+        <metatype:AD id="keepAliveTime"
+            type="Long" default="60000" name="%keepAliveTime.name"
+            description="%keepAliveTime.description" />
+        <metatype:AD id="blockPolicy"
+            type="String" default="RUN" name="%blockPolicy.name"
+            description="%blockPolicy.description">
+            <metatype:Option value="ABORT" label="Abort" />
+            <metatype:Option value="DISCARD" label="Discard" />
+            <metatype:Option value="DISCARDOLDEST" label="Discard Oldest" />
+            <metatype:Option value="RUN" label="Run" />
+        </metatype:AD>
+        <metatype:AD id="shutdownGraceful"
+            type="Boolean" default="false" name="%shutdownGraceful.name"
+            description="%shutdownGraceful.description" />
+        <metatype:AD id="daemon"
+            type="Integer" default="-1" name="%daemon.name"
+            description="%daemon.description" />
+        <metatype:AD id="shutdownWaitTime"
+            type="Boolean" default="false" name="%shutdownWaitTime.name"
+            description="%shutdownWaitTime.description" />
+        <metatype:AD id="priority"
+            type="String" default="NORM" name="%priority.name"
+            description="%priority.description" >
+            <metatype:Option value="NORM" label="Norm" />
+            <metatype:Option value="MIN" label="Min" />
+            <metatype:Option value="MAX" label="Max" />
+        </metatype:AD>
+    </metatype:OCD>
+    <metatype:Designate
+        pid="org.apache.sling.commons.threads.impl.DefaultThreadPool.factory"
+        factoryPid="org.apache.sling.commons.threads.impl.DefaultThreadPool.factory">
+        <metatype:Object
+            ocdref="org.apache.sling.commons.threads.impl.DefaultThreadPool.factory" />
+    </metatype:Designate>
+</metatype:MetaData>
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 08/14: SLING-1011 : Adjust svn location

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit ae744d2da45e4c7a08d6a82c78c22e84be485bf9
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Jun 18 10:26:35 2009 +0000

    SLING-1011 : Adjust svn location
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@786008 13f79535-47bb-0310-9956-ffa450edef68
---
 README.txt | 2 +-
 pom.xml    | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.txt b/README.txt
index 37ca813..0b5beff 100644
--- a/README.txt
+++ b/README.txt
@@ -31,6 +31,6 @@ Subversion (http://subversion.tigris.org/) source repository of
 the Apache Software Foundation. If you have Subversion installed,
 you can checkout the latest source using the following command:
 
-    svn checkout http://svn.apache.org/repos/asf/incubator/sling/trunk/commons/threads
+    svn checkout http://svn.apache.org/repos/asf/sling/trunk/commons/threads
 
 See the Subversion documentation for other source control features.
diff --git a/pom.xml b/pom.xml
index 596e0f8..6aeb166 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,9 +37,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads</developerConnection>
-        <url>http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/commons/threads</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/trunk/bundles/commons/threads</url>
     </scm>
 
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 10/14: SLING-1033 Upgrade to Sling parent POM 6 (and ensure web app has the leglize stuff, too)

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 97733b6fe55b57ec2b418e885f70648b3aa5a5bd
Author: Felix Meschberger <fm...@apache.org>
AuthorDate: Sun Jul 5 11:27:40 2009 +0000

    SLING-1033 Upgrade to Sling parent POM 6 (and ensure web app has the leglize stuff, too)
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@791223 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 4cdcd36..7a06c13 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>5-incubator</version>
+        <version>6</version>
         <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 01/14: Use release parent pom

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 7807d1c6c1af22332ae42c604bbe5b981aa99179
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue May 5 15:06:21 2009 +0000

    Use release parent pom
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads@771764 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index aa97135..589ae1f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>5-incubator-SNAPSHOT</version>
+        <version>5-incubator</version>
         <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 06/14: Move Sling to new TLP location

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 6ad9afb128685f6c07a2720d55314f21bce59175
Author: Felix Meschberger <fm...@apache.org>
AuthorDate: Thu Jun 18 09:21:02 2009 +0000

    Move Sling to new TLP location
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@785979 13f79535-47bb-0310-9956-ffa450edef68

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 13/14: [maven-release-plugin] prepare release org.apache.sling.commons.threads-3.0.0

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 1be56f6e4f5ce9a399440f35cede69484cbb2846
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Dec 17 13:49:11 2009 +0000

    [maven-release-plugin] prepare release org.apache.sling.commons.threads-3.0.0
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads@891700 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 12e1c92..a31c400 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <artifactId>org.apache.sling.commons.threads</artifactId>
     <packaging>bundle</packaging>
-    <version>3.0.0-SNAPSHOT</version>
+    <version>3.0.0</version>
 
     <name>Apache Sling Thread Support</name>
     <description>
@@ -37,9 +37,9 @@
     </description>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/threads</developerConnection>
-        <url>http://svn.apache.org/viewvc/sling/trunk/bundles/commons/threads</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.threads-3.0.0</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.threads-3.0.0</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.commons.threads-3.0.0</url>
     </scm>
 
     <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.

[sling-org-apache-sling-commons-threads] 04/14: Use next dev version of parent pom

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.threads-3.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git

commit 4ca55b389f0bcf200438189573e90fc31748c032
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue May 5 17:11:34 2009 +0000

    Use next dev version of parent pom
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/bundles/commons/threads@771937 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 596e0f8..d91c973 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>5-incubator</version>
+        <version>6-incubator-SNAPSHOT</version>
         <relativePath>../../../parent/pom.xml</relativePath>
     </parent>
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.