ace-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject svn commit: r1726222 [1/2] - in /ace/trunk: cnf/lib/ cnf/lib/commons-codec/ cnf/lib/commons-collections/ cnf/lib/commons-io/ cnf/lib/commons-lang/ cnf/lib/commons-logging/ cnf/lib/gson/ cnf/lib/javax.inject/ cnf/lib/junit/ cnf/lib/pax-exam-container-na...
Date Fri, 22 Jan 2016 14:44:52 GMT
Author: jawi
Date: Fri Jan 22 14:44:51 2016
New Revision: 1726222

URL: http://svn.apache.org/viewvc?rev=1726222&view=rev
Log:
Remove duplicate dependencies:

- moved all bundles from `cnf/lib` to `cnf/localrepo`;
- refacted the unit tests of the processlauncher project to use TestNG instead of JUnit;
- moved the itests from the processlauncher project to their own itest project;
- removed some redundant PAX exam libraries as we're using Bnd's integration test functionality.


Added:
    ace/trunk/cnf/localrepo/javax.inject/
    ace/trunk/cnf/localrepo/javax.inject/javax.inject-1.0.0.jar   (with props)
    ace/trunk/cnf/localrepo/org.apache.commons.codec/
    ace/trunk/cnf/localrepo/org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar   (with props)
    ace/trunk/cnf/localrepo/org.apache.commons.collections/
    ace/trunk/cnf/localrepo/org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar   (with props)
    ace/trunk/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.1.jar   (with props)
    ace/trunk/cnf/localrepo/org.apache.commons.lang/
    ace/trunk/cnf/localrepo/org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar   (with props)
    ace/trunk/org.apache.ace.processlauncher.itest/
    ace/trunk/org.apache.ace.processlauncher.itest/.classpath   (with props)
    ace/trunk/org.apache.ace.processlauncher.itest/.project   (with props)
    ace/trunk/org.apache.ace.processlauncher.itest/bnd.bnd
    ace/trunk/org.apache.ace.processlauncher.itest/build.xml   (with props)
    ace/trunk/org.apache.ace.processlauncher.itest/src/
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java   (with props)
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherServiceIntegrationTest.java   (with props)
    ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/TestUtil.java   (with props)
Removed:
    ace/trunk/cnf/lib/commons-codec/
    ace/trunk/cnf/lib/commons-collections/
    ace/trunk/cnf/lib/commons-io/
    ace/trunk/cnf/lib/commons-lang/
    ace/trunk/cnf/lib/commons-logging/
    ace/trunk/cnf/lib/gson/
    ace/trunk/cnf/lib/javax.inject/
    ace/trunk/cnf/lib/junit/
    ace/trunk/cnf/lib/pax-exam/
    ace/trunk/cnf/lib/pax-exam-container-native/
    ace/trunk/cnf/lib/pax-exam-inject/
    ace/trunk/cnf/lib/pax-exam-junit4/
    ace/trunk/cnf/lib/pax-exam-link-mvn/
    ace/trunk/cnf/lib/pax-url-aether/
    ace/trunk/cnf/lib/pax-url-assembly/
    ace/trunk/cnf/lib/pax-url-link/
    ace/trunk/cnf/lib/pax-url-wrap/
    ace/trunk/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.0.jar
    ace/trunk/cnf/localrepo/org.ops4j.base.store/
    ace/trunk/cnf/localrepo/org.ops4j.pax.swissbox.tinybundles/
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/osgi/
Modified:
    ace/trunk/cnf/lib/index.xml.gz
    ace/trunk/cnf/lib/repository.xml
    ace/trunk/cnf/localrepo/index.xml
    ace/trunk/cnf/localrepo/index.xml.sha
    ace/trunk/org.apache.ace.deployment/bnd.bnd
    ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java
    ace/trunk/org.apache.ace.processlauncher/bnd.bnd
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationFactoryTest.java
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/LaunchConfigurationTest.java
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherServiceImplTest.java
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessLauncherTest.java
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/ProcessManagerImplTest.java
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/impl/StringSplitterTest.java
    ace/trunk/org.apache.ace.processlauncher/test/org/apache/ace/processlauncher/test/util/InputStreamRedirectorTest.java
    ace/trunk/org.apache.ace.test/src/org/apache/ace/test/utils/FileUtils.java
    ace/trunk/org.apache.ace.verifier/bnd.bnd
    ace/trunk/org.apache.ace.verifier/test/org/apache/ace/deployment/verifier/impl/VerifierTest.java

Modified: ace/trunk/cnf/lib/index.xml.gz
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/lib/index.xml.gz?rev=1726222&r1=1726221&r2=1726222&view=diff
==============================================================================
Binary files - no diff available.

