You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by hu...@apache.org on 2011/11/08 18:27:37 UTC

svn commit: r1199354 [1/2] - in /aries/branches/oct-2011-release: ./ application/ application/application-itests/ application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/util/ application/application-itests/src/test/jav...

Author: hughesj
Date: Tue Nov  8 17:27:34 2011
New Revision: 1199354

URL: http://svn.apache.org/viewvc?rev=1199354&view=rev
Log:
Merging trunk into the branch from r1189798-1199347 in preparation to reintegration

Added:
    aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/isolated/config/
      - copied from r1199347, aries/trunk/application/application-itests/src/test/java/org/apache/aries/isolated/config/
    aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/isolated/config/HelloWorldManagedServiceImpl.java
      - copied unchanged from r1199347, aries/trunk/application/application-itests/src/test/java/org/apache/aries/isolated/config/HelloWorldManagedServiceImpl.java
    aries/branches/oct-2011-release/application/application-itests/src/test/resources/isolated/config/
      - copied from r1199347, aries/trunk/application/application-itests/src/test/resources/isolated/config/
    aries/branches/oct-2011-release/application/application-itests/src/test/resources/isolated/config/APPLICATION-BP.MF
      - copied unchanged from r1199347, aries/trunk/application/application-itests/src/test/resources/isolated/config/APPLICATION-BP.MF
    aries/branches/oct-2011-release/application/application-itests/src/test/resources/isolated/config/APPLICATION-MN.MF
      - copied unchanged from r1199347, aries/trunk/application/application-itests/src/test/resources/isolated/config/APPLICATION-MN.MF
    aries/branches/oct-2011-release/application/application-itests/src/test/resources/isolated/config/blueprint.xml
      - copied unchanged from r1199347, aries/trunk/application/application-itests/src/test/resources/isolated/config/blueprint.xml
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/LICENSE
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/LICENSE
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/NOTICE
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/NOTICE
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/pom.xml
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/pom.xml
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/cm/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/cm/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/cm/itest/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/cm/itest/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/cm/itest/ConfigurationPostResolverTest.java
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm-itests/src/test/java/org/apache/aries/application/resolve/transform/cm/itest/ConfigurationPostResolverTest.java
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/LICENSE
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm/LICENSE
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/NOTICE
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm/NOTICE
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/pom.xml
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm/pom.xml
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/aries/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/aries/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/transform/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/transform/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/transform/cm/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/transform/cm/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/transform/cm/ConfigurationPostResolveTransformerImpl.java
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/java/org/apache/aries/application/resolve/transform/cm/ConfigurationPostResolveTransformerImpl.java
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/resources/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/resources/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/resources/OSGI-INF/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/resources/OSGI-INF/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/resources/OSGI-INF/blueprint/
      - copied from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/resources/OSGI-INF/blueprint/
    aries/branches/oct-2011-release/application/application-resolve-transform-cm/src/main/resources/OSGI-INF/blueprint/blueprint.xml
      - copied unchanged from r1199347, aries/trunk/application/application-resolve-transform-cm/src/main/resources/OSGI-INF/blueprint/blueprint.xml
    aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BaseBlueprintContainerBTCustomizerTest.java
      - copied unchanged from r1199347, aries/trunk/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BaseBlueprintContainerBTCustomizerTest.java
    aries/branches/oct-2011-release/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java
      - copied unchanged from r1199347, aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java
    aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/ProxyTestClassStaticInitOfChild.java
      - copied unchanged from r1199347, aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/ProxyTestClassStaticInitOfChild.java
    aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/ProxyTestClassStaticInitOfChildParent.java
      - copied unchanged from r1199347, aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/ProxyTestClassStaticInitOfChildParent.java
Modified:
    aries/branches/oct-2011-release/   (props changed)
    aries/branches/oct-2011-release/application/application-itests/pom.xml
    aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/util/IsolationTestUtils.java
    aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/AbstractParserProxy.java
    aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java
    aries/branches/oct-2011-release/application/application-runtime-framework-management/src/main/java/org/apache/aries/application/runtime/framework/management/SharedBundleFramework.java
    aries/branches/oct-2011-release/application/pom.xml
    aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmNamespaceHandler.java
    aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml
    aries/branches/oct-2011-release/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
    aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
    aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java
    aries/branches/oct-2011-release/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java
    aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/JmxConstants.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/ServiceStateMBean.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/BlueprintMetadataMBean.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/BlueprintStateMBean.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/Item.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/JmxConstants.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/Activator.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/BlueprintMetadata.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/BlueprintState.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/test/java/org/apache/aries/jmx/blueprint/impl/BlueprintMetadataTest.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/test/java/org/apache/aries/jmx/blueprint/impl/BlueprintStateTest.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceData.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/util/TypeUtils.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleRevisionsStateMBeanTest.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanTest.java
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/test/blueprint/BlueprintMBeanTest.java   (props changed)
    aries/branches/oct-2011-release/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/test/blueprint/framework/   (props changed)

Propchange: aries/branches/oct-2011-release/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -1 +1 @@
-/aries/trunk:1185252-1190455
+/aries/trunk:1185252-1199347

Modified: aries/branches/oct-2011-release/application/application-itests/pom.xml
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/application/application-itests/pom.xml?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/application/application-itests/pom.xml (original)
+++ aries/branches/oct-2011-release/application/application-itests/pom.xml Tue Nov  8 17:27:34 2011
@@ -197,6 +197,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+		    <groupId>org.apache.aries.application</groupId>
+		    <artifactId>org.apache.aries.application.resolve.transform.cm</artifactId>
+		    <version>0.3.1-SNAPSHOT</version>
+       	</dependency>
+        <dependency>
              <groupId>org.apache.aries.application</groupId>
              <artifactId>org.apache.aries.application.default.local.platform</artifactId>
             <version>0.3.1-SNAPSHOT</version>

Modified: aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/util/IsolationTestUtils.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/util/IsolationTestUtils.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/util/IsolationTestUtils.java (original)
+++ aries/branches/oct-2011-release/application/application-itests/src/test/java/org/apache/aries/application/runtime/itests/util/IsolationTestUtils.java Tue Nov  8 17:27:34 2011
@@ -20,8 +20,11 @@ package org.apache.aries.application.run
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.net.MalformedURLException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Hashtable;
@@ -146,6 +149,42 @@ public class IsolationTestUtils {
     repoAdmin.addRepository(new File("repo.xml").toURI().toString());
   }
   
