Update Atomos READMEs for JAX-RS example.
diff --git a/README.md b/README.md
index a4c2abe..dd1f087 100644
--- a/README.md
+++ b/README.md
@@ -2,15 +2,15 @@
 
 Atomos - A Java Module Runtime using OSGi Connect
 
-Atomos requires an OSGi Framework implementation that supports the OSGi Connect Specification. The Connect Specification will be released as part of the OSGi Core Release 8 Specification which is currently in draft form available [here](https://osgi.org/download/osgi.core-8.0.0-early-draft-2020-03.pdf). The Connect Specification can be found in chapter 60.
+Atomos requires an OSGi Framework implementation that supports the OSGi Connect Specification. The Connect Specification is part of the OSGi Core Release 8 Specification which is currently available as a proposed final draft [here](https://docs.osgi.org/specification/osgi.core/8.0.0/). The Connect Specification can be found in chapter [60](https://docs.osgi.org/specification/osgi.core/8.0.0/framework.connect.html).
 
 Currently snapshots of the Equinox and Felix OSGi Frameworks are being used that implement the proposed OSGi Connect specification. Source for the snapshots can be found at:
-1. Equinox - The `osgiR8` branch in the git repo https://git.eclipse.org/c/equinox/rt.equinox.framework.git
+1. Equinox - The `master` branch in the git repo https://git.eclipse.org/c/equinox/rt.equinox.framework.git
 1. Felix - https://github.com/apache/felix-dev/tree/connect
 
 The snapshot JARs and source JARs are pushed to https://github.com/tjwatson/atomos-temp-m2repo for Atomos. The Atomos build is currently configured to use this as a repository for getting the OSGi Framework implementations: https://github.com/tjwatson/atomos-temp-m2repo/raw/master/repository
 
-Atomos is an implementation of an OSGi `ModuleConnector` which is defined by the Connect specification. A `ModuleConnector` can be used to create an OSGi Framework instance that allows a Framework to connect bundles installed in the framework to content managed outside of the Framework. Framework instances created with the Atomos `ModuleConnector` add support to the OSGi Framework that enables bundles to be connected to three different sources of content from outside the OSGi module layer:
+Atomos is an implementation of an OSGi `ModuleConnector` which is defined by the Connect specification. A `ModuleConnector` can be used to create an OSGi Framework instance that allows a Framework to connect bundles installed in the framework to content managed outside of the Framework. Framework instances created with the Atomos `ModuleConnector` add support to the OSGi Framework that enables bundles to be connected to four different sources of content from outside the OSGi module layer:
 
 1. Module Path:  Using the Java Platform Module System (JPMS) Atomos will discover the modules on the module path and will make any modules found available for installation into the Framework as connected bundles.  This also allows for Atomos and a set of OSGi bundles to be packaged into a jlink image resulting in a small fit-for-purpose JVM.
 1. Class Path:  When loaded from the class path Atomos will discover the JARs on the class path and will make any OSGi bundles found available for installation into the Framework.
@@ -28,6 +28,6 @@
 
 `./mvnw clean install -Pjava8 -Pfelix`
 
-If you build with no profile specified then the default will build with Equinox and the resulting Atomos runtime will only work with Java 11+. The build also includes a number of example projects that showcase how Atomos can be used in different modes. The Graal Substrate native-image examples are not built by default. For information on how to build the native-image examples see the substrate [README](atomos.examples/SUBSTRATE.md)
+If you build with no profile specified then the default will build with Equinox and the resulting Atomos runtime will only work with Java 11+. The build also includes a number of example projects that demonstrate how Atomos can be used in different modes. The Graal Substrate native-image examples are not built by default. For information on how to build the native-image examples see the substrate [README](atomos.examples/SUBSTRATE.md)
 
 For more information on each example see Atomos examples [README](atomos.examples/README.md)
diff --git a/atomos.examples/README.md b/atomos.examples/README.md
index 3550900..8d27687 100644
--- a/atomos.examples/README.md
+++ b/atomos.examples/README.md
@@ -6,4 +6,5 @@
 1. [Atomos Spring Loader example](atomos.examples.springloader/README.md) - Assembles an executable JAR that uses the Spring Jar loader to load bundle content from embedded JAR files.
 1. Atomos native-image example ([Equinox](atomos.examples.substrate.equinox/README.md) and [Felix](atomos.examples.substrate.felix/README.md)) - Assembles a native image using Graal Substrate to load the framework and a set of bundles
 1. Atomos native-image example ([atomos-maven-plugin](atomos.examples.substrate.maven.equinox/README.md)) - Assembles a native image using Graal Substrate with the atomos-maven-plugin
-1. [Atomos Android example](atomos.examples.android/README.md) - Uses the result of the [Atomos index example](atomos.examples.index/README.md) to build an Android application
\ No newline at end of file
+1. [Atomos Android example](atomos.examples.android/README.md) - Uses the result of the [Atomos index example](atomos.examples.index/README.md) to build an Android application
+1. [Atomos JAX-RS example](atomos.examples.jaxrs/README.md) - Uses Aries JAX-RS [whiteboard](https://github.com/apache/aries-jax-rs-whiteboard) implementation for a simple JAX-RS resource example.
\ No newline at end of file
diff --git a/atomos.examples/SUBSTRATE.md b/atomos.examples/SUBSTRATE.md
index 88c8621..a8dfa10 100644
--- a/atomos.examples/SUBSTRATE.md
+++ b/atomos.examples/SUBSTRATE.md
@@ -1,16 +1,16 @@
 # Building Substrate Examples
 
-The example projects that build Graal Substrate native-images are not built as part of the main Atomos build because they require an installation of GraalVM CE 19.3.1 (Java 8 or Java 11 can be used) and the native-image tools for Substrate. The Java 11 version of Graal Substrate does not currently support full introspection at image runtime of the Java Platform Module System. Atomos Module support expects to have full introspection of the Java Platform Module System when running on Java versions greater than Java 8. Therefore the example will run in basic class path mode for both Java 8 and Java 11 when running with a native substrate image.
+The example projects that build Graal Substrate native-images are not built as part of the main Atomos build because they require an installation of GraalVM CE 20.2.0 (Java 8 or Java 11 can be used) and the native-image tools for Substrate. The Java 11 version of Graal Substrate does not currently support full introspection at image runtime of the Java Platform Module System. Atomos Module support expects to have full introspection of the Java Platform Module System when running on Java versions greater than Java 8. Therefore the example will run in basic class path mode for both Java 8 and Java 11 when running with a native substrate image.
 
 To build the native image examples you must install the native image support for Graal (see https://www.graalvm.org/docs/reference-manual/native-image/).  You need to run the `gu` command that comes with Graal VM:
 
 `gu install native-image`
 
-If you are using GraalVM CE 19.3.1 Java 11 then you can build all of Atomos, including the substrate examples, with the following single maven build using the `substrate` profile:
+If you are using GraalVM CE 20.2.0 Java 11 then you can build all of Atomos, including the substrate examples, with the following single maven build using the `substrate` profile:
 
 `./mvnw clean install -Pjava8 -Psubstrate -Pequinox`
 
-If using GraalVM CE 19.3.1 Java 8 then you must first use Java 11 for the main Atomos build using the Java 8 profile:
+If using GraalVM CE 20.2.0 Java 8 then you must first use Java 11 for the main Atomos build using the Java 8 profile:
 
 `./mvnw clean install -Pjava8 -Pequinox`
 
@@ -22,4 +22,4 @@
 
 Alternatively a substrate image can be created that does not rely on the directory `target/atomos_lib/` to discover the bundles.  Instead the bundle entry resources can be placed in an `atomos/` folder which is placed on the classpath during native image compilation. The resources from the `atomos/` folder can then be included in the native image.  The `atomos/` folder has a file `bundles.index` that contains information for Atomos to discover the bundles and their entries that are included in the native image. In order to use this approach effectively Atomos needs a maven plugin to assist in the generation of the Atomos `bundles.index`.
 
-If substrate adds full introspection to the Java Platform Module System in the future it could allow Atomos to discover the modules within the image and load them as bundles.  If a proper module reader could be obtained and contain the necessary resources from the original bundle JARs then it would eliminate the need for the `atomos_lib/` or `atomos/` resource folder.
+If substrate adds full introspection to the Java Platform Module System in the future it could allow Atomos to discover the modules within the image and load them as bundles.  If a proper module reader could be obtained and it contains the necessary resources from the original bundle JARs then it would eliminate the need for the `atomos_lib/` or `atomos/` resource folder for running a native image.
diff --git a/atomos.examples/atomos.examples.jaxrs/README.md b/atomos.examples/atomos.examples.jaxrs/README.md
new file mode 100644
index 0000000..635f639
--- /dev/null
+++ b/atomos.examples/atomos.examples.jaxrs/README.md
@@ -0,0 +1,11 @@
+# Atomos Substrate Example (atomos-maven-plugin)
+
+This example builds a native image that includes the Equinox Framework implementation with a set of bundles using Graal Substrate.  See the substrate [README](../SUBSTRATE.md) for instructions on building the Substrate examples. This example uses the `atomos-maven-plugin` plugin to generate an Atomos index which is then included in the native-image. This allows for a native-image that does not require the presence of the original bundle JARs at runtime in an `atomos_lib/` folder.
+
+Buiding this example will create a folder `target/native_image_build/bin` folder that contains the executable `org.apache.felix.atomos.examples.jaxrs`. If you launch `org.apache.felix.atomos.examples.jaxrs` it will give you a gogo `g!` prompt to run gogo commands. The example itself contains a bundle that provides a JAX-RS hello resource. The resource can be accessed using `http://localhost:8080/hello/{name}`.  Also included in this example is a version of the Felix web console.  The web console can be access with http://localhost:8080/system/console/bundles and the id/password is admin/admin.
+
+This example also builds an uber JAR using the Atomos Index.  This example can be run with the following command:
+
+`java -jar target/org.apache.felix.atomos.examples.jaxrs-<version>.jar`
+
+Where `<version>` is the current version of this example. The index JAR contains the same bundles as the native image and the Atomos index used for both the native and the Atomos index JAR should be the same.  This can be useful when debugging the behavior difference for the native image vs. a normal Java application running on the classpath.  Such an approach also makes it easy to use the Atomos index JAR to run with the Graal tracing [agent](https://medium.com/graalvm/introducing-the-tracing-agent-simplifying-graalvm-native-image-configuration-c3b56c486271) for discovering the necessary substrate configuration.
\ No newline at end of file
diff --git a/atomos.examples/atomos.examples.substrate.maven/README.md b/atomos.examples/atomos.examples.substrate.maven/README.md
index ae677c7..d5ff641 100644
--- a/atomos.examples/atomos.examples.substrate.maven/README.md
+++ b/atomos.examples/atomos.examples.substrate.maven/README.md
@@ -2,5 +2,5 @@
 
 This example builds a native image that includes the Equinox Framework implementation with a set of bundles using Graal Substrate.  See the substrate [README](../SUBSTRATE.md) for instructions on building the Substrate examples. This example uses the `atomos-maven-plugin` plugin to generate an Atomos index which is then included in the native-image. This allows for a native-image that does not require the presence of the original bundle JARs at runtime in an `atomos_lib/` folder.
 
-Buiding this example will create a `target/atomos` executable. If you launch `atomos` it will give you a gogo `g!` prompt to run gogo commands.  Also included in this example is a version of the Felix web console.  The web console can be access with http://localhost:8080/system/console/bundles and the id/password is admin/admin.
+Buiding this example will create a folder `target/native_image_build/bin` folder that contains the executable `org.apache.felix.atomos.examples.substrate.maven`. If you launch `org.apache.felix.atomos.examples.substrate.maven` it will give you a gogo `g!` prompt to run gogo commands.  Also included in this example is a version of the Felix web console.  The web console can be access with http://localhost:8080/system/console/bundles and the id/password is admin/admin.
 
diff --git a/atomos.utils/atomos.utils.core/src/main/java/org/apache/felix/atomos/utils/core/plugins/finaliser/ni/NativeImagePlugin.java b/atomos.utils/atomos.utils.core/src/main/java/org/apache/felix/atomos/utils/core/plugins/finaliser/ni/NativeImagePlugin.java
index 7c24585..0a48948 100644
--- a/atomos.utils/atomos.utils.core/src/main/java/org/apache/felix/atomos/utils/core/plugins/finaliser/ni/NativeImagePlugin.java
+++ b/atomos.utils/atomos.utils.core/src/main/java/org/apache/felix/atomos/utils/core/plugins/finaliser/ni/NativeImagePlugin.java
@@ -46,20 +46,17 @@
             Path native_image_build = config.nativeImageOutputDirectory().resolve(
                 "native_image_build");
             Files.createDirectories(native_image_build);
-            Path native_image_build_timed = native_image_build.resolve(
-                System.currentTimeMillis() + "");
-            Files.createDirectories(native_image_build_timed);
-            Path cpDir = native_image_build_timed.resolve("cp");
+            Path cpDir = native_image_build.resolve("cp");
             Files.createDirectories(cpDir);
-            Path cfgDir = native_image_build_timed.resolve("cfg");
+            Path cfgDir = native_image_build.resolve("cfg");
             Files.createDirectories(cfgDir);
-            Path binDir = native_image_build_timed.resolve("bin");
+            Path binDir = native_image_build.resolve("bin");
             Files.createDirectories(binDir);
 
             //prepare classpath
             List<Path> classpath = context.getFiles(FileType.ARTIFACT,
                 FileType.INDEX_JAR).collect(Collectors.toList());
-            System.out.println(native_image_build_timed);
+            System.out.println(native_image_build);
             List<Path> copyOfClassPath = new ArrayList<>();
             classpath.forEach(p -> {
                 try