Modified: ace/trunk/cnf/lib/repository.xml
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/lib/repository.xml?rev=1726222&r1=1726221&r2=1726222&view=diff
==============================================================================
--- ace/trunk/cnf/lib/repository.xml (original)
+++ ace/trunk/cnf/lib/repository.xml Fri Jan 22 14:44:51 2016
@@ -1,30 +1,167 @@
-<repository>
- <resource id='ant/1.8.4' symbolicname='ant' uri='ant/ant-1.8.4.jar' version='1.8.4'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='ant'/><p n='version' t='version' v='1.8.4'/></capability></resource>
- <resource id='aopalliance/1.0' symbolicname='aopalliance' uri='aopalliance/aopalliance-1.0.jar' version='1.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='aopalliance'/><p n='version' t='version' v='1.0'/></capability></resource>
- <resource id='bcprov-jdk14/1.40' symbolicname='bcprov-jdk14' uri='bcprov-jdk14/bcprov-jdk14-1.40.jar' version='1.40'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='bcprov-jdk14'/><p n='version' t='version' v='1.40'/></capability></resource>
- <resource id='commons-codec/1.4' symbolicname='commons-codec' uri='commons-codec/commons-codec-1.4.jar' version='1.4'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-codec'/><p n='version' t='version' v='1.4'/></capability></resource>
- <resource id='commons-collections/3.2.1' symbolicname='commons-collections' uri='commons-collections/commons-collections-3.2.1.jar' version='3.2.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-collections'/><p n='version' t='version' v='3.2.1'/></capability></resource>
- <resource id='commons-io/2.0.1' symbolicname='commons-io' uri='commons-io/commons-io-2.0.1.jar' version='2.0.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-io'/><p n='version' t='version' v='2.0.1'/></capability></resource>
- <resource id='commons-lang/2.4' symbolicname='commons-lang' uri='commons-lang/commons-lang-2.4.jar' version='2.4'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-lang'/><p n='version' t='version' v='2.4'/></capability></resource>
- <resource id='commons-logging/1.1.1' symbolicname='commons-logging' uri='commons-logging/commons-logging-1.1.1.jar' version='1.1.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='commons-logging'/><p n='version' t='version' v='1.1.1'/></capability></resource>
- <resource id='gson/1.7.1' symbolicname='gson' uri='gson/gson-1.7.1.jar' version='1.7.1'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='gson'/><p n='version' t='version' v='1.7.1'/></capability></resource>
- <resource id='javax.inject/1.0.0' symbolicname='javax.inject' uri='javax.inject/javax.inject-1.0.0.jar' version='1.0.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='javax.inject'/><p n='version' t='version' v='1.0.0'/></capability></resource>
- <resource id='jsr250-api/1.0' symbolicname='jsr250-api' uri='jsr250-api/jsr250-api-1.0.jar' version='1.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='jsr250-api'/><p n='version' t='version' v='1.0'/></capability></resource>
- <resource id='jsr305/1.3.9' symbolicname='jsr305' uri='jsr305/jsr305-1.3.9.jar' version='1.3.9'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='jsr305'/><p n='version' t='version' v='1.3.9'/></capability></resource>
- <resource id='junit/4.8.2' symbolicname='junit' uri='junit/junit-4.8.2.jar' version='4.8.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='junit'/><p n='version' t='version' v='4.8.2'/></capability></resource>
- <resource id='kxml2/2.3.0' symbolicname='kxml2' uri='kxml2/kxml2-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='kxml2'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='oauth/20100527' symbolicname='oauth' uri='oauth/oauth-20100527.jar' version='20100527'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='oauth'/><p n='version' t='version' v='20100527'/></capability></resource>
- <resource id='pax-exam/2.3.0' symbolicname='pax-exam' uri='pax-exam/pax-exam-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-container-native/2.3.0' symbolicname='pax-exam-container-native' uri='pax-exam-container-native/pax-exam-container-native-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-container-native'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-inject/2.3.0' symbolicname='pax-exam-inject' uri='pax-exam-inject/pax-exam-inject-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-inject'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-junit4/2.3.0' symbolicname='pax-exam-junit4' uri='pax-exam-junit4/pax-exam-junit4-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-junit4'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-exam-link-mvn/2.3.0' symbolicname='pax-exam-link-mvn' uri='pax-exam-link-mvn/pax-exam-link-mvn-2.3.0.jar' version='2.3.0'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-exam-link-mvn'/><p n='version' t='version' v='2.3.0'/></capability></resource>
- <resource id='pax-url-aether/1.3.5' symbolicname='pax-url-aether' uri='pax-url-aether/pax-url-aether-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-aether'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='pax-url-assembly/1.3.5' symbolicname='pax-url-assembly' uri='pax-url-assembly/pax-url-assembly-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-assembly'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='pax-url-link/1.3.5' symbolicname='pax-url-link' uri='pax-url-link/pax-url-link-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-link'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='pax-url-wrap/1.3.5' symbolicname='pax-url-wrap' uri='pax-url-wrap/pax-url-wrap-1.3.5.jar' version='1.3.5'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='pax-url-wrap'/><p n='version' t='version' v='1.3.5'/></capability></resource>
- <resource id='testng/6.5.2' symbolicname='testng' uri='testng/testng-6.5.2.jar' version='6.5.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='testng'/><p n='version' t='version' v='6.5.2'/></capability></resource>
- <resource id='velocity/1.6.2' symbolicname='velocity' uri='velocity/velocity-1.6.2.jar' version='1.6.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='velocity'/><p n='version' t='version' v='1.6.2'/></capability></resource>
- <resource id='xpp3/1.1.4.c' symbolicname='xpp3' uri='xpp3/xpp3-1.1.4.c.jar' version='1.1.4.c'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='xpp3'/><p n='version' t='version' v='1.1.4.c'/></capability></resource>
- <resource id='xstream/1.2.2' symbolicname='xstream' uri='xstream/xstream-1.2.2.jar' version='1.2.2'><capability name='bundle'><p n='manifestversion' v='2'/><p n='symbolicname' v='xstream'/><p n='version' t='version' v='1.2.2'/></capability></resource>
-</repository>
+<?xml version='1.0' encoding='utf-8'?>
+<?xml-stylesheet type='text/xsl' href='http://www.osgi.org/www/obr2html.xsl'?>
+
+<repository lastmodified='20160122145511.091' name='Untitled'>
+  <resource id='Untitled--1059228687/0.0.0' symbolicname='Untitled--1059228687' uri='aopalliance/aopalliance-1.0.jar' version='0.0.0'>
+    <size>
+      4467
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--1059228687'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--1877161092/0.0.0' symbolicname='Untitled--1877161092' uri='oauth/oauth-20100527.jar' version='0.0.0'>
+    <size>
+      44209
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--1877161092'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--767182726/0.0.0' symbolicname='Untitled--767182726' uri='jsr305/jsr305-1.3.9.jar' version='0.0.0'>
+    <size>
+      33015
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--767182726'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--93366089/0.0.0' symbolicname='Untitled--93366089' uri='kxml2/kxml2-2.3.0.jar' version='0.0.0'>
+    <size>
+      43858
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--93366089'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled--978492559/0.0.0' symbolicname='Untitled--978492559' uri='ant/ant-1.8.4.jar' version='0.0.0'>
+    <size>
+      1941731
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled--978492559'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-170591100/0.0.0' symbolicname='Untitled-170591100' uri='testng/testng-6.5.2.jar' version='0.0.0'>
+    <size>
+      1273045
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-170591100'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-2104301348/0.0.0' symbolicname='Untitled-2104301348' uri='xstream/xstream-1.2.2.jar' version='0.0.0'>
+    <size>
+      373194
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-2104301348'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-494417045/0.0.0' symbolicname='Untitled-494417045' uri='jsr250-api/jsr250-api-1.0.jar' version='0.0.0'>
+    <size>
+      5848
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-494417045'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-522443489/0.0.0' symbolicname='Untitled-522443489' uri='velocity/velocity-1.6.2.jar' version='0.0.0'>
+    <size>
+      420975
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-522443489'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-524384939/0.0.0' symbolicname='Untitled-524384939' uri='bcprov-jdk14/bcprov-jdk14-1.40.jar' version='0.0.0'>
+    <size>
+      1589656
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-524384939'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='Untitled-876183438/0.0.0' symbolicname='Untitled-876183438' uri='xpp3/xpp3-1.1.4.c.jar' version='0.0.0'>
+    <size>
+      120069
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='1'/>
+      <p n='symbolicname' v='Untitled-876183438'/>
+      <p n='version' t='version' v='0.0.0'/>
+    </capability>
+  </resource>
+  <resource id='com.google.gson/1.7.0' presentationname='Gson' symbolicname='com.google.gson' uri='gson/gson-1.7.1.jar' version='1.7.0'>
+    <description>
+      Google Gson library
+    </description>
+    <size>
+      173590
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='Gson'/>
+      <p n='symbolicname' v='com.google.gson'/>
+      <p n='version' t='version' v='1.7.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.annotations'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.reflect'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.stream'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='com.google.gson.internal'/>
+      <p n='version' t='version' v='1.7.1'/>
+    </capability>
+    <require extend='false' filter='(|(ee=J2SE-1.5))' multiple='false' name='ee' optional='false'>
+      Execution Environment (|(ee=J2SE-1.5))
+    </require>
+  </resource>
+  <resource id='javax.inject/1.0.0' presentationname='javax.inject' symbolicname='javax.inject' uri='javax.inject/javax.inject-1.0.0.jar' version='1.0.0'>
+    <size>
+      2954
+    </size>
+    <capability name='bundle'>
+      <p n='manifestversion' v='2'/>
+      <p n='presentationname' v='javax.inject'/>
+      <p n='symbolicname' v='javax.inject'/>
+      <p n='version' t='version' v='1.0.0'/>
+    </capability>
+    <capability name='package'>
+      <p n='package' v='javax.inject'/>
+      <p n='version' t='version' v='1.0.0'/>
+    </capability>
+  </resource>
+</repository>
\ No newline at end of file