+  public static HelloWorld findHelloWorldService(BundleContext ctx) throws Exception
+  {
+	  if (ctx != null)
+	  {
+	      // Dive into the context and pull out the composite bundle for the app
+	      Filter osgiFilter = FrameworkUtil.createFilter("(" + Constants.OBJECTCLASS + "=" + HelloWorld.class.getName() + ")");
+	      ServiceTracker tracker = new ServiceTracker(ctx, 
+	          osgiFilter,
+	          null);
+	      
+	      tracker.open();
+	      final Object hw = tracker.waitForService(DEFAULT_TIMEOUT);
+	      tracker.close();
+	
+	      if (hw != null) {
+	        // proxy because the class space between the sample app and the test bundle is not consistent
+	        return new HelloWorld() {
+	          public String getMessage() {
+	            try {
+	              Method m = hw.getClass().getMethod("getMessage");
+	              return (String) m.invoke(hw);
+	            } catch (Exception e) {
+	              throw new RuntimeException(e);
+	            }
+	          }
+	        };
+	      } else {
+	        return null;
+	      }	 
+	  }
+	  else
+	  {
+		  return null;
+	  }
+  }
+  
   /**
    * Find the {@link HelloWorld} service for the isolated app
    * @return the service object, suitably proxied so that it can be actually used, or null if the service is not present
@@ -156,34 +195,9 @@ public class IsolationTestUtils {
     BundleContext appContext = IsolationTestUtils.findIsolatedAppBundleContext(runtimeCtx, appName);
     
     if (appContext != null) {  
-      // Dive into the context and pull out the composite bundle for the app
-      Filter osgiFilter = FrameworkUtil.createFilter("(" + Constants.OBJECTCLASS + "=" + HelloWorld.class.getName() + ")");
-      ServiceTracker tracker = new ServiceTracker(appContext, 
-          osgiFilter,
-          null);
-      
-      tracker.open();
-      final Object hw = tracker.waitForService(DEFAULT_TIMEOUT);
-      tracker.close();
-
-      if (hw != null) {
-        // proxy because the class space between the sample app and the test bundle is not consistent
-        return new HelloWorld() {
-          public String getMessage() {
-            try {
-              Method m = hw.getClass().getMethod("getMessage");
-              return (String) m.invoke(hw);
-            } catch (Exception e) {
-              throw new RuntimeException(e);
-            }
-          }
-        };
-      } else {
-        return null;
-      }
-
+    	return findHelloWorldService(appContext);
     } else {
       throw new IllegalStateException("Expected to find isolated app ctx, but didn't");
     }
   }
-}
+}
\ No newline at end of file

Modified: aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/AbstractParserProxy.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/AbstractParserProxy.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/AbstractParserProxy.java (original)
+++ aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/AbstractParserProxy.java Tue Nov  8 17:27:34 2011
@@ -323,6 +323,9 @@ abstract public class AbstractParserProx
 	      blacklisted |= iface.equals("javax.transaction.UserTransaction");
 	      blacklisted |= iface.equals("javax.transaction.TransactionSynchronizationRegistry");
 	      
+	      // ConfigurationAdmin - detect interface
+	      blacklisted |= iface.equals("org.osgi.service.cm.ConfigurationAdmin");
+	               
 	      // Don't provision against JNDI references
 	      if (blueprintFilter != null && blueprintFilter.trim().length() != 0) { 
 	        Map<String, String> filter = ManifestHeaderProcessor.parseFilter(blueprintFilter);

Modified: aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java (original)
+++ aries/branches/oct-2011-release/application/application-modeller/src/main/java/org/apache/aries/application/modelling/impl/ModelledResourceManagerImpl.java Tue Nov  8 17:27:34 2011
@@ -233,7 +233,13 @@ public class ModelledResourceManagerImpl
         String directoryName = "";
         String fileName = "";
         if (directoryFullPath.lastIndexOf("/") != -1) {
-            directoryName = directoryFullPath.substring(0, directoryFullPath.lastIndexOf("/"));
+        	// This bundle may be nested within another archive. In that case, we need to trim
+        	// /bundleFileName.jar from the front of the directory. 
+        	int bundleNameLength = bundle.getName().length();
+            directoryName = directoryFullPath.substring(bundleNameLength, directoryFullPath.lastIndexOf("/"));
+            if (directoryName.startsWith("/") && directoryName.length() > 1) { 
+            	directoryName = directoryName.substring(1);
+            }
             fileName = directoryFullPath.substring(directoryFullPath.lastIndexOf("/") + 1);
         } else {
             if (file.isFile()) {

Modified: aries/branches/oct-2011-release/application/application-runtime-framework-management/src/main/java/org/apache/aries/application/runtime/framework/management/SharedBundleFramework.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/application/application-runtime-framework-management/src/main/java/org/apache/aries/application/runtime/framework/management/SharedBundleFramework.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/application/application-runtime-framework-management/src/main/java/org/apache/aries/application/runtime/framework/management/SharedBundleFramework.java (original)
+++ aries/branches/oct-2011-release/application/application-runtime-framework-management/src/main/java/org/apache/aries/application/runtime/framework/management/SharedBundleFramework.java Tue Nov  8 17:27:34 2011
@@ -19,23 +19,15 @@
 
 package org.apache.aries.application.runtime.framework.management;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
-import java.util.jar.Attributes;
 
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.Version;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.aries.application.Content;
-import org.apache.aries.application.management.BundleInfo;
 import org.apache.aries.application.management.spi.framework.BundleFramework;
 import org.apache.aries.application.management.spi.framework.BundleFrameworkConfiguration;
 import org.apache.aries.application.management.spi.framework.BundleFrameworkConfigurationFactory;
@@ -57,7 +49,7 @@ public class SharedBundleFramework
    * org.osgi.service.blueprint package is deliberately unversioned as it is
    * not part of the osgi compendium.
    */