Modified: ace/trunk/cnf/localrepo/index.xml
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/index.xml?rev=1726222&r1=1726221&r2=1726222&view=diff
==============================================================================
--- ace/trunk/cnf/localrepo/index.xml (original)
+++ ace/trunk/cnf/localrepo/index.xml Fri Jan 22 14:44:51 2016
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<repository increment="1453375031000" name="Local" xmlns="http://www.osgi.org/xmlns/repository/v1.0.0">
+<repository increment="1453471155000" name="Local" xmlns="http://www.osgi.org/xmlns/repository/v1.0.0">
   <resource>
     <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="aws-common"/>
@@ -5003,6 +5003,33 @@
   </resource>
   <resource>
     <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="javax.inject"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="1.0.0"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="210831b73725eb71d2311f87219947a17b42a86d5ec83d3dc2c350dcb85e8836"/>
+      <attribute name="url" value="javax.inject/javax.inject-1.0.0.jar"/>
+      <attribute name="size" type="Long" value="2954"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="javax.inject"/>
+      <attribute name="bundle-version" type="Version" value="1.0.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="javax.inject"/>
+      <attribute name="bundle-version" type="Version" value="1.0.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="javax.inject"/>
+      <attribute name="version" type="Version" value="1.0.0"/>
+      <attribute name="bundle-symbolic-name" value="javax.inject"/>
+      <attribute name="bundle-version" type="Version" value="1.0.0"/>
+    </capability>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="javax.servlet"/>
       <attribute name="type" value="osgi.bundle"/>
       <attribute name="version" type="Version" value="2.5.0.v200910301333"/>
@@ -6712,63 +6739,360 @@
   </resource>
   <resource>
     <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.apache.commons.codec"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="6aa4234c74f3a1035751a25822545867c8c3727125a642b6e049665d1863631b"/>
+      <attribute name="url" value="org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar"/>
+      <attribute name="size" type="Long" value="58160"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.net"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.language"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.digest"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.codec.binary"/>
+      <attribute name="version" type="Version" value="1.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.codec"/>
+      <attribute name="bundle-version" type="Version" value="1.4.0"/>
+    </capability>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.binary)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.digest)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.language)(version&gt;=1.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.codec.net)(version&gt;=1.4.0))"/>
+    </requirement>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.apache.commons.collections"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="87363a4c94eaabeefd8b930cb059f66b64c9f7d632862f23de3012da7660047b"/>
+      <attribute name="url" value="org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar"/>
+      <attribute name="size" type="Long" value="575389"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.map"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.buffer"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.comparators"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.collection"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.bag"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.iterators"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.bidimap"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.set"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.functors"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.list"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections.keyvalue"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.collections"/>
+      <attribute name="version" type="Version" value="3.2.1"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.collections"/>
+      <attribute name="bundle-version" type="Version" value="3.2.1"/>
+    </capability>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.bag)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.bidimap)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.buffer)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.collection)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.comparators)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.functors)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.iterators)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.keyvalue)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.list)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.map)(version&gt;=3.2.1))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.collections.set)(version&gt;=3.2.1))"/>
+    </requirement>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="org.apache.commons.io"/>
       <attribute name="type" value="osgi.bundle"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.content">