-  private static final String RUNTIME_PACKAGES = "org.osgi.service.blueprint,org.osgi.service.blueprint.container;version=\"[1.0.0,1.0.1]\",org.osgi.service.blueprint.reflect;version=\"[1.0.0,1.0.1]\",org.apache.aries.transaction.exception;version=\"[0.1,1.0.0)\"";
+  private static final String RUNTIME_PACKAGES = "org.osgi.service.blueprint,org.osgi.service.blueprint.container;version=\"[1.0.0,1.0.1]\",org.osgi.service.blueprint.reflect;version=\"[1.0.0,1.0.1]\",org.apache.aries.transaction.exception;version=\"[0.1,1.0.0)\",org.osgi.service.cm;resolution:=optional";
 
   /**
    * create using any bundle context in EBA App framework as we want to create
@@ -145,7 +137,7 @@ public class SharedBundleFramework
       Properties compositeManifest = basicConfig.getFrameworkManifest();
       
       compositeManifest.put(Constants.BUNDLE_SYMBOLICNAME, BundleFramework.SHARED_BUNDLE_FRAMEWORK);
-
+      
       // Add blueprint so that it is available to applications, unless configuration has already been provided.
       String existingImports = (String) compositeManifest.get(Constants.IMPORT_PACKAGE);
       if (existingImports == null){

Modified: aries/branches/oct-2011-release/application/pom.xml
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/application/pom.xml?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/application/pom.xml (original)
+++ aries/branches/oct-2011-release/application/pom.xml Tue Nov  8 17:27:34 2011
@@ -49,6 +49,8 @@
       <module>application-modeller-common-test</module>
       <module>application-noop-resolver</module>
       <module>application-obr-resolver</module>
+      <module>application-resolve-transform-cm</module>
+      <module>application-resolve-transform-cm-itests</module>
       <module>application-runtime</module>
 	    <module>application-runtime-isolated</module>
 	    <module>application-runtime-framework</module>

Modified: aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmNamespaceHandler.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmNamespaceHandler.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmNamespaceHandler.java (original)
+++ aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmNamespaceHandler.java Tue Nov  8 17:27:34 2011
@@ -42,9 +42,12 @@ import org.apache.aries.blueprint.mutabl
 import org.apache.aries.blueprint.mutable.MutableIdRefMetadata;
 import org.apache.aries.blueprint.mutable.MutableMapMetadata;
 import org.apache.aries.blueprint.mutable.MutableRefMetadata;
+import org.apache.aries.blueprint.mutable.MutableReferenceMetadata;
 import org.apache.aries.blueprint.mutable.MutableValueMetadata;
+import org.apache.aries.blueprint.reflect.PassThroughMetadataImpl;
 import org.apache.aries.blueprint.utils.PlaceholdersUtils;
 import org.apache.aries.blueprint.utils.ServiceListener;
+import org.osgi.framework.BundleContext;
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.osgi.service.blueprint.reflect.BeanMetadata;
 import org.osgi.service.blueprint.reflect.BeanProperty;
@@ -54,6 +57,7 @@ import org.osgi.service.blueprint.reflec
 import org.osgi.service.blueprint.reflect.MapMetadata;
 import org.osgi.service.blueprint.reflect.Metadata;
 import org.osgi.service.blueprint.reflect.RefMetadata;
+import org.osgi.service.blueprint.reflect.ReferenceMetadata;
 import org.osgi.service.blueprint.reflect.RegistrationListener;
 import org.osgi.service.blueprint.reflect.ServiceMetadata;
 import org.osgi.service.blueprint.reflect.ValueMetadata;
@@ -202,7 +206,7 @@ public class CmNamespaceHandler implemen
         metadata.setInitMethod("init");
         metadata.setDestroyMethod("destroy");
         metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
-        metadata.addProperty("configAdmin", createConfigAdminProxy(context));
+        metadata.addProperty("configAdmin", createConfigurationAdminRef(context));
         metadata.addProperty("persistentId", createValue(context, element.getAttribute(PERSISTENT_ID_ATTRIBUTE)));
         String prefix = element.hasAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
                                     ? element.getAttribute(PLACEHOLDER_PREFIX_ATTRIBUTE)
@@ -318,7 +322,7 @@ public class CmNamespaceHandler implemen
         factoryMetadata.setRuntimeClass(CmManagedServiceFactory.class);
         factoryMetadata.setInitMethod("init");
         factoryMetadata.setDestroyMethod("destroy");
-        factoryMetadata.addProperty("configAdmin", createConfigAdminProxy(context));
+        factoryMetadata.addProperty("configAdmin", createConfigurationAdminRef(context));
         factoryMetadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
         factoryMetadata.addProperty("factoryPid", createValue(context, element.getAttribute(FACTORY_PID_ATTRIBUTE)));
         String autoExport = element.hasAttribute(AUTO_EXPORT_ATTRIBUTE) ? element.getAttribute(AUTO_EXPORT_ATTRIBUTE) : AUTO_EXPORT_DEFAULT;
@@ -422,7 +426,7 @@ public class CmNamespaceHandler implemen
             metadata.setDestroyMethod("destroy");
         }
         metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
-        metadata.addProperty("configAdmin", createConfigAdminProxy(context));
+        metadata.addProperty("configAdmin", createConfigurationAdminRef(context));
         metadata.addProperty("managedObjectManager", createRef(context, MANAGED_OBJECT_MANAGER_NAME));
         metadata.addProperty("persistentId", createValue(context, persistentId));
         if (element.hasAttribute(UPDATE_ATTRIBUTE)) {
@@ -451,7 +455,7 @@ public class CmNamespaceHandler implemen
             metadata.setDestroyMethod("destroy");
         }
         metadata.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
-        metadata.addProperty("configAdmin", createConfigAdminProxy(context));
+        metadata.addProperty("configAdmin", createConfigurationAdminRef(context));
         metadata.addProperty("managedObjectManager", createRef(context, MANAGED_OBJECT_MANAGER_NAME));
         metadata.addProperty("persistentId", createValue(context, persistentId));
         String updateStrategy = element.getAttribute(UPDATE_STRATEGY_ATTRIBUTE);
@@ -468,22 +472,6 @@ public class CmNamespaceHandler implemen
         return component;
     }
 
-    /**
-     * Create a reference to the ConfigurationAdmin service if not already done
-     * and add it to the registry.
-     *
-     * @param context the parser context
-     * @return a metadata pointing to the config admin
-     */
-    private Metadata createConfigAdminProxy(ParserContext context) {
-        MutableBeanMetadata bean = context.createMetadata(MutableBeanMetadata.class);
-        bean.setRuntimeClass(CmNamespaceHandler.class);
-        bean.setFactoryMethod("getConfigAdmin");
-        bean.setActivation(MutableBeanMetadata.ACTIVATION_LAZY);
-        bean.setScope(MutableBeanMetadata.SCOPE_PROTOTYPE);
-        return bean;
-    }
-
     private void registerManagedObjectManager(ParserContext context, ComponentDefinitionRegistry registry) {
         if (registry.getComponentDefinition(MANAGED_OBJECT_MANAGER_NAME) == null) {
             MutableBeanMetadata beanMetadata = context.createMetadata(MutableBeanMetadata.class);
@@ -494,6 +482,10 @@ public class CmNamespaceHandler implemen
         }
     }
     
+    private MutableReferenceMetadata createConfigurationAdminRef(ParserContext context) {
+        return createServiceRef(getBlueprintBundleContext(context), context, ConfigurationAdmin.class, "(objectClass=" + ConfigurationAdmin.class.getName() + ")");
+    }
+    
     private static ValueMetadata createValue(ParserContext context, String value) {
         return createValue(context, value, null);
     }
@@ -510,6 +502,21 @@ public class CmNamespaceHandler implemen
         m.setComponentId(value);
         return m;
     }
+    
+    private MutableReferenceMetadata createServiceRef(BundleContext ctx, ParserContext context, Class<?> cls, String filter) {
+        MutableReferenceMetadata m = context.createMetadata(MutableReferenceMetadata.class);
+        m.setRuntimeInterface(cls);
+        m.setInterface(cls.getName());
+        m.setBundleContext(ctx);
+        m.setActivation(ReferenceMetadata.ACTIVATION_EAGER);
+        m.setAvailability(ReferenceMetadata.AVAILABILITY_MANDATORY);
+        
+        if (filter != null) {
+            m.setFilter(filter);
+        }
+        
+        return m;
+    }
 
     private static IdRefMetadata createIdRef(ParserContext context, String value) {
         MutableIdRefMetadata m = context.createMetadata(MutableIdRefMetadata.class);
@@ -590,4 +597,24 @@ public class CmNamespaceHandler implemen
         return interfaceNames;
     }
 
+    /**
+     * Returns the bundle context within the parser context
+     * 
+     * @param parserContext the parser context
+     * @return the bundle context within the parser context (if it exists)
+     */
+    private BundleContext getBlueprintBundleContext(ParserContext parserContext)
+    {
+        BundleContext blueprintContext = null;
+        
+        if (parserContext != null) {
+            ComponentMetadata metaData = parserContext.getComponentDefinitionRegistry().getComponentDefinition("blueprintBundleContext");
+            
+            if (metaData != null) {
+                blueprintContext = (BundleContext)((PassThroughMetadataImpl)metaData).getObject();   
+            }   
+        }
+        
+        return blueprintContext;
+    }
 }

Modified: aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml (original)
+++ aries/branches/oct-2011-release/blueprint/blueprint-cm/src/main/resources/OSGI-INF/blueprint/blueprint-cm.xml Tue Nov  8 17:27:34 2011
@@ -28,11 +28,7 @@
                 </array>
             </entry>
         </service-properties>
-        <bean class="org.apache.aries.blueprint.compendium.cm.CmNamespaceHandler">
-            <property name="configAdmin">
-                <reference interface="org.osgi.service.cm.ConfigurationAdmin"/>
-            </property>
-        </bean>
+        <bean class="org.apache.aries.blueprint.compendium.cm.CmNamespaceHandler"/>
     </service>
 
 </blueprint>

Modified: aries/branches/oct-2011-release/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/branches/oct-2011-release/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Tue Nov  8 17:27:34 2011
@@ -563,6 +563,10 @@ public class BlueprintContainerImpl impl
                 }
             }
         }