-      <attribute name="osgi.content" value="c1cd4480f5201e5d2979fd97fa7949bde0e778b84c87b383aa133586bb17f4f1"/>
-      <attribute name="url" value="org.apache.commons.io/org.apache.commons.io-2.0.0.jar"/>
-      <attribute name="size" type="Long" value="161213"/>
+      <attribute name="osgi.content" value="2a3f5a206480863aae9dff03f53c930c3add6912f8785498d59442c7ebb98c5c"/>
+      <attribute name="url" value="org.apache.commons.io/org.apache.commons.io-2.0.1.jar"/>
+      <attribute name="size" type="Long" value="159509"/>
       <attribute name="mime" value="application/vnd.osgi.bundle"/>
     </capability>
     <capability namespace="osgi.wiring.bundle">
       <attribute name="osgi.wiring.bundle" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.host">
       <attribute name="osgi.wiring.host" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.output"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.comparator"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.monitor"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.input"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
     <capability namespace="osgi.wiring.package">
       <attribute name="osgi.wiring.package" value="org.apache.commons.io.filefilter"/>
-      <attribute name="version" type="Version" value="2.0.0"/>
+      <attribute name="version" type="Version" value="2.0.1"/>
       <attribute name="bundle-symbolic-name" value="org.apache.commons.io"/>
-      <attribute name="bundle-version" type="Version" value="2.0.0"/>
+      <attribute name="bundle-version" type="Version" value="2.0.1"/>
     </capability>
   </resource>
   <resource>
     <capability namespace="osgi.identity">
+      <attribute name="osgi.identity" value="org.apache.commons.lang"/>
+      <attribute name="type" value="osgi.bundle"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.content">
+      <attribute name="osgi.content" value="2c73b940c91250bc98346926270f13a6a10bb6e29d2c9316a70d134e382c873e"/>
+      <attribute name="url" value="org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar"/>
+      <attribute name="size" type="Long" value="261809"/>
+      <attribute name="mime" value="application/vnd.osgi.bundle"/>
+    </capability>
+    <capability namespace="osgi.wiring.bundle">
+      <attribute name="osgi.wiring.bundle" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.host">
+      <attribute name="osgi.wiring.host" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.math"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.enums"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.builder"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.exception"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.enum"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.mutable"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.text"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang.time"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <capability namespace="osgi.wiring.package">
+      <attribute name="osgi.wiring.package" value="org.apache.commons.lang"/>
+      <attribute name="version" type="Version" value="2.4.0"/>
+      <attribute name="bundle-symbolic-name" value="org.apache.commons.lang"/>
+      <attribute name="bundle-version" type="Version" value="2.4.0"/>
+    </capability>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.builder)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.enum)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.enums)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.exception)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.math)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.mutable)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.text)(version&gt;=2.4.0))"/>
+    </requirement>
+    <requirement namespace="osgi.wiring.package">
+      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.lang.time)(version&gt;=2.4.0))"/>
+    </requirement>
+  </resource>
+  <resource>
+    <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="org.apache.felix.configadmin"/>
       <attribute name="type" value="osgi.bundle"/>
       <attribute name="version" type="Version" value="1.8.0"/>
@@ -8223,110 +8547,6 @@
     </requirement>
   </resource>
   <resource>
-    <capability namespace="osgi.identity">
-      <attribute name="osgi.identity" value="org.ops4j.base.store"/>
-      <attribute name="type" value="osgi.bundle"/>
-      <attribute name="version" type="Version" value="1.2.2"/>
-    </capability>
-    <capability namespace="osgi.content">
-      <attribute name="osgi.content" value="653b19a591c28fcb8d5d89f4e61064a711362fdd73f0a05a01e1596b8a7901c3"/>
-      <attribute name="url" value="org.ops4j.base.store/org.ops4j.base.store-1.2.2.jar"/>
-      <attribute name="size" type="Long" value="7323"/>
-      <attribute name="mime" value="application/vnd.osgi.bundle"/>
-    </capability>
-    <capability namespace="osgi.wiring.bundle">
-      <attribute name="osgi.wiring.bundle" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-    </capability>
-    <capability namespace="osgi.wiring.host">
-      <attribute name="osgi.wiring.host" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.store.intern"/>
-      <attribute name="version" type="Version" value="1.2.2"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-      <directive name="uses" value="org.ops4j.store,org.ops4j.io,org.apache.commons.logging"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.store"/>
-      <attribute name="version" type="Version" value="1.2.2"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.base.store"/>
-      <attribute name="bundle-version" type="Version" value="1.2.2"/>
-      <directive name="uses" value="org.ops4j.store.intern"/>
-    </capability>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(osgi.wiring.package=org.apache.commons.logging)"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.io)(version&gt;=1.2.2))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.store)(version&gt;=1.2.2))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.store.intern)(version&gt;=1.2.2))"/>
-    </requirement>
-  </resource>
-  <resource>
-    <capability namespace="osgi.identity">
-      <attribute name="osgi.identity" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="type" value="osgi.bundle"/>
-      <attribute name="version" type="Version" value="1.3.1"/>
-      <directive name="singleton" value="true"/>
-    </capability>
-    <capability namespace="osgi.content">
-      <attribute name="osgi.content" value="062d7f19cfd92453993def343a0938c31e368a2f29671cd91bfe2e605c3cc679"/>
-      <attribute name="url" value="org.ops4j.pax.swissbox.tinybundles/org.ops4j.pax.swissbox.tinybundles-1.3.1.jar"/>
-      <attribute name="size" type="Long" value="29253"/>
-      <attribute name="mime" value="application/vnd.osgi.bundle"/>
-    </capability>
-    <capability namespace="osgi.wiring.bundle">
-      <attribute name="osgi.wiring.bundle" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-    </capability>
-    <capability namespace="osgi.wiring.host">
-      <attribute name="osgi.wiring.host" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.pax.swissbox.tinybundles.core"/>
-      <attribute name="version" type="Version" value="1.3.1"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-      <directive name="uses" value="org.ops4j.store"/>
-    </capability>
-    <capability namespace="osgi.wiring.package">
-      <attribute name="osgi.wiring.package" value="org.ops4j.pax.swissbox.tinybundles.dp"/>
-      <attribute name="version" type="Version" value="1.3.1"/>
-      <attribute name="bundle-symbolic-name" value="org.ops4j.pax.swissbox.tinybundles"/>
-      <attribute name="bundle-version" type="Version" value="1.3.1"/>
-      <directive name="uses" value="org.osgi.framework,org.ops4j.store,org.ops4j.pax.swissbox.tinybundles.core"/>
-    </capability>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.apache.commons.logging)(version&gt;=1.0.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.io)(version&gt;=1.2.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(osgi.wiring.package=org.ops4j.pax.swissbox.bnd)"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.pax.swissbox.tinybundles.core)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.pax.swissbox.tinybundles.dp)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.ops4j.store)(version&gt;=1.2.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-    <requirement namespace="osgi.wiring.package">
-      <directive name="filter" value="(&amp;(osgi.wiring.package=org.osgi.framework)(version&gt;=1.3.0)(!(version&gt;=2.0.0)))"/>
-    </requirement>
-  </resource>
-  <resource>
     <capability namespace="osgi.identity">
       <attribute name="osgi.identity" value="org.osgi.impl.bundle.bindex"/>
       <attribute name="type" value="osgi.bundle"/>

Modified: ace/trunk/cnf/localrepo/index.xml.sha
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/index.xml.sha?rev=1726222&r1=1726221&r2=1726222&view=diff
==============================================================================
--- ace/trunk/cnf/localrepo/index.xml.sha (original)
+++ ace/trunk/cnf/localrepo/index.xml.sha Fri Jan 22 14:44:51 2016
@@ -1 +1 @@
-7baf16715ecdbf5757c81d49267876c78f1c0cd1c0010d9e6f2ab13f04624bc8
\ No newline at end of file
+268ea703ab955c27bac260c994c9c12aaa72566cddf6b7ac053fbc8d34cf9d05
\ No newline at end of file

Added: ace/trunk/cnf/localrepo/javax.inject/javax.inject-1.0.0.jar
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/javax.inject/javax.inject-1.0.0.jar?rev=1726222&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ace/trunk/cnf/localrepo/javax.inject/javax.inject-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/trunk/cnf/localrepo/org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar?rev=1726222&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ace/trunk/cnf/localrepo/org.apache.commons.codec/org.apache.commons.codec-1.4.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/trunk/cnf/localrepo/org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar?rev=1726222&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ace/trunk/cnf/localrepo/org.apache.commons.collections/org.apache.commons.collections-3.2.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/trunk/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.1.jar
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.1.jar?rev=1726222&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ace/trunk/cnf/localrepo/org.apache.commons.io/org.apache.commons.io-2.0.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ace/trunk/cnf/localrepo/org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar
URL: http://svn.apache.org/viewvc/ace/trunk/cnf/localrepo/org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar?rev=1726222&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ace/trunk/cnf/localrepo/org.apache.commons.lang/org.apache.commons.lang-2.4.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: ace/trunk/org.apache.ace.deployment/bnd.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/bnd.bnd?rev=1726222&r1=1726221&r2=1726222&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.deployment/bnd.bnd (original)
+++ ace/trunk/org.apache.ace.deployment/bnd.bnd Fri Jan 22 14:44:51 2016
@@ -1,11 +1,9 @@
--buildpath: ${^-buildpath},\
+-buildpath: \
+	${^-buildpath},\
 	osgi.core,\
 	osgi.cmpn,\
 	javax.servlet,\
 	org.apache.felix.dependencymanager,\
-	org.ops4j.pax.swissbox.tinybundles,\
-	org.ops4j.base.store,\
-	commons-logging,\
 	com.vaadin,\
 	org.apache.ace.authentication.api;version=latest,\
 	org.apache.ace.identification.api;version=latest,\

Modified: ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java?rev=1726222&r1=1726221&r2=1726222&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java (original)
+++ ace/trunk/org.apache.ace.deployment/test/org/apache/ace/deployment/streamgenerator/impl/StreamTest.java Fri Jan 22 14:44:51 2016
@@ -20,10 +20,7 @@ package org.apache.ace.deployment.stream
 
 import static org.apache.ace.test.utils.TestUtils.BROKEN;
 import static org.apache.ace.test.utils.TestUtils.UNIT;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.newBundle;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -41,6 +38,7 @@ import org.apache.ace.connectionfactory.
 import org.apache.ace.deployment.provider.DeploymentProvider;
 import org.apache.ace.deployment.util.test.TestProvider;
 import org.apache.ace.test.constants.TestConstants;
+import org.apache.ace.test.utils.FileUtils;
 import org.apache.ace.test.utils.TestUtils;
 import org.osgi.service.log.LogService;
 import org.osgi.service.useradmin.User;
@@ -60,23 +58,10 @@ public class StreamTest {
     protected void setUp() throws Exception {
         m_generator = new StreamGeneratorImpl();
         m_provider = new TestProvider();
-        InputStream is = newBundle().build(); // TODO this is a very trivial bundle, put more data in?
-        File temp = File.createTempFile("bundle", "jar");
-        temp.deleteOnExit();
-        FileOutputStream fos = new FileOutputStream(temp);
-        byte[] buf = new byte[4096];
-        int b = is.read(buf);
-        while (b != -1) {
-            fos.write(buf, 0, b);
-            b = is.read(buf);
-        }
-        fos.close();
-        is.close();
-        URL url = temp.toURI().toURL();
-        
-        m_provider.addData("A1.jar", "A1", url, "1.0.0", true);
-        m_provider.addData("A2.jar", "A2", url, "1.0.0", false);
-        m_provider.addData("A3.jar", "A3", url, "1.0.0", true);
+
+        m_provider.addData("A1.jar", "A1", FileUtils.createEmptyBundle(null, "org.apache.ace.test.bundle.A1").toURI().toURL(), "1.0.0", true);
+        m_provider.addData("A2.jar", "A2", FileUtils.createEmptyBundle(null, "org.apache.ace.test.bundle.A2").toURI().toURL(), "1.0.0", false);
+        m_provider.addData("A3.jar", "A3", FileUtils.createEmptyBundle(null, "org.apache.ace.test.bundle.A3").toURI().toURL(), "1.0.0", true);
         TestUtils.configureObject(m_generator, DeploymentProvider.class, m_provider);
         TestUtils.configureObject(m_generator, LogService.class);
         TestUtils.configureObject(m_generator, ConnectionFactory.class, new MockConnectionFactory());

Added: ace/trunk/org.apache.ace.processlauncher.itest/.classpath
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.processlauncher.itest/.classpath?rev=1726222&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.processlauncher.itest/.classpath (added)
+++ ace/trunk/org.apache.ace.processlauncher.itest/.classpath Fri Jan 22 14:44:51 2016
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="bin" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="aQute.bnd.classpath.container"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Propchange: ace/trunk/org.apache.ace.processlauncher.itest/.classpath
------------------------------------------------------------------------------
    svn:eol-style = native

Added: ace/trunk/org.apache.ace.processlauncher.itest/.project
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.processlauncher.itest/.project?rev=1726222&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.processlauncher.itest/.project (added)
+++ ace/trunk/org.apache.ace.processlauncher.itest/.project Fri Jan 22 14:44:51 2016
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.apache.ace.processlauncher.itest</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>bndtools.core.bndbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>bndtools.core.bndnature</nature>
+	</natures>
+</projectDescription>

Propchange: ace/trunk/org.apache.ace.processlauncher.itest/.project
------------------------------------------------------------------------------
    svn:eol-style = native

Added: ace/trunk/org.apache.ace.processlauncher.itest/bnd.bnd
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.processlauncher.itest/bnd.bnd?rev=1726222&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.processlauncher.itest/bnd.bnd (added)
+++ ace/trunk/org.apache.ace.processlauncher.itest/bnd.bnd Fri Jan 22 14:44:51 2016
@@ -0,0 +1,24 @@
+Test-Cases: ${classes;CONCRETE;EXTENDS;org.apache.ace.it.IntegrationTestBase}
+-buildpath: \
+	${^-buildpath},\
+	org.apache.felix.dependencymanager,\
+	junit.osgi,\
+	osgi.core,\
+	osgi.cmpn,\
+	org.apache.ace.test;version=latest,\
+	org.apache.ace.processlauncher;version=latest
+-runfw: org.apache.felix.framework;version='[4,5)'
+-runvm: -ea
+-runbundles: \
+	osgi.cmpn,\
+	org.apache.felix.log,\
+	org.apache.felix.dependencymanager,\
+	org.apache.felix.configadmin,\
+	org.apache.ace.test;version=latest,\
+	org.apache.ace.processlauncher;version=latest
+Private-Package: org.apache.ace.processlauncher.itest
+Bundle-Version: 1.0.0
+Bundle-Name: Apache ACE ProcessLauncher Integration Test
+Bundle-Description: Registers a service factory and ProcessLauncher service
+Bundle-Category: itest
+-baseline:

Added: ace/trunk/org.apache.ace.processlauncher.itest/build.xml
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.processlauncher.itest/build.xml?rev=1726222&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.processlauncher.itest/build.xml (added)
+++ ace/trunk/org.apache.ace.processlauncher.itest/build.xml Fri Jan 22 14:44:51 2016
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="project" default="build"> 
+	<import file="../cnf/build.xml"/>
+</project>

Propchange: ace/trunk/org.apache.ace.processlauncher.itest/build.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ace/trunk/org.apache.ace.processlauncher.itest/build.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java?rev=1726222&view=auto
==============================================================================
--- ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java (added)
+++ ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java Fri Jan 22 14:44:51 2016
@@ -0,0 +1,379 @@
+/*
+ * 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.ace.processlauncher.itest;
+
+import static org.apache.ace.processlauncher.itest.TestUtil.getOSName;
+import static org.apache.ace.processlauncher.itest.TestUtil.sleep;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+
+import org.apache.ace.it.IntegrationTestBase;
+import org.apache.ace.processlauncher.LaunchConfiguration;
+import org.apache.ace.processlauncher.ProcessLauncherService;
+import org.apache.ace.processlauncher.ProcessLifecycleListener;
+import org.apache.ace.processlauncher.ProcessStreamListener;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.util.tracker.ServiceTracker;
+
+import junit.framework.AssertionFailedError;
+
+/**
+ * Integration test for {@link ProcessLauncherService}.
+ */
+public class ProcessLauncherRespawnIntegrationTest extends IntegrationTestBase {
+
+    private final BundleContext m_context = FrameworkUtil.getBundle(getClass()).getBundleContext();
+
+    /**
+     * Tests that a new process will be respawned if its exit value is non-equal to two.
+     * 
+     * @throws Exception not part of this test case.
+     */
+    public void testRespawnProcessWithExitValueTwoOnUnixBasedHostsOk() throws Exception {
+        // Test will not work on Windows!
+        if (getOSName().contains("windows")) {
+            return;
+        }
+
+        File tmpFile = createEmptyTempFile();
+
+        doTestRespawnProcess(tmpFile, "2", null /* psFilter */, null /* lcFilter */);
+
+        String contents = TestUtil.slurpFile(tmpFile);
+        assertTrue(contents, contents.matches("(?s)0.+1.+2.+"));
+    }
+
+    /**
+     * Tests that a new process will be respawned if its exit value is non-zero.
+     * 
+     * @throws Exception not part of this test case.
+     */
+    public void testRespawnProcessWithExitValueZeroOnUnixBasedHostsOk() throws Exception {
+        // Test will not work on Windows!
+        if (getOSName().contains("windows")) {
+            return;
+        }
+
+        File tmpFile = createEmptyTempFile();
+
+        doTestRespawnProcess(tmpFile, "0", null /* psFilter */, null /* lcFilter */);
+
+        String contents = TestUtil.slurpFile(tmpFile);
+        assertTrue(contents, contents.matches("(?s)0.+1.+2.+3.+4.+"));
+    }
+
+    /**
+     * Tests that a new process will be respawned, and its process stream listener is called for
+     * each respawn.
+     * 
+     * @throws Exception not part of this test case.
+     */
+    public void testRespawnProcessWithProcessStreamListenersOnUnixBasedHostsOk() throws Exception {
+        // Test will not work on Windows!
+        if (getOSName().contains("windows")) {
+            return;
+        }
+
+        File tmpFile = createEmptyTempFile();
+
+        TestProcessStreamListener psl = new TestProcessStreamListener();
+        String filter = registerProcessStreamListener(psl, "baz", "bam");
+
+        doTestRespawnProcess(tmpFile, "0", filter, null /* lcFilter */);
+
+        // Check whether our PSL is obtained and called...
+        assertEquals(5, psl.m_setStdoutCallCount);
+        assertEquals(5, psl.m_setStdinCallCount);
+
+        String contents = TestUtil.slurpFile(tmpFile);
+        assertTrue(contents, contents.matches("(?s)0.+1.+2.+3.+4.+"));
+    }
+
+    /**
+     * Tests that a new process will be respawned, and its process lifecycle listener is called for
+     * each respawn.
+     * 
+     * @throws Exception not part of this test case.
+     */
+    public void testRespawnProcessWithProcessLifecycleListenersOnUnixBasedHostsOk() throws Exception {
+        // Test will not work on Windows!
+        if (getOSName().contains("windows")) {
+            return;
+        }
+
+        File tmpFile = createEmptyTempFile();
+
+        TestProcessLifecycleListener pll = new TestProcessLifecycleListener();
+        String filter = registerProcessLifecycleListener(pll, "bar", "foo");
+
+        doTestRespawnProcess(tmpFile, "0", null /* psFilter */, filter);
+
+        // Check whether our PSL is obtained and called...
+        assertEquals(5, pll.m_afterCallCount);
+        assertEquals(5, pll.m_beforeCallCount);
+
+        String contents = TestUtil.slurpFile(tmpFile);
+        assertTrue(contents, contents.matches("(?s)0.+1.+2.+3.+4.+"));
+    }
+
+    /**
+     * Creates an empty temporary file, that is deleted on exit of the JVM.
+     * 
+     * @return a file instance pointing to a new temporary file.
+     * @throws IOException in case of I/O problems.
+     */
+    private File createEmptyTempFile() throws IOException {
+        File tmpFile = File.createTempFile("pls", null);
+        tmpFile.deleteOnExit();
+        return tmpFile;
+    }
+
+    /**
+     * Actual test implementation for <tt>#testRespawnProcessWithExitValue*<tt>.
+     * 
+     * @param tmpFile the temporary file to write the script results to;
+     * @param normalExitValue the exit value that should be considered as normal.
+     * @throws IOException in case of I/O problems.
+     */
+    private void doTestRespawnProcess(File tmpFile, String normalExitValue, String psFilter, String lcFilter)
+        throws IOException {
+
+        int count = 4;
+        String tmpFilename = tmpFile.getAbsolutePath();
+
+        // Seems daunting, but what this command does is simply count the number
+        // of lines in a given file (= tmpFile), and append this to that same
+        // file; it uses this number to create an exit value, which counts from
+        // <count> back to 0. This way, we can test whether the respawn
+        // functionality works, as this currently checks for certain exit
+        // values...
+        String args =
+            String.format("-c L=$(cat\\ %1$s\\ |\\ wc\\ -l)\\ &&\\ echo\\ $L\\ >>\\ %1$s\\ &&\\ exit\\ $((%2$d-$L))",
+                tmpFilename, count);
+
+        Properties launchConfig = new Properties();
+        launchConfig.put("instance.count", "1");
+        launchConfig.put("executable.name", "/bin/bash");
+        launchConfig.put("executable.args", args);
+        launchConfig.put("executable.workingDir", "/tmp");
+        launchConfig.put("executable.respawnAutomatically", "true");
+        launchConfig.put("executable.normalExitValue", normalExitValue);
+        if (psFilter != null) {
+            launchConfig.put("executable.processStreamListener", psFilter);
+        }
+        if (lcFilter != null) {
+            launchConfig.put("executable.processLifecycleListener", lcFilter);
+        }
+
+        configureFactory(ProcessLauncherService.PID, launchConfig);
+
+        // Wait until the processes are done...
+        sleep(1000);
+    }
+
+    /**
+     * Registers a given process stream listener and returns the filter clause to obtain that same
+     * instance through OSGi.
+     * 
+     * @param processStreamListener the process stream listener to register, cannot be
+     *        <code>null</code>.
+     * @return the filter clause to obtain the exact same process stream listener through OSGi,
+     *         never <code>null</code>.
+     */
+    private String registerProcessStreamListener(TestProcessStreamListener processStreamListener, String... properties) {
+        assertEquals("Number of properties not a multiple of two!", 0, properties.length % 2);
+
+        String className = ProcessStreamListener.class.getName();
+        String extraFilter = "";
+
+        Properties props = new Properties();
+        for (int i = 0; i < properties.length; i += 2) {
+            String key = properties[i];
+            String value = properties[i + 1];
+
+            extraFilter = String.format("%s(%s=%s)", extraFilter, key, value);
+            props.setProperty(key, value);
+        }
+
+        m_dependencyManager.add(m_dependencyManager.createComponent().setInterface(className, props)
+            .setImplementation(processStreamListener));
+
+        if (extraFilter.trim().isEmpty()) {
+            return String.format("(%s=%s)", Constants.OBJECTCLASS, className);
+        }
+        return String.format("(&(%s=%s)%s)", Constants.OBJECTCLASS, className, extraFilter);
+    }
+
+    /**
+     * Registers a given process lifecycle listener and returns the filter clause to obtain that
+     * same instance through OSGi.
+     * 
+     * @param processLifecycleListener the process lifecycle listener to register, cannot be
+     *        <code>null</code>.
+     * @return the filter clause to obtain the exact same process stream listener through OSGi,
+     *         never <code>null</code>.
+     */
+    private String registerProcessLifecycleListener(TestProcessLifecycleListener processLifecycleListener,
+        String... properties) {
+        assertEquals("Number of properties not a multiple of two!", 0, properties.length % 2);
+
+        String className = ProcessLifecycleListener.class.getName();
+        String extraFilter = "";
+
+        Properties props = new Properties();
+        for (int i = 0; i < properties.length; i += 2) {
+            String key = properties[i];
+            String value = properties[i + 1];
+
+            extraFilter = String.format("%s(%s=%s)", extraFilter, key, value);
+            props.setProperty(key, value);
+        }
+
+        m_dependencyManager.add(m_dependencyManager.createComponent().setInterface(className, props)
+            .setImplementation(processLifecycleListener));
+
+        if (extraFilter.trim().isEmpty()) {
+            return String.format("(%s=%s)", Constants.OBJECTCLASS, className);
+        }
+        return String.format("(&(%s=%s)%s)", Constants.OBJECTCLASS, className, extraFilter);
+    }
+
+    /**
+     * Lazily initializes the configuration admin service and returns it.
+     * 
+     * @return the {@link ConfigurationAdmin} instance, never <code>null</code>.
+     * @throws AssertionFailedError in case the {@link ConfigurationAdmin} service couldn't be
+     *         obtained.
+     */
+    private ConfigurationAdmin getConfigAdmin() {
+        ServiceTracker serviceTracker = new ServiceTracker(m_context, ConfigurationAdmin.class.getName(), null);
+
+        ConfigurationAdmin instance = null;
+
+        serviceTracker.open();
+        try {
+            instance = (ConfigurationAdmin) serviceTracker.waitForService(2 * 1000);
+
+            if (instance == null) {
+                fail("ConfigurationAdmin service not found!");
+            }
+            else {
+                return instance;
+            }
+        }
+        catch (InterruptedException e) {
+            // Make sure the thread administration remains correct!
+            Thread.currentThread().interrupt();
+
+            e.printStackTrace();
+            fail("ConfigurationAdmin service not available: " + e.toString());
+        }
+
+        return instance;
+    }
+
+    /**
+     * Creates a factory configuration with the given properties, just like {@link #configure}.
+     * 
+     * @param factoryPid the PID of the factory that should be used to create a configuration;
+     * @param properties the new configuration properties to configure, can be <code>null</code>.
+     * @return The PID of newly created configuration.
+     * @throws IOException when the configuration couldn't be set/updated.
+     * @throws AssertionFailedError in case the {@link ConfigurationAdmin} service couldn't be
+     *         obtained.
+     */
+    private String configureFactory(String factoryPid, Properties properties) throws IOException {
+        assertNotNull("Parameter factoryPid cannot be null!", factoryPid);
+
+        org.osgi.service.cm.Configuration config = getConfigAdmin().createFactoryConfiguration(factoryPid, null);
+        config.update(properties);
+
+        // Delay a bit to allow configuration to be propagated...
+        sleep(500);
+
+        return config.getPid();
+    }
+
+    /**
+     * Testing implementation of {@link ProcessLifecycleListener}.
+     */
+    static final class TestProcessLifecycleListener implements ProcessLifecycleListener {
+        private volatile int m_beforeCallCount = 0;
+        private volatile int m_afterCallCount = 0;
+
+        /**
+         * {@inheritDoc}
+         */
+        public void afterProcessEnd(LaunchConfiguration configuration) {
+            m_afterCallCount++;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public Properties beforeProcessStart(LaunchConfiguration configuration) {
+            m_beforeCallCount++;
+            return null;
+        }
+    }
+
+    /**
+     * Testing implementation of {@link ProcessStreamListener}.
+     */
+    static class TestProcessStreamListener implements ProcessStreamListener {
+
+        private volatile int m_setStdinCallCount = 0;
+        private volatile int m_setStdoutCallCount = 0;
+
+        /**
+         * {@inheritDoc}
+         */
+        public void setStdin(LaunchConfiguration launchConfiguration, OutputStream outputStream) {
+            m_setStdinCallCount++;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public void setStdout(LaunchConfiguration launchConfiguration, InputStream inputStream) {
+            m_setStdoutCallCount++;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public boolean wantsStdin() {
+            return true;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        public boolean wantsStdout() {
+            return true;
+        }
+    }
+}

Propchange: ace/trunk/org.apache.ace.processlauncher.itest/src/org/apache/ace/processlauncher/itest/ProcessLauncherRespawnIntegrationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message