+
+        synchronized (satisfiablesLock) {
+            satisfiables = null;
+        }
     }
 
     private void untrackServiceReference(SatisfiableRecipe recipe, Set<String> stopped, Map<String, List<SatisfiableRecipe>> dependencies) {

Modified: aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java (original)
+++ aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainer2BTCustomizerTest.java Tue Nov  8 17:27:34 2011
@@ -24,10 +24,8 @@ import static org.ops4j.pax.exam.contain
 import java.io.InputStream;
 import java.net.URL;
 import java.util.HashMap;
-import java.util.Hashtable;
 import java.util.Map;
 
-import org.apache.aries.itest.AbstractIntegrationTest;
 import org.apache.aries.itest.RichBundleContext;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,8 +36,6 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.framework.CompositeBundle;
 import org.osgi.service.framework.CompositeBundleFactory;
 
@@ -52,17 +48,10 @@ import static org.apache.aries.itest.Ext
  *
  */
 @RunWith(JUnit4TestRunner.class)
-public class BlueprintContainer2BTCustomizerTest extends AbstractIntegrationTest {
+public class BlueprintContainer2BTCustomizerTest extends BaseBlueprintContainerBTCustomizerTest {
 
     @Test
     public void test() throws Exception {
-        // Create a config to check the property placeholder
-        ConfigurationAdmin ca = context().getService(ConfigurationAdmin.class);        
-        Configuration cf = ca.getConfiguration("blueprint-sample-placeholder", null);
-        Hashtable props = new Hashtable();
-        props.put("key.b", "10");
-        cf.update(props);
-
         
         ServiceReference sr = bundleContext.getServiceReference("org.osgi.service.framework.CompositeBundleFactory");
         if (sr != null) {
@@ -74,14 +63,7 @@ public class BlueprintContainer2BTCustom
             // frameworkConfig.put("osgi.console", "10000");
             
             // construct composite bundle information
-            Map<String, String> compositeManifest = new HashMap<String, String>();
-            compositeManifest.put(Constants.BUNDLE_SYMBOLICNAME, "test-composite");
-            compositeManifest.put(Constants.BUNDLE_VERSION, "1.0.0");
-            // this import-package is used by the blueprint.sample
-            compositeManifest.put(Constants.IMPORT_PACKAGE, "org.osgi.service.blueprint;version=\"[1.0.0,2.0.0)\", org.osgi.service.blueprint.container;version=1.0");
-            // this export-package is used by pax junit runner as it needs to see the blueprint sample package 
-            // for the test after the blueprint sample is started.
-            compositeManifest.put(Constants.EXPORT_PACKAGE, "org.apache.aries.blueprint.sample");
+            Map<String, String> compositeManifest = getCompositeManifest();
             
             CompositeBundle cb = cbf.installCompositeBundle(frameworkConfig, "test-composite", compositeManifest);
 
@@ -92,9 +74,15 @@ public class BlueprintContainer2BTCustom
             InputStream is = new URL(mapo.getURL()).openStream();
             Bundle bundle = compositeBundleContext.installBundle(mapo.getURL(), is);
             assertNotNull(bundle);
+            // install and start the cfg admin bundle in the isolated framework
+            Bundle cfgAdminBundle = installConfigurationAdmin(compositeBundleContext);
+            assertNotNull(cfgAdminBundle);            
             
-            // start the composite bundle then the blueprint sample
+            // start the composite bundle, the config admin then the blueprint sample
             cb.start();
+            cfgAdminBundle.start();         
+            // create a config to check the property placeholder
+            applyCommonConfiguration(compositeBundleContext);
             bundle.start();
             
             // start the blueprint bundle and it should detect the previously started blueprint sample
@@ -115,7 +103,7 @@ public class BlueprintContainer2BTCustom
         return testOptions(
             paxLogging("DEBUG"),
             Helper.blueprintBundles(false),
-//            vmOption ("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"),
+            //vmOption ("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006"),
             equinox().version("3.5.0")
         );
     }

Modified: aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java (original)
+++ aries/branches/oct-2011-release/blueprint/blueprint-itests/src/test/java/org/apache/aries/blueprint/itests/BlueprintContainerBTCustomizerTest.java Tue Nov  8 17:27:34 2011
@@ -24,10 +24,8 @@ import static org.ops4j.pax.exam.contain
 import java.io.InputStream;
 import java.net.URL;
 import java.util.HashMap;
-import java.util.Hashtable;
 import java.util.Map;
 
-import org.apache.aries.itest.AbstractIntegrationTest;
 import org.apache.aries.itest.RichBundleContext;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,8 +36,6 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.framework.CompositeBundle;
 import org.osgi.service.framework.CompositeBundleFactory;
 
@@ -53,17 +49,10 @@ import static org.apache.aries.itest.Ext
  *
  */
 @RunWith(JUnit4TestRunner.class)
-public class BlueprintContainerBTCustomizerTest extends AbstractIntegrationTest {
+public class BlueprintContainerBTCustomizerTest extends BaseBlueprintContainerBTCustomizerTest {
 
     @Test
     public void test() throws Exception {
-        // Create a config to check the property placeholder
-        ConfigurationAdmin ca = context().getService(ConfigurationAdmin.class);
-        Configuration cf = ca.getConfiguration("blueprint-sample-placeholder", null);
-        Hashtable props = new Hashtable();
-        props.put("key.b", "10");
-        cf.update(props);
-
         
         ServiceReference sr = bundleContext.getServiceReference("org.osgi.service.framework.CompositeBundleFactory");
         if (sr != null) {
@@ -75,14 +64,7 @@ public class BlueprintContainerBTCustomi
             // frameworkConfig.put("osgi.console", "10000");
             
             // construct composite bundle information
-            Map<String, String> compositeManifest = new HashMap<String, String>();
-            compositeManifest.put(Constants.BUNDLE_SYMBOLICNAME, "test-composite");
-            compositeManifest.put(Constants.BUNDLE_VERSION, "1.0.0");
-            // this import-package is used by the blueprint.sample
-            compositeManifest.put(Constants.IMPORT_PACKAGE, "org.osgi.service.blueprint;version=\"[1.0.0,2.0.0)\", org.osgi.service.blueprint.container;version=1.0");
-            // this export-package is used by pax junit runner as it needs to see the blueprint sample package 
-            // for the test after the blueprint sample is started.
-            compositeManifest.put(Constants.EXPORT_PACKAGE, "org.apache.aries.blueprint.sample");
+            Map<String, String> compositeManifest = getCompositeManifest();
             
             CompositeBundle cb = cbf.installCompositeBundle(frameworkConfig, "test-composite", compositeManifest);
 
@@ -93,9 +75,13 @@ public class BlueprintContainerBTCustomi
             InputStream is = new URL(mapo.getURL()).openStream();
             Bundle bundle = compositeBundleContext.installBundle(mapo.getURL(), is);
             assertNotNull(bundle);
+            Bundle configAdminBundle = installConfigurationAdmin(compositeBundleContext);
+            assertNotNull(configAdminBundle);
             
-            // start the composite bundle then the blueprint sample
+            // start the composite bundle, config admin then the blueprint sample
             cb.start();
+            configAdminBundle.start();
+            applyCommonConfiguration(compositeBundleContext);
             bundle.start();
 
             // do the test

Modified: aries/branches/oct-2011-release/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java (original)
+++ aries/branches/oct-2011-release/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java Tue Nov  8 17:27:34 2011
@@ -19,6 +19,7 @@
 package org.apache.aries.proxy.impl.common;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.Serializable;
 import java.lang.reflect.Modifier;
 import java.math.BigDecimal;
@@ -241,13 +242,9 @@ public abstract class AbstractWovenProxy
             nonObjectSupers.add(nextSuper);
             nextSuper = nextSuper.getSuperclass();
           }
-          try {
-            superHasNoArgsConstructor = (superClass.getDeclaredConstructor().
-                     getModifiers() & Modifier.PRIVATE) == 0;
-          } catch (NoSuchMethodException nsme) {
-            // This is a no-op here, but means we need to add a no-Args that
-            // delegates to Object#<init>() yuck :(
-          }
+          //Don't use reflection - it can be dangerous
+          superHasNoArgsConstructor = superHasNoArgsConstructor(superName, name);
+
         } else {
           superHasNoArgsConstructor = true;
         }
@@ -274,6 +271,31 @@ public abstract class AbstractWovenProxy
     }
   }
 
+  /**
+   * This method allows us to determine whether a superclass has a
+   * non-private no-args constructor without causing it to initialize.
+   * This avoids a potential ClassCircularityError on Mac VMs if the
+   * initialization references the subclass being woven. Odd, but seen
+   * in the wild!
+   */
+  private final boolean superHasNoArgsConstructor(String superName, String name) {
+    
+    ConstructorFinder cf = new ConstructorFinder();
+    
+    try {
+      InputStream is = loader.getResourceAsStream(superName +".class");
+    
+      if(is == null)
+        throw new IOException();
+      
+      new ClassReader(is).accept(cf, ClassReader.SKIP_FRAMES + ClassReader.SKIP_DEBUG + ClassReader.SKIP_CODE);
+    } catch (IOException ioe) {
+      UnableToProxyException u = new UnableToProxyException(name, ioe);
+      throw new RuntimeException(NLS.MESSAGES.getMessage("cannot.load.superclass", superName.replace('/', '.'), typeBeingWoven.getClassName()), u);
+    }
+    return cf.hasNoArgsConstructor();
+  }
+  
   private boolean checkInterfacesForSerializability(String[] interfaces) throws ClassNotFoundException {
     for(String iface : interfaces)
     {

Modified: aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java (original)
+++ aries/branches/oct-2011-release/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java Tue Nov  8 17:27:34 2011
@@ -30,6 +30,7 @@ import java.io.ObjectOutputStream;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -70,7 +71,7 @@ public class WovenProxyGeneratorTest ext
   }
   
   /** An array of classes that will be woven - note no UnweavableParents should be in here! */
-  private static final Class<?>[] CLASSES = new Class<?>[]{TEST_CLASS, ProxyTestClassSuper.class,
+  private static final List<Class<?>> CLASSES = Arrays.asList(new Class<?>[]{TEST_CLASS, ProxyTestClassSuper.class,
     ProxyTestClassFinalMethod.class, ProxyTestClassFinal.class, ProxyTestClassGeneric.class,
     ProxyTestClassGenericSuper.class, ProxyTestClassCovariant.class, ProxyTestClassCovariantOverride.class,
     ProxyTestClassUnweavableChild.class, ProxyTestClassUnweavableSibling.class, ProxyTestClassInner.class, 
@@ -78,7 +79,11 @@ public class WovenProxyGeneratorTest ext
     ProxyTestClassUnweavableChildWithFinalMethodParent.class, 
     ProxyTestClassUnweavableChildWithDefaultMethodWrongPackageParent.class, 
     ProxyTestClassSerializable.class, ProxyTestClassSerializableWithSVUID.class,
-    ProxyTestClassSerializableChild.class, ProxyTestClassSerializableInterface.class};
+    ProxyTestClassSerializableChild.class, ProxyTestClassSerializableInterface.class,
+    ProxyTestClassStaticInitOfChild.class});
+  
+  /** An array of classes that are loaded by the WeavingLoader, but not actually woven **/
+  private static final List<Class<?>> OTHER_CLASSES = Arrays.asList(new Class<?>[] {ProxyTestClassStaticInitOfChildParent.class});
  
   private static final Map<String, byte[]> rawClasses = new HashMap<String, byte[]>();
   
@@ -101,7 +106,16 @@ public class WovenProxyGeneratorTest ext
       if(bytes == null)
         return super.loadClass(className, b);
       
-      bytes = WovenProxyGenerator.getWovenProxy(bytes, className, this);
+      boolean weave = false;
+      
+      for(Class<?> c : CLASSES) {
+        if(c.getName().equals(className)) {
+          weave = true;
+          break;
+        }
+      }
+      if(weave)
+        bytes = WovenProxyGenerator.getWovenProxy(bytes, className, this);
       
       return defineClass(className, bytes, 0, bytes.length);
     }
@@ -117,7 +131,12 @@ public class WovenProxyGeneratorTest ext
   @BeforeClass
   public static void setUp() throws Exception
   {
-    for(Class<?> clazz : CLASSES) {
+    List<Class<?>> classes = new ArrayList(CLASSES.size() + OTHER_CLASSES.size());
+    
+    classes.addAll(CLASSES);
+    classes.addAll(OTHER_CLASSES);
+    
+    for(Class<?> clazz : classes) {
       InputStream is = clazz.getClassLoader().getResourceAsStream(
           clazz.getName().replace('.', '/') + ".class");
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -383,6 +402,19 @@ public class WovenProxyGeneratorTest ext
     assertFalse(woven.getDeclaredField("serialVersionUID").isSynthetic());
   }
   
+  /**
+   * This test covers a weird case on Mac VMs where we sometimes
+   * get a ClassCircularityError if a static initializer in a
+   * non-woven superclass references a subclass that's being
+   * woven, and gets triggered by the weaving process. Not known
+   * to fail on IBM or Sun/Oracle VMs
+   */
+  @Test
+  public void testSuperStaticInitOfChild() throws Exception {
+    Class<?> parent = weavingLoader.loadClass(ProxyTestClassStaticInitOfChildParent.class.getName());
+    parent.getMethod("doStuff").invoke(null);
+  }
+  
   @Override
   protected Object getProxyInstance(Class<?> proxyClass) {
     try {

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/JmxConstants.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/JmxConstants.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/JmxConstants.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/JmxConstants.java Tue Nov  8 17:27:34 2011
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) OSGi Alliance (2009). All Rights Reserved.
- * 
+ *
  * Licensed 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
@@ -27,11 +27,11 @@ import javax.management.openmbean.Tabula
 
 /**
  * Constants for OSGi JMX Specification.
- * 
+ *
  * Additionally, this class contains a number of utility types that are used in
  * different places in the specification. These are {@link #LONG_ARRAY_TYPE},
  * {@link #STRING_ARRAY_TYPE}, and {@link #PROPERTIES_TYPE}.
- * 
+ *
  * @version $Rev$
  * @Immutable
  */
@@ -62,7 +62,7 @@ public class JmxConstants {
 	/**
 	 * For an encoded array we need to start with ARRAY_OF. This must be
 	 * followed by one of the names in {@link #SCALAR}.
-	 * 
+	 *
 	 */
 	public final static String			ARRAY_OF			= "Array of ";
 
@@ -72,6 +72,11 @@ public class JmxConstants {
 	 */
 	public final static String			VECTOR_OF			= "Vector of ";
 
+    /**
+     * Value for {@link #PROPERTY_TYPE} <code>Type</code> value in the case of
+     * {@link org.osgi.framework.Version}
+     */
+    public static final String          VERSION             = "Version";
 	/**
 	 * Value for {@link #PROPERTY_TYPE} <code>Type</code> value in the case of
 	 * {@link java.lang.String}
@@ -242,7 +247,7 @@ public class JmxConstants {
 
 	/**
 	 * The key PROPERTY_TYPE.
-	 * 
+	 *
 	 * ### can we call this value PropertyType and service type ServiceType?
 	 */
 	public static final String			TYPE				= "Type";
@@ -250,11 +255,11 @@ public class JmxConstants {
 	/**
 	 * The type of the property. The key is {@link #TYPE} and the type is
 	 * {@link SimpleType#STRING}. This string must follow the following syntax:
-	 * 
+	 *
 	 * TYPE ::= ( 'Array of ' | 'Vector of ' )? {@link #SCALAR}
-	 * 
+	 *
 	 * ### why can't we just use the class name?
-	 * 
+	 *
 	 * ### why do we have to distinguish between primitives and wrappers?
 	 */
 	public static final Item			TYPE_ITEM			= new Item(

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java Tue Nov  8 17:27:34 2011
@@ -32,7 +32,7 @@ import org.osgi.jmx.JmxConstants;
  * emits events that clients can use to get notified of the changes in the
  * bundle state of the framework.
  *
- * @version $Revision$
+ * @version $Id: f5d5197fdabb4e0c420bc47812d38fd14edb61d0 $
  * @ThreadSafe
  */
 public interface BundleStateMBean {
@@ -427,7 +427,12 @@ public interface BundleStateMBean {
 																BUNDLE_TYPE,
 																IDENTIFIER);
 
-    CompositeData getBundle(long id) throws IOException;
+	/** New!!
+	 * @param id The Bundle ID
+	 * @return The Bundle Data
+	 * @throws IOException
+	 */
+	CompositeData getBundle(long id) throws IOException;
 
 	/**
 	 * Answer the list of identifiers of the bundles this bundle depends upon
@@ -494,7 +499,9 @@ public interface BundleStateMBean {
 	 *             if the bundle indicated does not exist
 	 */
 	TabularData getHeaders(long bundleId) throws IOException;
+    TabularData getHeaders(long bundleId, String locale) throws IOException;
     String getHeader(long bundleId, String key) throws IOException;
+    String getHeader(long bundleId, String key, String locale) throws IOException;
 
 	/**
 	 * Answer the list of bundle ids of the bundles which host a fragment

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/ServiceStateMBean.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/ServiceStateMBean.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/ServiceStateMBean.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/ServiceStateMBean.java Tue Nov  8 17:27:34 2011
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) OSGi Alliance (2009, 2010). All Rights Reserved.
- * 
+ *
  * Licensed 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
@@ -18,6 +18,7 @@ package org.osgi.jmx.framework;
 
 import java.io.IOException;
 
+import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.CompositeType;
 import javax.management.openmbean.SimpleType;
 import javax.management.openmbean.TabularData;
@@ -30,7 +31,7 @@ import org.osgi.jmx.JmxConstants;
  * This MBean represents the Service state of the framework. This MBean also
  * emits events that clients can use to get notified of the changes in the
  * service state of the framework.
- * 
+ *
  * @version $Revision$
  * @ThreadSafe
  */
@@ -172,7 +173,7 @@ public interface ServiceStateMBean {
 
 	/**
 	 * Answer the list of interfaces that this service implements
-	 * 
+	 *
 	 * @param serviceId
 	 *            the identifier of the service
 	 * @return the list of interfaces
@@ -185,7 +186,7 @@ public interface ServiceStateMBean {
 
 	/**
 	 * Answer the bundle identifier of the bundle which registered the service
-	 * 
+	 *
 	 * @param serviceId
 	 *            the identifier of the service
 	 * @return the identifier for the bundle
@@ -195,12 +196,13 @@ public interface ServiceStateMBean {
 	 *             if the service indicated does not exist
 	 */
 	long getBundleIdentifier(long serviceId) throws IOException;
+	CompositeData getService(long serviceId) throws IOException;
 
 	/**
 	 * Answer the map of properties associated with this service
-	 * 
+	 *
 	 * @see JmxConstants#PROPERTIES_TYPE for the details of the TabularType
-	 * 
+	 *
 	 * @param serviceId
 	 *            the identifier of the service
 	 * @return the table of properties. These include the standard mandatory
@@ -212,12 +214,14 @@ public interface ServiceStateMBean {
 	 *             if the service indicated does not exist
 	 */
 	TabularData getProperties(long serviceId) throws IOException;
+	CompositeData getProperty(long serviceId, String key) throws IOException;
+	long[] getServiceIds() throws IOException;
 
 	/**
 	 * Answer the service state of the system in tabular form.
-	 * 
+	 *
 	 * @see #SERVICES_TYPE for the details of the TabularType
-	 * 
+	 *
 	 * @return the tabular representation of the service state
 	 * @throws IOException
 	 *             If the operation fails
@@ -225,10 +229,12 @@ public interface ServiceStateMBean {
 	 *             if the service indicated does not exist
 	 */
 	TabularData listServices() throws IOException;
+	TabularData listServices(String clazz, String filter) throws IOException;
+    TabularData listServices(String clazz, String filter, String ... serviceTypeItems) throws IOException;
 
 	/**
 	 * Answer the list of identifiers of the bundles that use the service
-	 * 
+	 *
 	 * @param serviceId
 	 *            the identifier of the service
 	 * @return the list of bundle identifiers

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/BlueprintMetadataMBean.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/BlueprintMetadataMBean.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/BlueprintStateMBean.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/BlueprintStateMBean.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/Item.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/Item.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/JmxConstants.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-api/src/main/java/org/apache/aries/jmx/blueprint/JmxConstants.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/Activator.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/Activator.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/BlueprintMetadata.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/BlueprintMetadata.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/BlueprintState.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-core/src/main/java/org/apache/aries/jmx/blueprint/impl/BlueprintState.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/test/java/org/apache/aries/jmx/blueprint/impl/BlueprintMetadataTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-core/src/test/java/org/apache/aries/jmx/blueprint/impl/BlueprintMetadataTest.java:1189798-1199347

Propchange: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-blueprint-core/src/test/java/org/apache/aries/jmx/blueprint/impl/BlueprintStateTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 17:27:34 2011
@@ -0,0 +1 @@
+/aries/trunk/sandbox/jmx-next/jmx-blueprint-core/src/test/java/org/apache/aries/jmx/blueprint/impl/BlueprintStateTest.java:1189798-1199347

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java Tue Nov  8 17:27:34 2011
@@ -37,22 +37,24 @@ public class BundleWiringData {
     private final long bundleId;
     private final List<BundleCapability> capabilities;
     private final List<BundleRequirement> requirements;
+    private List<BundleWire> requiredWires;
 
     public BundleWiringData(long bundleId, List<BundleCapability> capabilities, List<BundleRequirement> requirements, List<BundleWire> requiredWires) {
         this.bundleId = bundleId;
         this.capabilities = capabilities;
         this.requirements = requirements;
+        this.requiredWires = requiredWires;
     }
 
     public CompositeData toCompositeData() {
         try {
             Map<String, Object> items = new HashMap<String, Object>();
             items.put(BundleRevisionsStateMBean.BUNDLE_ID, bundleId);
-            items.put(BundleRevisionsStateMBean.BUNDLE_REVISION_ID, null);
+            items.put(BundleRevisionsStateMBean.BUNDLE_REVISION_ID, null); // TODO
 
             items.put(BundleRevisionsStateMBean.REQUIREMENTS, getRequirements());
             items.put(BundleRevisionsStateMBean.CAPABILITIES, getCapabilities());
-            items.put(BundleRevisionsStateMBean.BUNDLE_WIRES_TYPE, null);
+            items.put(BundleRevisionsStateMBean.BUNDLE_WIRES_TYPE, getRequiredWires());
 
             return new CompositeDataSupport(BundleRevisionsStateMBean.BUNDLE_WIRING_TYPE, items);
         } catch (OpenDataException e) {
@@ -75,7 +77,7 @@ public class BundleWiringData {
         for (int i=0; i < requirements.size(); i++) {
             BundleRequirement requirement = requirements.get(i);
             reqData[i] = getCapReqCompositeData(BundleRevisionsStateMBean.BUNDLE_REQUIREMENT_TYPE,
-                    requirement.getNamespace(), requirement.getAttributes().entrySet(), requirement.getDirectives().entrySet());
+                requirement.getNamespace(), requirement.getAttributes().entrySet(), requirement.getDirectives().entrySet());
         }
         return reqData;
     }
@@ -103,4 +105,31 @@ public class BundleWiringData {
         CompositeData req = new CompositeDataSupport(type, reqItems);
         return req;
     }
+
+    private CompositeData[] getRequiredWires() throws OpenDataException {
+        CompositeData[] reqWiresData = new CompositeData[requiredWires.size()];
+        for (int i=0; i < requiredWires.size(); i++) {
+            BundleWire requiredWire = requiredWires.get(i);
+            Map<String, Object> wireItems = new HashMap<String, Object>();
+
+            BundleCapability capability = requiredWire.getCapability();
+            wireItems.put(BundleRevisionsStateMBean.PROVIDER_BUNDLE_ID, capability.getRevision().getBundle().getBundleId());
+            wireItems.put(BundleRevisionsStateMBean.PROVIDER_BUNDLE_REVISION_ID, null); // TODO
+            wireItems.put(BundleRevisionsStateMBean.BUNDLE_CAPABILITY,
+                    getCapReqCompositeData(BundleRevisionsStateMBean.BUNDLE_CAPABILITY_TYPE,
+                    capability.getNamespace(), capability.getAttributes().entrySet(), capability.getDirectives().entrySet()));
+
+            BundleRequirement requirement = requiredWire.getRequirement();
+            wireItems.put(BundleRevisionsStateMBean.REQUIRER_BUNDLE_ID, requirement.getRevision().getBundle().getBundleId());
+            wireItems.put(BundleRevisionsStateMBean.REQUIRER_BUNDLE_REVISION_ID, null); // TODO
+
+            wireItems.put(BundleRevisionsStateMBean.BUNDLE_REQUIREMENT,
+                getCapReqCompositeData(BundleRevisionsStateMBean.BUNDLE_REQUIREMENT_TYPE,
+                requirement.getNamespace(), requirement.getAttributes().entrySet(), requirement.getDirectives().entrySet()));
+
+            CompositeData wireData = new CompositeDataSupport(BundleRevisionsStateMBean.BUNDLE_WIRE_TYPE, wireItems);
+            reqWiresData[i] = wireData;
+        }
+        return reqWiresData;
+    }
 }

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceData.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceData.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceData.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceData.java Tue Nov  8 17:27:34 2011
@@ -25,6 +25,7 @@ import static org.osgi.jmx.framework.Ser
 import static org.osgi.jmx.framework.ServiceStateMBean.SERVICE_TYPE;
 import static org.osgi.jmx.framework.ServiceStateMBean.USING_BUNDLES;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -41,7 +42,7 @@ import org.osgi.jmx.framework.ServiceSta
  * <tt>ServiceData</tt> represents Service Type @see {@link ServiceStateMBean#SERVICE_TYPE}. It is a codec for the
  * <code>CompositeData</code> representing an OSGi <code>ServiceReference</code>.
  * </p>
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class ServiceData {
@@ -50,23 +51,23 @@ public class ServiceData {
      * @see ServiceStateMBean#IDENTIFIER_ITEM
      */
     private long serviceId;
-    
+
     /**
      * @see ServiceStateMBean#BUNDLE_IDENTIFIER_ITEM
      */
     private long bundleId;
-    
+
     /**
      * @see ServiceStateMBean#OBJECT_CLASS_ITEM
      */
     private String[] serviceInterfaces;
-    
+
     // keep properties for next version of the spec
     ///**
     // * @see ServiceStateMBean#PROPERTIES_ITEM
     // */
     //private List<PropertyData<? extends Object>> properties = new ArrayList<PropertyData<? extends Object>>();
-    
+
     /**
      * @see ServiceStateMBean#USING_BUNDLES_ITEM
      */
@@ -94,29 +95,46 @@ public class ServiceData {
      * @return
      */
     public CompositeData toCompositeData() {
-        CompositeData result = null;
+        return toCompositeData(ServiceStateMBean.SERVICE_TYPE.keySet());
+    }
+
+    public CompositeData toCompositeData(Collection<String> itemNames) {
         Map<String, Object> items = new HashMap<String, Object>();
+
         items.put(IDENTIFIER, this.serviceId);
-        items.put(BUNDLE_IDENTIFIER, this.bundleId);
-        items.put(OBJECT_CLASS, this.serviceInterfaces);
+
+        if (itemNames.contains(BUNDLE_IDENTIFIER))
+            items.put(BUNDLE_IDENTIFIER, this.bundleId);
+
+        if (itemNames.contains(OBJECT_CLASS))
+            items.put(OBJECT_CLASS, this.serviceInterfaces);
+
         //TabularData propertiesTable = new TabularDataSupport(PROPERTIES_TYPE);
         //for (PropertyData<? extends Object> propertyData : this.properties) {
         //    propertiesTable.put(propertyData.toCompositeData());
         //}
         // items.put(PROPERTIES, propertiesTable);
-        items.put(USING_BUNDLES, toLong(this.usingBundles));
+
+        if (itemNames.contains(USING_BUNDLES))
+            items.put(USING_BUNDLES, toLong(this.usingBundles));
+
+        String[] allItemNames = SERVICE_TYPE.keySet().toArray(new String [] {});
+        Object[] itemValues = new Object[allItemNames.length];
+        for (int i=0; i < allItemNames.length; i++) {
+            itemValues[i] = items.get(allItemNames[i]);
+        }
+
         try {
-            result = new CompositeDataSupport(SERVICE_TYPE, items);
+            return new CompositeDataSupport(SERVICE_TYPE, allItemNames, itemValues);
         } catch (OpenDataException e) {
             throw new IllegalStateException("Failed to create CompositeData for ServiceReference with "
                     + Constants.SERVICE_ID + " [" + this.serviceId + "]", e);
         }
-        return result;
     }
 
     /**
      * Constructs a <code>ServiceData</code> object from the given <code>CompositeData</code>
-     * 
+     *
      * @param compositeData
      * @return
      * @throws IlleglArugmentException

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java Tue Nov  8 17:27:34 2011
@@ -115,11 +115,23 @@ public class BundleState extends Notific
     /**
      * @see org.osgi.jmx.framework.BundleStateMBean#getHeaders(long)
      */
-    @SuppressWarnings("unchecked")
     public TabularData getHeaders(long bundleId) throws IOException, IllegalArgumentException {
         Bundle bundle = resolveBundle(bundleContext, bundleId);
-        List<Header> headers = new ArrayList<Header>();
         Dictionary<String, String> bundleHeaders = bundle.getHeaders();
+        return getHeaders(bundleHeaders);
+    }
+
+    /**
+     * @see org.osgi.jmx.framework.BundleStateMBean#getHeaders(long, java.lang.String)
+     */
+    public TabularData getHeaders(long bundleId, String locale) throws IOException, IllegalArgumentException {
+        Bundle bundle = resolveBundle(bundleContext, bundleId);
+        Dictionary<String, String> bundleHeaders = bundle.getHeaders(locale);
+        return getHeaders(bundleHeaders);
+    }
+
+    private TabularData getHeaders(Dictionary<String, String> bundleHeaders) {
+        List<Header> headers = new ArrayList<Header>();
         Enumeration<String> keys = bundleHeaders.keys();
         while (keys.hasMoreElements()) {
             String key = keys.nextElement();
@@ -132,12 +144,23 @@ public class BundleState extends Notific
         return headerTable;
     }
 
+    /**
+     * @see org.osgi.jmx.framework.BundleStateMBean#getHeader(long, java.lang.String)
+     */
     public String getHeader(long bundleId, String key) throws IOException {
         Bundle bundle = resolveBundle(bundleContext, bundleId);
         return bundle.getHeaders().get(key);
     }
 
     /**
+     * @see org.osgi.jmx.framework.BundleStateMBean#getHeader(long, java.lang.String, java.lang.String)
+     */
+    public String getHeader(long bundleId, String key, String locale) throws IOException {
+        Bundle bundle = resolveBundle(bundleContext, bundleId);
+        return bundle.getHeaders(locale).get(key);
+    }
+
+    /**
      * @see org.osgi.jmx.framework.BundleStateMBean#getHosts(long)
      */
     public long[] getHosts(long fragmentId) throws IOException, IllegalArgumentException {

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/ServiceState.java Tue Nov  8 17:27:34 2011
@@ -21,6 +21,8 @@ import static org.apache.aries.jmx.util.
 import static org.osgi.jmx.JmxConstants.PROPERTIES_TYPE;
 
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.RejectedExecutionException;
@@ -34,6 +36,7 @@ import javax.management.MBeanServer;
 import javax.management.Notification;
 import javax.management.NotificationBroadcasterSupport;
 import javax.management.ObjectName;
+import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.TabularData;
 import javax.management.openmbean.TabularDataSupport;
 
@@ -55,7 +58,7 @@ import org.osgi.service.log.LogService;
 /**
  * Implementation of <code>ServiceStateMBean</code> which emits JMX <code>Notification</code> for framework
  * <code>ServiceEvent</code> events
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class ServiceState extends NotificationBroadcasterSupport implements ServiceStateMBean, MBeanRegistration {
@@ -109,6 +112,14 @@ public class ServiceState extends Notifi
     }
 
     /**
+     * @see org.osgi.jmx.framework.ServiceStateMBean#getProperty(long, java.lang.String)
+     */
+    public CompositeData getProperty(long serviceId, String key) throws IOException {
+        ServiceReference reference = resolveService(bundleContext, serviceId);
+            return PropertyData.newInstance(key, reference.getProperty(key)).toCompositeData();
+    }
+
+    /**
      * @see org.osgi.jmx.framework.ServiceStateMBean#getUsingBundles(long)
      */
     public long[] getUsingBundles(long serviceId) throws IOException {
@@ -118,19 +129,44 @@ public class ServiceState extends Notifi
     }
 
     /**
+     * @see org.osgi.jmx.framework.ServiceStateMBean#getService(long)
+     */
+    public CompositeData getService(long serviceId) throws IOException {
+        return new ServiceData(resolveService(bundleContext, serviceId)).toCompositeData();
+    }
+
+    /**
      * @see org.osgi.jmx.framework.ServiceStateMBean#listServices()
      */
     public TabularData listServices() throws IOException {
+        return listServices(null, null);
+    }
+
+    /**
+     * @see org.osgi.jmx.framework.ServiceStateMBean#listServices(java.lang.String, java.lang.String)
+     */
+    public TabularData listServices(String clazz, String filter) throws IOException {
+        return listServices(clazz, filter, ServiceStateMBean.SERVICE_TYPE.keySet());
+    }
+
+    /**
+     * @see org.osgi.jmx.framework.ServiceStateMBean#listServices(java.lang.String, java.lang.String, java.lang.String...)
+     */
+    public TabularData listServices(String clazz, String filter, String ... serviceTypeItems) throws IOException {
+        return listServices(clazz, filter, Arrays.asList(serviceTypeItems));
+    }
+
+    private TabularData listServices(String clazz, String filter, Collection<String> serviceTypeItems) throws IOException {
         TabularData servicesTable = new TabularDataSupport(SERVICES_TYPE);
         ServiceReference[] allServiceReferences = null;
         try {
-            allServiceReferences = bundleContext.getAllServiceReferences(null, null);
+            allServiceReferences = bundleContext.getAllServiceReferences(clazz, filter);
         } catch (InvalidSyntaxException e) {
             throw new IllegalStateException("Failed to retrieve all service references", e);
         }
         if (allServiceReferences != null) {
             for (ServiceReference reference : allServiceReferences) {
-                servicesTable.put(new ServiceData(reference).toCompositeData());
+                servicesTable.put(new ServiceData(reference).toCompositeData(serviceTypeItems));
             }
         }
         return servicesTable;
@@ -148,6 +184,27 @@ public class ServiceState extends Notifi
     }
 
     /**
+     * @see org.osgi.jmx.framework.ServiceStateMBean#getServiceIds()
+     */
+    public long[] getServiceIds() throws IOException {
+        try {
+            ServiceReference<?>[] refs = bundleContext.getAllServiceReferences(null, null);
+            long[] ids = new long[refs.length];
+            for (int i=0; i < refs.length; i++) {
+                ServiceReference<?> ref = refs[i];
+                long id = (Long) ref.getProperty(Constants.SERVICE_ID);
+                ids[i] = id;
+            }
+
+            return ids;
+        } catch (InvalidSyntaxException e) {
+            IOException ioe = new IOException();
+            ioe.initCause(e);
+            throw ioe;
+        }
+    }
+
+    /**
      * @see javax.management.MBeanRegistration#postDeregister()
      */
     public void postDeregister() {
@@ -218,7 +275,7 @@ public class ServiceState extends Notifi
                // ignore
             }
         }
-        if (eventDispatcher != null) {  
+        if (eventDispatcher != null) {
             eventDispatcher.shutdown();
         }
     }
@@ -229,5 +286,4 @@ public class ServiceState extends Notifi
     protected ExecutorService getEventDispatcher() {
         return eventDispatcher;
     }
-
 }

Modified: aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/util/TypeUtils.java
URL: http://svn.apache.org/viewvc/aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/util/TypeUtils.java?rev=1199354&r1=1199353&r2=1199354&view=diff
==============================================================================
--- aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/util/TypeUtils.java (original)
+++ aries/branches/oct-2011-release/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/util/TypeUtils.java Tue Nov  8 17:27:34 2011
@@ -35,6 +35,7 @@ import static org.osgi.jmx.JmxConstants.
 import static org.osgi.jmx.JmxConstants.P_SHORT;
 import static org.osgi.jmx.JmxConstants.SHORT;
 import static org.osgi.jmx.JmxConstants.STRING;
+import static org.osgi.jmx.JmxConstants.VERSION;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
@@ -46,9 +47,11 @@ import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.osgi.framework.Version;
+
 /**
  * This class provides common utilities related to type conversions for the MBean implementations
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class TypeUtils {
@@ -87,6 +90,7 @@ public class TypeUtils {
         wrapperTypes.put(SHORT, Short.class);
         wrapperTypes.put(BOOLEAN, Boolean.class);
         wrapperTypes.put(CHARACTER, Character.class);
+        wrapperTypes.put(VERSION, Version.class);
         mathTypes.put(BIGDECIMAL, BigDecimal.class);
         mathTypes.put(BIGINTEGER, BigInteger.class);
         types.put(STRING, String.class);
@@ -97,7 +101,7 @@ public class TypeUtils {
 
     /**
      * Converts a <code>Dictionary</code> object to a <code>Map</code>
-     * 
+     *
      * @param dictionary
      * @return
      */
@@ -113,7 +117,7 @@ public class TypeUtils {
 
     /**
      * Converts primitive long[] array to Long[]
-     * 
+     *
      * @param array
      * @return
      */
@@ -127,7 +131,7 @@ public class TypeUtils {
 
     /**
      * Converts Long[] array to primitive
-     * 
+     *
      * @param array
      * @return
      */
@@ -141,7 +145,7 @@ public class TypeUtils {
 
     /**
      * Converts a String value to an Object of the specified type
-     * 
+     *
      * @param type
      *            one of types listed in {@link #types}
      * @param value
@@ -175,7 +179,7 @@ public class TypeUtils {
                 String parseMethodName = "parse" + new String(simpleTypeName);
                 Method parseMethod = promotedType.getDeclaredMethod(parseMethodName, String.class);
                 result = (T) parseMethod.invoke(null, value);
-            } 
+            }
         } catch (SecurityException e) {
             throw new IllegalArgumentException("Cannot convert value [" + value + "] to type [" + type + "]", e);
         } catch (NoSuchMethodException e) {