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

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git

commit 1b384bd48574ec8176ff929440d6e9889996fda9
Author: JamesBognar <[email protected]>
AuthorDate: Thu Mar 1 19:02:02 2018 -0500

    Move ArgsVar and ManifestFileVar to juneau-svl.
---
 .../java/org/apache/juneau/svl/VarResolver.java    |  20 +-
 .../org/apache/juneau/svl/VarResolverBuilder.java  |  15 +-
 .../java/org/apache/juneau/svl}/vars/ArgsVar.java  |  54 +-
 .../apache/juneau/svl}/vars/ManifestFileVar.java   |  34 +-
 juneau-doc/src/main/javadoc/overview.html          | 547 ++++++++++++---------
 .../src/main/javadoc/resources/juneau-doc.css      |   5 +
 .../juneau/examples/rest/AtomFeedResource.java     |   5 +-
 .../examples/rest/CodeFormatterResource.java       |   3 +-
 .../juneau/examples/rest/DirectoryResource.java    |   7 +-
 .../examples/rest/DockerRegistryResource.java      |   5 +-
 .../juneau/examples/rest/HelloWorldResource.java   |   4 +-
 .../juneau/examples/rest/JsonSchemaResource.java   |   2 +-
 .../examples/rest/MethodExampleResource.java       |   4 +-
 .../juneau/examples/rest/PetStoreResource.java     |   4 +-
 .../juneau/examples/rest/PhotosResource.java       |   4 +-
 .../examples/rest/PredefinedLabelsResource.java    |   4 +-
 .../juneau/examples/rest/RequestEchoResource.java  |   5 +-
 .../apache/juneau/examples/rest/RootResources.java |   2 +-
 .../juneau/examples/rest/SqlQueryResource.java     |   5 +-
 .../examples/rest/SystemPropertiesResource.java    |   5 +-
 .../juneau/examples/rest/TumblrParserResource.java |   6 +-
 .../examples/rest/UrlEncodedFormResource.java      |   3 +-
 .../rest/addressbook/AddressBookResource.java      |   2 +-
 .../apache/juneau/microservice/Microservice.java   |  81 ++-
 .../org/apache/juneau/microservice/Resource.java   |  65 ---
 .../apache/juneau/microservice/ResourceGroup.java  |  66 ---
 .../juneau/microservice/ResourceJenaGroup.java     |  90 ----
 ...sourceJena.java => RestServletJenaDefault.java} |  12 +-
 ...ResourceJena.java => RestServletJenaGroup.java} |  12 +-
 .../microservice/resources/ConfigResource.java     |   3 +-
 .../microservice/resources/DebugResource.java      |   2 +-
 .../microservice/resources/DirectoryResource.java  |   3 +-
 .../microservice/resources/LogsResource.java       |   3 +-
 .../microservice/resources/SampleRootResource.java |   4 +-
 .../microservice/resources/ShutdownResource.java   |   4 +-
 .../juneau/microservice/vars/package-info.java     |  18 -
 .../microservice/sample/HelloWorldResource.java    |   4 +-
 .../juneau/microservice/sample/RootResources.java  |   4 +-
 .../org/apache/juneau/rest/test/BpiResource.java   |   2 +-
 .../juneau/rest/test/ClientVersionResource.java    |   8 +-
 .../apache/juneau/rest/test/ConfigResource.java    |   3 +-
 .../juneau/rest/test/InterfaceProxyResource.java   |   2 +-
 .../juneau/rest/test/LargePojosResource.java       |   2 +-
 .../org/apache/juneau/rest/test/NlsResource.java   |   2 +-
 .../juneau/rest/test/RequestBeanProxyResource.java |   2 +-
 .../juneau/rest/test/ThirdPartyProxyResource.java  |   2 +-
 .../org/apache/juneau/rest/test/ConfigTest.java    |   2 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |  10 +-
 ...vletGroupDefault.java => RestServletGroup.java} |   2 +-
 49 files changed, 508 insertions(+), 645 deletions(-)

diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java
index c007a4c..a0b1af5 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -63,15 +63,17 @@ public class VarResolver {
         * Default string variable resolver with support for system properties 
and environment variables:
         * 
         * <ul>
-        *      <li><code>$S{key}</code>,<code>$S{key,default}</code> - {@link 
SystemPropertiesVar}
-        *      <li><code>$E{key}</code>,<code>$E{key,default}</code> - {@link 
EnvVariablesVar}
-        *      <li><code>$IF{booleanValue, thenValue[, elseValue]}</code> - 
{@link IfVar}
-        *      <li><code>$SW{stringValue, matchPattern:thenValue[, 
matchPattern:thenValue}</code> - {@link SwitchVar}
-        *      <li><code>$CO{arg1[,arg2...]}</code> - {@link CoalesceVar}
-        *      <li><code>$PM{stringValue,matchPattern}</code> - {@link 
PatternMatchVar}
-        *      <li><code>$UC{stringValue}</code> - {@link UpperCaseVar}
-        *      <li><code>$LC{stringValue}</code> - {@link LowerCaseVar}
-        *      <li><code>$NE{stringValue}</code> - {@link NotEmptyVar}
+        *      <li><code>$S{key[,default]}</code> - {@link SystemPropertiesVar}
+        *      <li><code>$E{key[,default]}</code> - {@link EnvVariablesVar}
+        *      <li><code>$A{key[,default]}</code> - {@link ArgsVar}
+        *      <li><code>$MF{key[,default]}</code> - {@link ManifestFileVar}
+        *      <li><code>$IF{arg,then[,else]}</code> - {@link IfVar}
+        *      <li><code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code> - 
{@link SwitchVar}
+        *      <li><code>$CO{arg[,arg2...]}</code> - {@link CoalesceVar}
+        *      <li><code>$PM{arg,pattern}</code> - {@link PatternMatchVar}
+        *      <li><code>$UC{arg}</code> - {@link UpperCaseVar}
+        *      <li><code>$LC{arg}</code> - {@link LowerCaseVar}
+        *      <li><code>$NE{arg}</code> - {@link NotEmptyVar}
         * </ul>
         * 
         * @see SystemPropertiesVar
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
index edea10e..18fde77 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
@@ -65,6 +65,8 @@ public class VarResolverBuilder {
         * <ul>
         *      <li>{@link SystemPropertiesVar}
         *      <li>{@link EnvVariablesVar}
+        *      <li>{@link ArgsVar}
+        *      <li>{@link ManifestFileVar}
         *      <li>{@link SwitchVar}
         *      <li>{@link IfVar}
         *      <li>{@link CoalesceVar}
@@ -77,7 +79,18 @@ public class VarResolverBuilder {
         * @return This object (for method chaining).
         */
        public VarResolverBuilder defaultVars() {
-               return vars(SystemPropertiesVar.class, EnvVariablesVar.class, 
SwitchVar.class, IfVar.class, CoalesceVar.class, PatternMatchVar.class, 
UpperCaseVar.class, LowerCaseVar.class, NotEmptyVar.class);
+               return vars(
+                       SystemPropertiesVar.class, 
+                       EnvVariablesVar.class, 
+                       ManifestFileVar.class, 
+                       ArgsVar.class,
+                       SwitchVar.class, 
+                       IfVar.class, 
+                       CoalesceVar.class, 
+                       PatternMatchVar.class, 
+                       UpperCaseVar.class, 
+                       LowerCaseVar.class, 
+                       NotEmptyVar.class);
        }
 
        /**
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java
 b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
similarity index 69%
rename from 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java
rename to 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
index d3cb8cb..b0b45f5 100644
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
@@ -10,7 +10,9 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the 
License.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.microservice.vars;
+package org.apache.juneau.svl.vars;
+
+import static org.apache.juneau.internal.StringUtils.*;
 
 import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
@@ -19,23 +21,28 @@ import org.apache.juneau.utils.*;
  * JVM args variable resolver.
  * 
  * <p>
- * The format for this var is <js>"$ARG{argNameOrNum}"</js> or 
<js>"$ARG{argNameOrNum,defaultValue}"</js>
+ * The format for this var is <js>"$A{arg[,default]}"</js>.
  * 
  * <p>
- * This variable resolver requires that an {@link Args} object be set as a 
context object on the resolver or a
- * session object on the resolver session.
+ * This variable resolver requires that the command-line arguments be made 
available through any of the following:
+ * <ul class='spaced-list'>
+ *     <li><js>"sun.java.command"</js> system property.
+ *     <li><js>"juneau.args"</js> system property.
+ *     <li>{@link #init(Args)} has been called.
+ * </ul>
  * 
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create an args object from the main(String[]) method.</jc>
  *     Args args = new Args(argv);
  * 
- *     <jc>// Create a variable resolver that resolves JVM arguments (e.g. 
"$ARG{1}")</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(ArgsVar.<js>class</js>)
- *             .addContextObject(<jsf>SESSION_args</jsf>, args);
+ *     ArgsVar.<jsm>init</jsm>(args);
+ * 
+ *     <jc>// Create a variable resolver that resolves JVM arguments (e.g. 
"$A{1}")</jc>
+ *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(ArgsVar.<js>class</js>);
  * 
  *     <jc>// Use it!</jc>
- *     System.<jsf>out</jsf>.println(r.resolve(<js>"Arg #1 is set to 
$ARG{1}"</js>));
+ *     System.<jsf>out</jsf>.println(r.resolve(<js>"Arg #1 is set to 
$A{1}"</js>));
  * </p>
  * 
  * <p>
@@ -47,23 +54,42 @@ import org.apache.juneau.utils.*;
  */
 public class ArgsVar extends DefaultingVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "A";
+       
+       private static volatile Args ARGS;
+       
        /**
-        * The name of the session or context object that identifies the {@link 
Args} object.
+        * Initialize the args for this variable.
+        * 
+        * @param args The parsed command-line arguments.
         */
-       public static final String SESSION_args = "args";
-
-       /** The name of this variable. */
-       public static final String NAME = "ARG";
+       public static void init(Args args) {
+               ARGS = args;
+       }
+       
+       private final Args args;
 
        /**
         * Constructor.
         */
        public ArgsVar() {
                super(NAME);
+               if (ARGS != null)
+                       this.args = ARGS;
+               else {
+                       String s = System.getProperty("sun.java.command");
+                       if (! isEmpty(s)) {
+                               int i = s.indexOf(' ');
+                               args = new Args(i == -1 ? "" : 
s.substring(i+1));
+                       } else {
+                               args = new 
Args(System.getProperty("juneau.args"));
+                       }
+               }
        }
 
        @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
-               return session.getSessionObject(Args.class, 
SESSION_args).getArg(key);
+               return args.getArg(key);
        }
 }
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
similarity index 81%
rename from 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java
rename to 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
index ae7d3a6..1740626 100644
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the 
License.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.microservice.vars;
+package org.apache.juneau.svl.vars;
 
 import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
@@ -19,20 +19,21 @@ import org.apache.juneau.utils.*;
  * Manifest file entries variable resolver.
  * 
  * <p>
- * The format for this var is <js>"$MF{key}"</js> or 
<js>"$MF{key,defaultValue}"</js>
+ * The format for this var is <js>"$MF{key[,default]}"</js>.
  * 
  * <p>
- * This variable resolver requires that a {@link ManifestFile} object be set 
as a context object on the resolver or a
- * session object on the resolver session.
+ * This variable resolver requires that a {@link ManifestFile} object be made 
available by calling 
+ * the {@link #init(ManifestFile)} method.
  * 
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create a ManifestFile object that contains the manifest of the 
jar file containing this class.</jc>
  *     ManifestFile mf = <jk>new</jk> ManifestFile(<jk>this</jk>.getClass());
  * 
+ *     ManifestFileVar.<jsm>init</jsm>(mf);
+ * 
  *     <jc>// Create a variable resolver that resolves manifest file entries 
(e.g. "$MF{Main-Class}")</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(ManifestFile.<js>class</js>)
- *             .addContextObject(<jsf>SESSION_manifest</jsf>, mf);
+ *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(ManifestFile.<js>class</js>);
  * 
  *     <jc>// Use it!</jc>
  *     System.<jsf>out</jsf>.println(r.resolve(<js>"The main class is 
$MF{Main-Class}"</js>));
@@ -47,23 +48,32 @@ import org.apache.juneau.utils.*;
  */
 public class ManifestFileVar extends DefaultingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
ManifestFile} object.
-        */
-       public static final String SESSION_manifest = "manifest";
-
        /** The name of this variable. */
        public static final String NAME = "MF";
 
+       private static volatile ManifestFile MANIFEST_FILE;
+       
+       /**
+        * Initialize the manifest file for this variable.
+        * 
+        * @param manifestFile The parsed manifest file.
+        */
+       public static void init(ManifestFile manifestFile) {
+               MANIFEST_FILE = manifestFile;
+       }
+       
+       private final ManifestFile manifestFile;
+       
        /**
         * Constructor.
         */
        public ManifestFileVar() {
                super(NAME);
+               this.manifestFile = MANIFEST_FILE;
        }
 
        @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
-               return session.getSessionObject(ManifestFile.class, 
SESSION_manifest).getString(key);
+               return manifestFile == null ? "" : manifestFile.getString(key);
        }
 }
diff --git a/juneau-doc/src/main/javadoc/overview.html 
b/juneau-doc/src/main/javadoc/overview.html
index 75106d4..1d42dc3 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -75,12 +75,12 @@
 
 <a id='TOC'></a><h5 class='toc'>Table of Contents</h5>
 <ol class='toc'>
-       <li><p><a class='doclink' href='#Intro'>Introduction</a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#Intro'>Introduction</a></p>
        <ol>
                <li><p><a class='doclink' 
href='#Intro.Features'>Features</a></p>
                <li><p><a class='doclink' 
href='#Intro.Components'>Components</a></p>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-marshall'><i>juneau-marshall</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-marshall'><i>juneau-marshall</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-marshall.Serializers'>Serializers</a></p>
                <li><p><a class='doclink' 
href='#juneau-marshall.Parsers'>Parsers</a></p>
@@ -128,21 +128,21 @@
                        <li><p><a class='doclink' 
href='#juneau-marshall.AdditionalInfo.URLEncoding'>URL-Encoding</a></p>
                </ol>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-marshall-rdf'><i>juneau-marshall-rdf</i></a></p>
-       <li><p><a class='doclink' href='#juneau-dto'><i>juneau-dto</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-marshall-rdf'><i>juneau-marshall-rdf</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-dto'><i>juneau-dto</i></a></p>
        <ol>
                <li><p><a class='doclink' href='#juneau-dto.HTML5'>HTML5</a></p>
                <li><p><a class='doclink' href='#juneau-dto.Atom'>Atom</a></p>
                <li><p><a class='doclink' 
href='#juneau-dto.Swagger'>Swagger</a></p>
        </ol>
-       <li><p><a class='doclink' href='#juneau-svl'><i>juneau-svl</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-svl'><i>juneau-svl</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-svl.SimpleVarLanguage'>Simple Variable Language</a></p>
                <li><p><a class='doclink' href='#juneau-svl.SvlVariables'>SVL 
Variables</a></p>
                <li><p><a class='doclink' 
href='#juneau-svl.VarResolvers'>VarResolvers and VarResolverSessions</a></p>
                <li><p><a class='doclink' href='#juneau-svl.OtherNotes'>Other 
Notes</a></p>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-config'><i>juneau-config</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-config'><i>juneau-config</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-config.Overview'>Overview</a></p>
                <ol>
@@ -177,11 +177,12 @@
                        <li><p><a class='doclink' 
href='#juneau-config.ConfigMemoryStore'>ConfigMemoryStore</a></p>
                        <li><p><a class='doclink' 
href='#juneau-config.ConfigFileStore'>ConfigFileStore</a></p>
                        <li><p><a class='doclink' 
href='#juneau-config.CustomConfigStores"'>Custom ConfigStores</a></p>
+                       <li><p><a class='doclink' 
href='#juneau-config.ConfigStoreListeners"'>ConfigStore Listeners</a></p>
                </ol>
                <li><p><a class='doclink' 
href='#juneau-config.ReadOnlyConfigs'>Read-only Configs</a></p>
                <li><p><a class='doclink' 
href='#juneau-config.ClosingConfigs'>Closing Configs</a></p>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-rest-server'><i>juneau-rest-server</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-rest-server'><i>juneau-rest-server</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-rest-server.HelloWorldExample'>Hello World Example</a></p>
                <li><p><a class='doclink' 
href='#juneau-rest-server.ClassHierarchy'>Class Hierarchy</a></p>
@@ -266,11 +267,11 @@
                <li><p><a class='doclink' 
href='#juneau-rest-server.PredefinedLabelBeans'>Predefined Label Beans</a></p>
                <li><p><a class='doclink' 
href='#juneau-rest-server.OtherNotes'>Other Notes</a></p>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-rest-server-jaxrs'><i>juneau-rest-server-jaxrs</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-rest-server-jaxrs'><i>juneau-rest-server-jaxrs</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-rest-server-jaxrs.BaseProvider'>Juneau JAX-RS Provider</a></p>
        </ol>   
-       <li><p><a class='doclink' 
href='#juneau-rest-client'><i>juneau-rest-client</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-rest-client'><i>juneau-rest-client</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-rest-client.3rdPartyProxies'>Interface Proxies Against 3rd-party 
REST Interfaces</a></p>
                <li><p><a class='doclink' href='#juneau-rest-client.SSL'>SSL 
Support</a></p>
@@ -291,7 +292,7 @@
                <li><p><a class='doclink' 
href='#juneau-rest-client.Remoteable'>Remoteable Proxies</a></p>
                <li><p><a class='doclink' 
href='#juneau-rest-client.Other'>Other Useful Methods</a></p>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-microservice-server'><i>juneau-microservice-server</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-microservice-server'><i>juneau-microservice-server</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-microservice-server.Introduction'>Microservice 
Introduction</a></p>
                <li><p><a class='doclink' 
href='#juneau-microservice-server.GettingStarted'>Getting Started</a></p>
@@ -315,8 +316,8 @@
                        <li><p><a class='doclink' 
href='#juneau-microservice-server.ExtendingRestMicroservice'>Extending 
RestMicroservice</a></p>
                </ol>
        </ol>
-       <li><p><a class='doclink' 
href='#juneau-examples-core'><i>juneau-examples-core</i></a></p>
-       <li><p><a class='doclink' 
href='#juneau-examples-rest'><i>juneau-examples-rest</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-examples-core'><i>juneau-examples-core</i></a></p>
+       <li><p class='toc2'><a class='doclink' 
href='#juneau-examples-rest'><i>juneau-examples-rest</i></a></p>
        <ol>
                <li><p><a class='doclink' 
href='#juneau-examples-rest.RootResources'>RootResources</a></p>
                <li><p><a class='doclink' 
href='#juneau-examples-rest.HelloWorldResource'>HelloWorldResource</a></p>
@@ -344,8 +345,8 @@
                <li><p><a class='doclink' 
href='#juneau-examples-rest.ConfigResource'>ConfigResource</a></p>
                <li><p><a class='doclink' 
href='#juneau-examples-rest.LogsResource'>LogsResource</a></p>
        </ol>
-       <li><p><a class='doclink' href='#Security'>Security 
Best-Practices</a></p>
-       <li><p><a class='doclink' href='#ReleaseNotes'>Release Notes</a></p>
+       <li><p class='toc2'><a class='doclink' href='#Security'>Security 
Best-Practices</a></p>
+       <li><p class='toc2'><a class='doclink' href='#ReleaseNotes'>Release 
Notes</a></p>
 </ol>
 
 <!-- 
===============================================================================================================
 -->
@@ -393,18 +394,21 @@
        <h3 class='topic' onclick='toggle(this)'>1.1 - Features</h3>
        <div class='topic'>
                <ul class='spaced-list'>
-                       <li>
-                               KISS is our mantra!  No auto-wiring.  No code 
generation.  No dependency injection (but still compatible with).  
-                               Just add it to your classpath and use it.  
Extremely simple unit testing! 
-                       <li>
-                               Extensive and extensible support for a large 
variety of POJOs, including structured data (beans) and 
-                               unstructured data (<code>Maps</code> and 
<code>Collections</code>).
-                       <li>
-                               Sophisticated configurable serializers and 
parsers. 
-                               <br>For example, the JSON serializers and 
parsers can handle strict or lax syntax, comments, 
-                               concatenated strings, etc...
+                       <li>KISS is our mantra!  No auto-wiring.  No code 
generation.  No dependency injection.  Just add it to your classpath and use 
it.  Extremely simple unit testing!
+                       <li>Enjoyable to use
                        <li>Tiny - ~1MB
                        <li>Exhaustively tested
+                       <li>Lots of up-to-date documentation and examples
+                       <li>Minimal library dependencies: 
+                               <ul>
+                                       <li><b>juneau-marshall</b>, 
<b>juneau-dto</b>, <b>juneau-svl</b>, <b>juneau-config</b> - No external 
dependencies.  Entirely self-contained.
+                                       <li><b>juneau-marshall-rdf</b> - 
Optional RDF support.  Requires Apache Jena 2.7.1+.
+                                       <li><b>juneau-rest-server</b> - Any 
Servlet 3.1.0+ container.
+                                       <li><b>juneau-rest-client</b> - Apache 
HttpClient 4.5+.
+                                       <li><b>juneau-microservice</b> - 
Eclipse Jetty.
+                               </ul>
+                       <li>Built on top of Servlet and Apache HttpClient APIs 
that allow you to use the newest HTTP/2 features
+                               such as request/response multiplexing and 
server push.
                </ul>
        </div>
                
@@ -1261,9 +1265,12 @@
                <p>
                        Transforms are added to serializers and parsers (and 
REST clients) using the following configuration properties:
                </p> 
-               <ul>
-                       <li class='jm'>{@link 
org.apache.juneau.BeanContext#BEAN_beanFilters}
-                       <li class='jm'>{@link 
org.apache.juneau.BeanContext#BEAN_pojoSwaps}
+               <ul class='doctree'>
+                       <li class='jc'>{@link org.apache.juneau.BeanContext}
+                       <ul>
+                               <li class='jf'>{@link 
org.apache.juneau.BeanContext#BEAN_beanFilters BEAN_beanFilters}
+                               <li class='jf'>{@link 
org.apache.juneau.BeanContext#BEAN_pojoSwaps BEAN_pojoSwaps}
+                       </ul>
                </ul>
                <p>
                        Annotations are also provided for specifying transforms 
directly on classes and methods (all described in later sections):
@@ -4383,17 +4390,21 @@
                        <br>The {@link 
org.apache.juneau.svl.VarResolver#DEFAULT} resolver is a reusable instance of 
this class 
                        configured with the following basic variables:
                </p>
-               <ul>
-                       <li><code>$S{key}</code>,<code>$S{key,default}</code> - 
System properties.
-                       <li><code>$E{key}</code>,<code>$E{key,default}</code> - 
Environment variables.
+               <ul class='doctree'>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar} - <code>$S{key[,default]}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar} - <code>$E{key[,default]}</code>
                </ul>
                <p>
                        The following logic variables are also provided:
                </p>
-               <ul>
-                       
<li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - If-else patterns.
-                       
<li><code>$SW{test,matchPattern:thenValue[,matchPattern:thenValue...][,elseValue]}</code>
 - Switch patterns.
-                       <li><code>$CO{arg1[,arg2...]}</code> - Coalesce 
variable.
+               <ul class='doctree'>
+                       <li class='jc'>{@link org.apache.juneau.svl.vars.IfVar} 
- <code>$IF{arg,then[,else]}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.SwitchVar} - 
<code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.CoalesceVar} - <code>$CO{arg1[,arg2...]}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.PatternMatchVar} - <code>$PM{arg,pattern}</code> 
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.NotEmptyVar} - <code>$NE{arg}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.UpperCaseVar} - <code>$UC{arg}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.LowerCaseVar} - <code>$LC{arg}</code>
                </ul>
                <h5 class='figure'>Example:</h5>
                <p class='bcode'>
@@ -4474,39 +4485,63 @@
                                <th>Module</th><th>Class</th><th>Pattern</th>
                        </tr>
                        <tr class='dark'>
-                               <td rowspan="6" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-svl</td>
+                               <td rowspan="9" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-svl</td>
                                <td>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar}</td>
-                               <td class='code'>$E{envVar[,defaultValue]}</td>
+                               <td class='code'>$E{key[,default]}</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar}</td>
-                               <td 
class='code'>$S{systemProperty[,defaultValue]}</td>
+                               <td class='code'>$S{key[,default]}</td>
                        </tr>
                        <tr class='dark'>
-                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceVar}</td>
-                               <td class='code'>$CO{arg1[,arg2...]}</td>
+                               <td>{@link 
org.apache.juneau.svl.vars.ArgsVar}</td>
+                               <td class='code'>$A{key[,default]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.ManifestFileVar}</td>
+                               <td class='code'>$MF{key[,default]}</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.svl.vars.IfVar}</td>
-                               <td class='code'>$IF{booleanArg ? 
thenValue}<br>$IF{booleanArg ? thenValue : elseValue}</td>
+                               <td class='code'>$IF{arg,then[,else]}</td>
                        </tr>
                        <tr class='dark dd'>
                                <td>{@link 
org.apache.juneau.svl.vars.SwitchVar}</td>
-                               <td class='code'>$SW{stringArg ? pattern: 
value, pattern: value, ...}</td>
+                               <td 
class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceVar}</td>
+                               <td class='code'>$CO{arg1[,arg2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.PatternMatchVar}</td>
+                               <td class='code'>$PM{arg,pattern}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.NotEmptyVar}</td>
+                               <td class='code'>$NE{arg}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.UpperCaseVar}</td>
+                               <td class='code'>$UC{arg}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.LowerCaseVar}</td>
+                               <td class='code'>$LC{arg}</td>
                        </tr>
                        <tr class='light dd'>
                                <td rowspan="1" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-config</td>
                                <td>{@link 
org.apache.juneau.config.vars.ConfigVar}</td>
-                               <td class='code'>$C{key[,defaultValue]}</td>
+                               <td class='code'>$C{key[,default]}</td>
                        </tr>
                        <tr class='dark'>
                                <td rowspan="14" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-rest-server</td>
                                <td>{@link 
org.apache.juneau.rest.vars.FileVar}</td>
-                               <td class='code'>$F{path[,defaultValue]}}</td>
+                               <td class='code'>$F{path[,default]}}</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.rest.vars.ServletInitParamVar}</td>
-                               <td class='code'>$I{name[,defaultValue]}</td>
+                               <td class='code'>$I{name[,default]}</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.rest.vars.LocalizationVar}</td>
@@ -4542,7 +4577,7 @@
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td>
-                               <td 
class='code'>$SA{contentType,key[,defaultValue]}</td>
+                               <td 
class='code'>$SA{contentType,key[,default]}</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.rest.vars.UrlVar}</td>
@@ -4554,16 +4589,7 @@
                        </tr>
                        <tr class='dark dd'>
                                <td>{@link 
org.apache.juneau.rest.vars.WidgetVar}</td>
-                               <td class='code'>$W{widgetName}</td>
-                       </tr>
-                       <tr class='light'>
-                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-microservice-server</td>
-                               <td>{@link 
org.apache.juneau.microservice.vars.ArgsVar}</td>
-                               <td class='code'>$ARG{key[,defaultValue]}</td>
-                       </tr>
-                       <tr class='light dd'>
-                               <td>{@link 
org.apache.juneau.microservice.vars.ManifestFileVar}</td>
-                               <td class='code'>$MF{key[,defaultValue]}</td>
+                               <td class='code'>$W{name}</td>
                        </tr>
                </table>
        </div>
@@ -4622,7 +4648,7 @@
                
                <h5 class='figure'>Example:</h5>
                <p class='bcode'>
-       <jc>// Create a resolver that copies the default resolver and adds $C 
and $ARG vars.</jc>
+       <jc>// Create a resolver that copies the default resolver and adds $C 
and $A vars.</jc>
        VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>
                .builder()
                .vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>)
@@ -5124,9 +5150,7 @@
                                <li><code>getObject(<js>"..."</js>, 
HashMap.<jk>class</jk>, Integer.<jk>class</jk>, ArrayList.<jk>class</jk>, 
MyBean[].<jk>class</jk>)</code>
                                        <br>Produces: 
<code>LinkedHashMap&lt;Integer,ArrayList&lt;MyBean[]&gt;&gt;</code> 
                        </ul>
-                       <p>
-                               For example:
-                       </p>
+                       <h5 class='figure'>Example:</h5>
                        <p class='bcode'>
        <ck>addresses</ck> = 
                <cv>[
@@ -5256,10 +5280,10 @@
                        By default, <code>Configs</code> use the {@link 
org.apache.juneau.svl.VarResolver#DEFAULT} variable resolver
                        which provides support for the following variables and 
constructs:
                </p>
-               <ul class='spaced-list'>
-                       <li><code>$C{key}</code>, <code>$C{key,default}</code> 
- {@link org.apache.juneau.config.vars.ConfigVar}
-                       <li><code>$S{key}</code>, <code>$S{key,default}</code> 
- {@link org.apache.juneau.svl.vars.SystemPropertiesVar}
-                       <li><code>$E{key}</code>, <code>$E{key,default}</code> 
- {@link org.apache.juneau.svl.vars.EnvVariablesVar}
+               <ul class='doctree'>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar} - <code>$S{key[,default]}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar} - <code>$E{key[,default]}</code>
+                       <li class='jc'>{@link 
org.apache.juneau.config.vars.ConfigVar} - <code>$C{key[,default]}</code>
                </ul>
                <p>
                        The variable resolver is controlled via the following 
setting:
@@ -5281,14 +5305,14 @@
                        <p>
                                The default variable resolver also provides the 
following logic variables for performing simple logical operations:
                        </p>
-                       <ul class='spaced-list'>
-                               <li><code>$IF{booleanValue, thenValue[, 
elseValue]}</code> - {@link org.apache.juneau.svl.vars.IfVar}
-                               <li><code>$SW{stringValue, 
matchPattern:thenValue[ ,matchPattern:thenValue...]}</code> - {@link 
org.apache.juneau.svl.vars.SwitchVar}
-                               <li><code>$CO{arg1[, arg2...]}</code> - {@link 
org.apache.juneau.svl.vars.CoalesceVar}
-                               <li><code>$PM{stringValue, matchPattern}</code> 
- {@link org.apache.juneau.svl.vars.PatternMatchVar}
-                               <li><code>$UC{stringValue}</code> - {@link 
org.apache.juneau.svl.vars.UpperCaseVar}
-                               <li><code>$LC{stringValue}</code> - {@link 
org.apache.juneau.svl.vars.LowerCaseVar}
-                               <li><code>$NE{stringValue}</code> - {@link 
org.apache.juneau.svl.vars.NotEmptyVar}
+                       <ul class='doctree'>
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.IfVar} - <code>$IF{arg,then[,else]}</code>
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.SwitchVar} - 
<code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code>
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.CoalesceVar} - <code>$CO{arg1[,arg2...]}</code>
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.PatternMatchVar} - <code>$PM{arg,pattern}</code> 
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.NotEmptyVar} - <code>$NE{arg}</code>
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.UpperCaseVar} - <code>$UC{arg}</code>
+                               <li class='jc'>{@link 
org.apache.juneau.svl.vars.LowerCaseVar} - <code>$LC{arg}</code>
                        </ul>
                        <p>
                                The <code>$IF</code> variable can be used for 
simple if/else logic:
@@ -5458,9 +5482,9 @@
                <p class='bcode'>
        <jc>// Example bean</jc>
        <jk>public class</jk> Address {
-               public String street, city;
-               public StateEnum state;
-               public int zip;
+               <jk>public</jk> String <jf>street</jf>, <jf>city</jf>;
+               <jk>public</jk> StateEnum <jf>state</jf>;
+               <jk>public int</jk> <jf>zip</jf>;
        }
 
        <jc>// Example usage</jc>
@@ -5785,13 +5809,17 @@
                <ul class='doctree'>
                        <li class='jc'>{@link org.apache.juneau.config.Config}
                        <ul>
-                               <li class='jm'>{@link 
org.apache.juneau.config.Config#writeTo(Writer)}
-                               <li class='jm'>{@link 
org.apache.juneau.config.Config#toString()}
+                               <li class='jm'>{@link 
org.apache.juneau.config.Config#writeTo(Writer) writeTo(Writer)}
+                               <li class='jm'>{@link 
org.apache.juneau.config.Config#toString() toString()}
                        </ul>
                </ul>
                <p>
                        Both methods are thread safe.
                </p>
+               <p>
+                       The <code>Config</code> class implements the {@link 
org.apache.juneau.Writable} which means it can be 
+                       returned as-is by REST methods to be serialized as INI 
text.
+               </p>
        </div>
 
        <!-- 
========================================================================================================
 -->
@@ -5825,10 +5853,14 @@
                </p>
                <p class='bcode'>
        <jk>public</jk> String write(String name, String oldContents, String 
newContents) {
+       
                <jc>// If the old contents match the current stored contents, 
the new contents will get stored, 
-               //      and the method returns null.
+               //      and the method returns null indicating success.
+       
                // If the old contents DO NOT match the current stored contents 
(i.e. it was modified in some way), 
-               //      the new contents are NOT stored, and the method returns 
the current stored contents.</jc>
+               //      the new contents are NOT stored, and the method returns 
the current stored contents.
+       
+               // If the old contents are null, then just always write the new 
contents.</jc>
        }
                </p>
                <p>
@@ -5840,30 +5872,6 @@
        }
                </p>
                <p>
-                       The <code>ConfigStore</code> class also has the 
following listener methods:
-               </p>
-               <ul class='doctree'>
-                       <li class='jac'>{@link 
org.apache.juneau.config.store.ConfigStore}
-                       <ul>
-                               <li class='jm'>{@link 
org.apache.juneau.config.store.ConfigStore#register(String,ConfigStoreListener) 
register(String,ConfigStoreListener)} - Register a listener on the specified 
config name.
-                               <li class='jm'>{@link 
org.apache.juneau.config.store.ConfigStore#unregister(String,ConfigStoreListener)
 unregister(String,ConfigStoreListener)} - Unregister a listener on the 
specified config name.
-                       </ul>
-               </ul>
-               <p>
-                       Note that this is a different listener than {@link 
org.apache.juneau.config.event.ConfigEventListener}.
-                       <br>In this case, we're just listening for changed 
files:
-               </p>            
-               <ul class='doctree'>
-                       <li class='jic'>{@link 
org.apache.juneau.config.store.ConfigStoreListener}
-                       <ul>
-                               <li class='jm'>{@link 
org.apache.juneau.config.store.ConfigStoreListener#onChange(String)} - Called 
when file changes.  New contents are passed in.
-                       </ul>
-               </ul>
-               <p>
-                       This listener is used by the <code>Config</code> class 
to listen for changes on the file system so that it can be
-                       updated in real-time.
-               </p>
-               <p>
                        Two configuration stores are provided by default:
                </p>
                <ul>
@@ -5979,7 +5987,7 @@
                                The <code>ConfigStore</code> API has been 
written to allow easy development of custom configuration storage classes.
                        </p>
                        <p>
-                               The example belows shows a starting point for 
an implementation based on a relational database.
+                               The example below shows a starting point for an 
implementation based on polling a relational database.
                                <br>Completing it is left as an exercise:
                        </p>
                        <h5 class='figure'>Example Store Class:</h5>
@@ -5990,13 +5998,14 @@
                <jk>static final</jk> String
                        <jsf>CONFIGSQLSTORE_jdbcUrl</jsf> = 
<js>"ConfigSqlStore.jdbcUrl.s"</js>,
                        <jsf>CONFIGSQLSTORE_tableName</jsf> = 
<js>"ConfigSqlStore.tableName.s"</js>,
-                       <jsf>CONFIGSQLSTORE_nameColumn</jsf> = 
<js>"ConfigSqlStore.nameColumn.s"</js>;
-                       <jsf>CONFIGSQLSTORE_valueColumn</jsf> = 
<js>"ConfigSqlStore.valueColumn.s"</js>;
+                       <jsf>CONFIGSQLSTORE_nameColumn</jsf> = 
<js>"ConfigSqlStore.nameColumn.s"</js>,
+                       <jsf>CONFIGSQLSTORE_valueColumn</jsf> = 
<js>"ConfigSqlStore.valueColumn.s"</js>,
+                       <jsf>CONFIGSQLSTORE_pollInterval</jsf> = 
<js>"ConfigSqlStore.pollInterval.i"</js>;
 
                <jc>// Instance fields</jc>
                <jk>private final</jk> String <jf>jdbcUrl</jf>;
                <jk>private final</jk> String <jf>tableName</jf>, 
<jf>nameColumn</jf>, <jf>valueColumn</jf>;
-               <jk>private final</jk> Thread <jf>watcherThread</jf>;
+               <jk>private final</jk> Timer <jf>watcher</jf>;
                <jk>private final</jk> ConcurrentHashMap&lt;String,String&gt; 
<jf>cache</jf> = <jk>new</jk> ConcurrentHashMap&lt;&gt;();
 
        
@@ -6008,17 +6017,21 @@
                        <jk>this</jk>.<jf>tableName</jf> = 
getStringProperty(<jsf>CONFIGSQLSTORE_tableName</jsf>);
                        <jk>this</jk>.<jf>nameColumn</jf> = 
getStringProperty(<jsf>CONFIGSQLSTORE_nameColumn</jsf>);
                        <jk>this</jk>.<jf>valueColumn</jf> = 
getStringProperty(<jsf>CONFIGSQLSTORE_valueColumn</jsf>);          
+
+                       <jk>int</jk> pollInterval = 
getStringProperty(<jsf>CONFIGSQLSTORE_pollInterval</jsf>, 600);
                        
-                       <jk>this</jk>.watcherThread = <jk>new</jk> Thread() {
-                               <ja>@Override</ja> <jc>/* Thread */</jc>
+                       TimerTask timerTask = <jk>new</jk> TimerTask() {
+                               <ja>@Override</ja>
                                <jk>public void</jk> run() {
-                                       
ConfigSqlStore.<jk>this</jk>.checkForUpdates();
+                                       ConfigSqlStore.<jk>this</jk>.poll();
                                }
-                       };      
-                       watcherThread.start();                                  
+                       };
+
+                       <jk>this</jk>.<jf>watcher</jf> = <jk>new</jk> 
Timer(<js>"MyTimer"</js>);
+                       <jf>watcher</jf>.scheduleAtFixedRate(timerTask, 0, 
pollInterval * 10000);
                }
                
-               <jk>private synchronized void</jk> checkForUpdates() {
+               <jk>private synchronized void</jk> poll() {
                
                        <jc>// Loop through all our entries and find the latest 
values.</jc>
                        <jk>for</jk> (Map.Entry&lt;String,String&gt; e : 
cache.entrySet()) {
@@ -6042,7 +6055,7 @@
                <jk>public synchronized</jk> String read(String name) {
                        String contents = <jf>cache</jf>.get(name);
                        <jk>if</jk> (contents == <jk>null</jk>) {
-                               contents = readDatabaseValue(name);
+                               contents = getDatabaseValue(name);
                                update(name, contents);
                        }
                        <jk>return</jk> contents;
@@ -6077,7 +6090,7 @@
                <ja>@Override</ja> <jc>/* Closeable */</jc>
                <jk>public synchronized void</jk> close() {
                        <jk>if</jk> (watcher != <jk>null</jk>)
-                               watcher.interrupt();
+                               watcher.cancel();
                }
        }
                        </p>
@@ -6117,13 +6130,47 @@
                        <jk>return this</jk>;
                }
 
+               <jk>public</jk> ConfigSqlStoreBuilder pollInterval(<jk>int</jk> 
value) {
+                       
<jk>super</jk>.set(<jsf>CONFIGSQLSTORE_pollInterval</jsf>, value);
+                       <jk>return this</jk>;
+               }
+
                <ja>@Override</ja> <jc>/* ContextBuilder */</jc>
                <jk>public</jk> ConfigFileStore build() {
                        <jk>return new</jk> ConfigFileStore(getPropertyStore());
                }
        }
                </div>
-       
+               
+               <!-- 
========================================================================================================
 -->
+               <a id="juneau-config.ConfigStoreListeners"></a>
+               <h4 class='topic' onclick='toggle(this)'>6.11.4 - ConfigStore 
Listeners</h4>
+               <div class='topic'>
+                       <p>
+                               The <code>ConfigStore</code> class has the 
following listener methods:
+                       </p>
+                       <ul class='doctree'>
+                               <li class='jac'>{@link 
org.apache.juneau.config.store.ConfigStore}
+                               <ul>
+                                       <li class='jm'>{@link 
org.apache.juneau.config.store.ConfigStore#register(String,ConfigStoreListener) 
register(String,ConfigStoreListener)} - Register a listener on the specified 
config name.
+                                       <li class='jm'>{@link 
org.apache.juneau.config.store.ConfigStore#unregister(String,ConfigStoreListener)
 unregister(String,ConfigStoreListener)} - Unregister a listener on the 
specified config name.
+                               </ul>
+                       </ul>
+                       <p>
+                               Note that this is a different listener than 
{@link org.apache.juneau.config.event.ConfigEventListener}.
+                               <br>In this case, we're just listening for 
changed files:
+                       </p>            
+                       <ul class='doctree'>
+                               <li class='jic'>{@link 
org.apache.juneau.config.store.ConfigStoreListener}
+                               <ul>
+                                       <li class='jm'>{@link 
org.apache.juneau.config.store.ConfigStoreListener#onChange(String)} - Called 
when file changes.  New contents are passed in.
+                               </ul>
+                       </ul>
+                       <p>
+                               This listener is used by the 
<code>Config</code> class to listen for changes on the file system so that it 
can be
+                               updated in real-time.
+                       </p>
+               </div>  
        </div>
 
        <!-- 
========================================================================================================
 -->
@@ -6154,6 +6201,7 @@
                        In general, it's good practice to close Config if 
you're only creating them temporarily so that
                        their listeners get unregistered from the underlying 
storage APIs.
                </p>
+               <h5 class='figure'>Example:</h5>
                <p class='bcode'>
        <jc>// Create a transient config.</jc>
        Config c = Config.<jsm>create</jsm>(<js>"MyConfig.cfg"</js>).build();
@@ -6314,9 +6362,7 @@
                        Our servlet code is shown below:
                </p>
                <p class='bcode'>
-       <jd>/** 
-        * Sample REST resource that prints out a simple "Hello world!" message.
-        */</jd>
+       <jc>// Sample REST resource that prints out a simple "Hello world!" 
message.</jc>
        <ja>@RestResource</ja>(
                path=<js>"/helloWorld"</js>,
                title=<js>"Hello World"</js>,
@@ -6377,18 +6423,9 @@
                                                <ul>
                                                        <li class='jac'>{@link 
org.apache.juneau.rest.RestServletDefault 
org.apache.juneau.rest.RestServletDefault}
                                                                <br>Provides a 
default set of serializers, parsers, options page, stylesheet, and other common 
settings.
-                                                               
<br><b>Developers will typically subclass this when creating REST resources in 
JEE environments.</b> 
                                                                <ul>
-                                                                       <li 
class='jac'>{@link org.apache.juneau.microservice.Resource 
org.apache.juneau.microservice.Resource}
-                                                                               
<br>Identical to <l>RestServletDefault</l> but provides support for 
<code>$ARGS</code> and <code>$MF</code> variables.
-                                                                               
<br><b>Developers will typically subclass this when creating microservices.</b> 
-                                                                       <li 
class='jac'>{@link org.apache.juneau.rest.RestServletGroupDefault 
org.apache.juneau.rest.RestServletGroupDefault}
+                                                                       <li 
class='jac'>{@link org.apache.juneau.rest.RestServletGroup 
org.apache.juneau.rest.RestServletGroup}
                                                                                
<br>A default implementation for "router" pages.
-                                                                               
<ul>
-                                                                               
        <li class='jac'>{@link org.apache.juneau.microservice.ResourceGroup 
org.apache.juneau.microservice.ResourceGroup}
-                                                                               
        <br>Identical to <l>RestServletGroupDefault</l> but provides support 
for <code>$ARGS</code> and <code>$MF</code> variables.
-                                                                               
        <br><b>Developers will typically subclass this when creating 
microservice groups.</b> 
-                                                                               
</ul>
                                                                        </li>
                                                                </ul>
                                                        </li>
@@ -6419,14 +6456,24 @@
                <p>
                        REST resources are deployed in one of two ways:
                </p>
-               <ul>
+               <ul class='spaced-list'>
                        <li>Deployed in a J2EE container as a servlet.
                        <li>Deployed as a child of another REST resource.
                </ul>
                <p>
                        When deployed in a J2EE container, you MUST extend from 
one of the servlet classes.
-                       <br>When deployed as a child of another resource, you 
MAY extend from one of the servlet classes but it's 
-                       not necessary.
+               </p>
+               <p>
+                       <b>When deployed as a child of another resource, you 
MAY extend from one of the servlet classes but it's 
+                       not necessary.</b>
+                       <br>The only requirement is that the class be annotated 
with <ja>@RestResource</ja> and have one of the following constructors:
+               </p>
+               <ul>
+                       <li class='jm'><code><jk>public</jk> T()</code>
+                       <li class='jm'><code><jk>public</jk> 
T(RestContextBuilder)</code>
+               </ul>
+               <p>
+                       And even that restriction is relaxed if you implement 
your own REST resource resolver (described later).
                </p>
 
                <!-- 
========================================================================================================
 -->
@@ -6538,12 +6585,7 @@
        )
        <jk>public abstract class</jk> RestServletDefault <jk>extends</jk> 
RestServlet {
        
-               <jd>/**
-                * [OPTIONS /*] - Show resource options.
-                * 
-                * @param req The HTTP request.
-                * @return A bean containing the contents for the OPTIONS page.
-                */</jd>
+               <jc>// Show resource options.</jc>
                <ja>@RestMethod</ja>(name=<jsf>OPTIONS</jsf>, 
path=<js>"/*"</js>,
                        htmldoc=<ja>@HtmlDoc</ja>(
                                navlinks={
@@ -6615,7 +6657,7 @@
                <h4 class='topic' onclick='toggle(this)'>7.3.4 - Router 
Pages</h4>
                <div class='topic'>
                        <p>
-                               The {@link 
org.apache.juneau.rest.RestServletGroupDefault} class provides a default 
"router" page for 
+                               The {@link 
org.apache.juneau.rest.RestServletGroup} class provides a default "router" page 
for 
                                child resources when a parent resource is 
nothing more than a grouping of child resources.
                        </p>            
                        <p>
@@ -6650,7 +6692,7 @@
                        ShutdownResource.<jk>class</jk>
                }
        )
-       <jk>public class</jk> RootResources <jk>extends</jk> 
RestServletGroupDefault {
+       <jk>public class</jk> RootResources <jk>extends</jk> RestServletGroup {
                <jc>// NO CODE!!!</jc>
        }
                        </p>
@@ -6660,13 +6702,15 @@
                        </p>
                        <img class='bordered' 
src="doc-files/juneau-rest-server.RouterPages.1.png" style='width:800px;'/>
                        <p> 
-                               The {@link 
org.apache.juneau.rest.RestServletGroupDefault} class is nothing more than a 
subclass of 
+                               The {@link 
org.apache.juneau.rest.RestServletGroup} class is nothing more than a subclass 
of 
                                {@link 
org.apache.juneau.rest.RestServletDefault} with a <l>getChildren()</l> method 
mapped to the servlet 
                                root path.
                                <br>The method returns a POJO with is just a 
linked-list of beans with name/description properties.
                        </p>    
                        <p class='bcode'>
-       <jk>public class</jk> RestServletGroupDefault <jk>extends</jk> 
RestServletDefault {
+       <jc>// The entire contents of the RestServletGroup class.</jc>
+       
+       <jk>public class</jk> RestServletGroup <jk>extends</jk> 
RestServletDefault {
        
                <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>, 
description=<js>"Child resources"</js>)
                <jk>public</jk> ChildResourceDescriptions 
getChildren(RestRequest req) {
@@ -6684,11 +6728,11 @@
                                to any class as long as it has one of the 
following constructors:
                        </p>
                        <ul>
-                               <li><code><jk>public</jk> 
T(RestContextBuilder)</code>
-                               <li><code><jk>public</jk> T()</code>
+                               <li class='jm'><code><jk>public</jk> T()</code>
+                               <li class='jm'><code><jk>public</jk> 
T(RestContextBuilder)</code>
                        </ul>
                                <p>
-                               The former constructor can be used to get 
access to the {@link org.apache.juneau.rest.RestContextBuilder} object to make
+                               The latter constructor can be used to get 
access to the {@link org.apache.juneau.rest.RestContextBuilder} object to make
                                any configurations to the resource before it's 
initialized.
                        </p>
                        <p>
@@ -7871,7 +7915,7 @@
        <ja>@RestResource</ja>(
                path=<js>"/urlEncodedForm"</js>
        )
-       <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> Resource {
+       <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> 
RestServletDefault {
 
                <jd>/** POST request handler */</jd>
                <ja>@RestMethod</ja>(name=<jsf>POST</jsf>, path=<js>"/"</js>)
@@ -8064,7 +8108,7 @@
        <h3 class='topic' onclick='toggle(this)'>7.10 - @Header</h3>
        <div class='topic'>
                <p>
-                       The {@link org.apache.juneau.rest.annotation.Header 
@Header} is used to retrieve request headers.
+                       The {@link org.apache.juneau.rest.annotation.Header 
@Header} annotation is used to retrieve request headers.
                </p>
                <h5 class='figure'>Example:</h5>
                <p class='bcode'>
@@ -8743,11 +8787,11 @@
                <p>
                        There are two distinct groups of variables:
                </p>
-               <ul>
-                       <li>Initialization-time variables.
+               <ul class='spaced-list'>
+                       <li><l>Initialization-time variables</l>
                                <br>These are variables that can be used in 
many of the annotations in {@link 
org.apache.juneau.rest.annotation.RestResource @RestResource}. 
                                <br>The {@link 
org.apache.juneau.rest.RestContext#getVarResolver()} method returns 
initialization-time variables only.
-                       <li>Request-time variables.
+                       <li><l>Request-time variables</l>
                                <br>These are variables that are available 
during HTTP-requests and can be used on annotation such as {@link 
org.apache.juneau.rest.annotation.HtmlDoc @HtmlDoc}. 
                                <br>{@link 
org.apache.juneau.rest.RestRequest#getVarResolverSession()} method returns 
initialization and request-time variables.
                </ul>
@@ -8761,53 +8805,89 @@
                                
<th>Module</th><th>Class</th><th>Pattern</th><th>Initialization<br>time</th><th>Request<br>time</th>
                        </tr>
                        <tr class='dark'>
-                               <td rowspan="6" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-svl</td>
+                               <td rowspan="11" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-svl</td>
                                <td>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar}</td>
-                               <td class='code'>$E{envVar[,defaultValue]}</td>
+                               <td class='code'>$E{key[,default]}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar}</td>
-                               <td 
class='code'>$S{systemProperty[,defaultValue]}</td>
+                               <td class='code'>$S{key[,default]}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='dark'>
-                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceVar}</td>
-                               <td class='code'>$CO{arg1[,arg2...]}</td>
+                               <td>{@link 
org.apache.juneau.svl.vars.ArgsVar}</td>
+                               <td class='code'>$A{key[,default]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.ManifestFileVar}</td>
+                               <td class='code'>$MF{key[,default]}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.svl.vars.IfVar}</td>
-                               <td 
class='code'>$IF{booleanArg,thenValue[,elseValue]}</td>
+                               <td class='code'>$IF{arg,then[,else]}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='dark dd'>
                                <td>{@link 
org.apache.juneau.svl.vars.SwitchVar}</td>
-                               <td 
class='code'>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</td>
+                               <td 
class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceVar}</td>
+                               <td class='code'>$CO{arg1[,arg2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.PatternMatchVar}</td>
+                               <td class='code'>$PM{arg,pattern}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.NotEmptyVar}</td>
+                               <td class='code'>$NE{arg}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.UpperCaseVar}</td>
+                               <td class='code'>$UC{arg}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.LowerCaseVar}</td>
+                               <td class='code'>$LC{arg}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='light dd'>
                                <td rowspan="1" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-config</td>
                                <td>{@link 
org.apache.juneau.config.vars.ConfigVar}</td>
-                               <td class='code'>$C{key[,defaultValue]}</td>
+                               <td class='code'>$C{key[,default]}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='dark'>
                                <td rowspan="14" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-rest-server</td>
                                <td>{@link 
org.apache.juneau.rest.vars.FileVar}</td>
-                               <td class='code'>$F{path[,defaultValue]}}</td>
+                               <td class='code'>$F{path[,default]}}</td>
                                <td 
style='text-align:center;font-weight:bold'>no</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.rest.vars.ServletInitParamVar}</td>
-                               <td class='code'>$I{name[,defaultValue]}</td>
+                               <td class='code'>$I{name[,default]}</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
@@ -8861,7 +8941,7 @@
                        </tr>
                        <tr class='dark'>
                                <td>{@link 
org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td>
-                               <td 
class='code'>$SA{contentType,key[,defaultValue]}</td>
+                               <td 
class='code'>$SA{contentType,key[,default]}</td>
                                <td 
style='text-align:center;font-weight:bold'>no</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
@@ -8879,27 +8959,11 @@
                        </tr>
                        <tr class='dark dd'>
                                <td>{@link 
org.apache.juneau.rest.vars.WidgetVar}</td>
-                               <td class='code'>$W{widgetName}</td>
+                               <td class='code'>$W{name}</td>
                                <td 
style='text-align:center;font-weight:bold'>no</td>
                                <td 
style='text-align:center;font-weight:bold'>yes</td>
                        </tr>
-                       <tr class='light'>
-                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-microservice-server</td>
-                               <td>{@link 
org.apache.juneau.microservice.vars.ArgsVar}</td>
-                               <td class='code'>$ARG{key[,defaultValue]}</td>
-                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
-                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
-                       </tr>
-                       <tr class='light dd'>
-                               <td>{@link 
org.apache.juneau.microservice.vars.ManifestFileVar}</td>
-                               <td class='code'>$MF{key[,defaultValue]}</td>
-                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
-                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
-                       </tr>
                </table>
-               <p>
-                       * = Only if extending from {@link 
org.apache.juneau.microservice.Resource}
-               <p>
        </div>
        
        <!-- 
========================================================================================================
 -->
@@ -8951,7 +9015,7 @@
                </p>
                <p>
                        The annotation itself can contain string variables.  
-                       <br>For example, the Microservice API {@link 
org.apache.juneau.microservice.Resource} class defines the 
+                       <br>For example, the Microservice API {@link 
org.apache.juneau.rest.RestServletDefault} class defines the 
                        location of the config file as a system property 
<l>"juneau.configFile"</l>:
                </p>
                <p class='bcode'>
@@ -9698,7 +9762,7 @@
                ),
                ...
        )
-       <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup 
{...}
+       <jk>public class</jk> RootResources <jk>extends</jk> 
RestServletJenaGroup {...}
                        </p>                    
                        <p>
                                The widget definition is shown below:
@@ -9808,7 +9872,7 @@
                                <js>"source: 
$C{Source/gitHub}/org/apache/juneau/examples/rest/$R{servletClassSimple}.java"</js>
                        },
        )
-       <jk>public class</jk> RootResources <jk>extends</jk> ResourceJenaGroup 
{...}
+       <jk>public class</jk> RootResources <jk>extends</jk> 
RestServletJenaGroup {...}
                        </p>
                        <p>
                                The <l>StyleMenuItem</l> is a widget that 
extends from {@link org.apache.juneau.rest.widget.MenuItemWidget}, a
@@ -10822,7 +10886,7 @@
                        ...
                }
        )
-       <jk>public class</jk> Root <jk>extends</jk> RestServletGroupDefault {
+       <jk>public class</jk> Root <jk>extends</jk> RestServletGroup {
                
                <jk>private final</jk> RestResourceResolver <jf>resolver</jf>;
                
@@ -10888,7 +10952,7 @@
                        <br>The following examples is pulled from the REST 
examples:
                </p>
                <p class='bcode'>
-       <jk>public class</jk> PredefinedLabelsResource <jk>extends</jk> 
Resource {
+       <jk>public class</jk> PredefinedLabelsResource <jk>extends</jk> 
RestServletDefault {
        
                <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>)
                <jk>public</jk> ResourceDescription[] getChildMethods() {
@@ -12220,14 +12284,6 @@
                                                <br>Starts up an 
externally-configured Jetty server, registers servlets, and sets up 
                                                other features such as logging. 
 
                                </ul>
-                       <li class='jc'>
-                               {@link org.apache.juneau.microservice.Resource} 
-                               - A subclass of <code>RestServletDefault</code> 
with support for manfest-file and args variables
-                               and configured to use the external INI file.
-                       <li class='jc'>
-                               {@link 
org.apache.juneau.microservice.ResourceGroup} 
-                               - A subclass of 
<code>RestServletGroupDefault</code> with support for manfest-file and args 
variables
-                               and configured to use the external INI file.
                </ul>
        </div>
        
@@ -12288,7 +12344,7 @@
                        LogsResource.<jk>class</jk>
                }
        )
-       <jk>public class</jk> RootResources <jk>extends</jk> ResourceGroup {
+       <jk>public class</jk> RootResources <jk>extends</jk> 
RestServletJenaGroup {
                <jc>// No code</jc>
        }
                                        </p>
@@ -12654,16 +12710,16 @@
        <ck>sameAsAnInt</ck> = <cv>$C{MySection/anInt}</cv>
        
        <cc># A command-line argument in the form "myarg=foo"</cc>
-       <ck>myArg</ck> = <cv>$ARG{myarg}</cv>
+       <ck>myArg</ck> = <cv>$A{myarg}</cv>
        
        <cc># The first command-line argument</cc>
-       <ck>firstArg</ck> = <cv>$ARG{0}</cv>
+       <ck>firstArg</ck> = <cv>$A{0}</cv>
 
        <cc># Look for system property, or env var if that doesn't exist, or 
command-line arg if that doesn't exist.</cc>
-       <ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}}</cv>
+       <ck>nested</ck> = <cv>$S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}</cv>
 
        <cc># A POJO with embedded variables</cc>
-       <ck>aBean2</ck> = <cv>{foo:'$ARG{0}',baz:$C{MySection/anInt}}</cv>
+       <ck>aBean2</ck> = <cv>{foo:'$A{0}',baz:$C{MySection/anInt}}</cv>
        
        </p>
        <p class='bcode'>
@@ -12693,9 +12749,9 @@
                        </p>
                        <ul class='doctree'>
                                <li class='jm'>{@link 
org.apache.juneau.microservice.Microservice#getConfig()} 
-                                       <br>Any <a class='doclink' 
href='#DefaultRestSvlVariables'>initialization-time variables</a> and 
<l>$ARG</l> and <l>$MF</l> variables can be used.
+                                       <br>Any <a class='doclink' 
href='#DefaultRestSvlVariables'>initialization-time variables</a> and <l>$A</l> 
and <l>$MF</l> variables can be used.
                                <li class='jm'>{@link 
org.apache.juneau.rest.RestContext#getConfig()} 
-                                       <br>Any <a class='doclink' 
href='#DefaultRestSvlVariables'>initialization-time variables</a> and 
<l>$ARG</l> and <l>$MF</l> variables can be used.
+                                       <br>Any <a class='doclink' 
href='#DefaultRestSvlVariables'>initialization-time variables</a> and <l>$A</l> 
and <l>$MF</l> variables can be used.
                                        <h5 class='figure'>Example usage:</h5>
                                        <p class='bcode'>
        <cc>#-------------------------------</cc>
@@ -12706,7 +12762,7 @@
                                </p>
                                <p class='bcode'>
        <ja>@RestResource</ja>(...)
-       <jk>public class</jk> MyHelloResource <jk>extends</jk> Resource {
+       <jk>public class</jk> MyHelloResource <jk>extends</jk> 
RestServletDefault {
                <jc>// Access config file when initializing fields.</jc>
                <jk>private</jk> String greeting = 
getConfig().getString(<js>"MyHelloResource/greeting"</js>); 
                
@@ -12725,7 +12781,7 @@
                                <li class='jm'>
                                        {@link 
org.apache.juneau.rest.RestRequest#getConfig()} 
                                        - An instance method to access it from 
inside a REST method.
-                                       <br>Any <a class='doclink' 
href='#DefaultRestSvlVariables'>initialization-time or request-time 
variables</a> and <l>$ARG</l> and <l>$MF</l> variables can be used.
+                                       <br>Any <a class='doclink' 
href='#DefaultRestSvlVariables'>initialization-time or request-time 
variables</a> and <l>$A</l> and <l>$MF</l> variables can be used.
                                        
                                        <h5 class='figure'>Example usage:</h5>
                                        <p class='bcode'>
@@ -12745,7 +12801,7 @@
                messages=<js>"nls/Messages"</js>,
                ...
        )
-       <jk>public class</jk> MyHelloResource <jk>extends</jk> Resource {
+       <jk>public class</jk> MyHelloResource <jk>extends</jk> 
RestServletDefault {
 
                <jd>/** Standard hello message. */</jd>
                <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, 
path=<js>"/{person}"</js>)
@@ -12835,7 +12891,7 @@
                        LogsResource.<jk>class</jk>
                }
        )
-       <jk>public class</jk> RootResources <jk>extends</jk> ResourceGroup {
+       <jk>public class</jk> RootResources <jk>extends</jk> 
RestServletJenaGroup {
                <jc>// No code! </jc>
        }
                </p>
@@ -12851,7 +12907,7 @@
                        <li>
                                The <l>children</l> annotation make up the list 
of child resources.
                                <br>These child resources can be anything that 
extends from <l>Servlet</l>, although usually
-                               they will be subclasses of {@link 
org.apache.juneau.microservice.Resource} or other resource groups.
+                               they will be subclasses of {@link 
org.apache.juneau.rest.RestServletDefault} or other resource groups.
                </ul>
                <p>
                        If you click the <l>helloWorld</l> link in your 
application, you'll get a simple hello world message:
@@ -12866,7 +12922,7 @@
                title=<js>"Hello World example"</js>,
                description=<js>"Simplest possible REST resource"</js>
        )
-       <jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource {
+       <jk>public class</jk> HelloWorldResource <jk>extends</jk> 
RestServletDefault {
        
                <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>)
                <jk>public</jk> String sayHello() {
@@ -12874,11 +12930,6 @@
                }
        }               
                </p>
-               <p>
-                       The {@link org.apache.juneau.microservice.Resource} and 
{@link org.apache.juneau.microservice.ResourceGroup} 
-                       classes are powerful servlets designed specifically for 
creating REST APIs using nothing more than serialized 
-                       and parsed POJOs.
-               </p>
        </div>
 
        <!-- 
===========================================================================================================
 -->
@@ -13084,18 +13135,8 @@
                                                <br>Defines default serializers 
and parsers, and OPTIONs page logic.
                                                <ul>
                                                        <li class='jac'>
-                                                               {@link 
org.apache.juneau.rest.RestServletGroupDefault 
org.apache.juneau.rest.RestServletGroupDefault}
+                                                               {@link 
org.apache.juneau.rest.RestServletGroup org.apache.juneau.rest.RestServletGroup}
                                                                <br>Specialized 
subclass for grouping other resources
-                                                               <ul>
-                                                                       <li 
class='jac'>
-                                                                               
{@link org.apache.juneau.microservice.ResourceGroup 
org.apache.juneau.microservice.ResourceGroup}
-                                                                               
<br>Specialized subclass when using the Microservice API.
-                                                                               
<ul>
-                                                                               
        <li class='jc'>
-                                                                               
                <code>org.apache.juneau.rest.samples.RootResources</code>
-                                                                               
</ul>
-                                                                       </li>
-                                                               </ul>
                                                        </li>
                                                </ul>
                                        </li>
@@ -13159,7 +13200,7 @@
                        ShutdownResource.<jk>class</jk>                 
                }
        )
-       <jk>public class</jk> RootResources <jk>extends</jk> ResourceGroup {
+       <jk>public class</jk> RootResources <jk>extends</jk> 
RestServletJenaGroup {
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L;
        }
                </p>
@@ -13194,7 +13235,7 @@
                <h5 class='figure'>HelloWorldResource.java</h5>
                <p class='bcode'>
        <ja>@RestResource</ja>(messages=<js>"nls/HelloWorldResource"</js>, 
path=<js>"/helloWorld"</js>)
-       <jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource {
+       <jk>public class</jk> HelloWorldResource <jk>extends</jk> 
RestServletDefault {
                </p>
                <p>
                        It should be noted that child resources do not need to 
be defined this way.  
@@ -13248,7 +13289,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> HelloWorldResource <jk>extends</jk> Resource { 
+       <jk>public class</jk> HelloWorldResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jd>/** GET request handler */</jd> 
@@ -13279,15 +13320,6 @@
                                        <li class='jac'>
                                                {@link 
org.apache.juneau.rest.RestServletDefault 
org.apache.juneau.rest.RestServletDefault}
                                                <br>Defines default serializers 
and parsers, and OPTIONs page logic.
-                                               <ul>
-                                                       <li class='jac'>
-                                                               {@link 
org.apache.juneau.microservice.Resource org.apache.juneau.microservice.Resource}
-                                                               <br>Specialized 
subclass when using the Microservice API.
-                                                               <ul>
-                                                                       <li 
class='jc'><code>org.apache.juneau.rest.samples.HelloWorldResource</code>
-                                                               </ul>
-                                                       </li>
-                                               </ul>
                                        </li>
                                </ul>
                        </li>
@@ -13341,7 +13373,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> MethodExampleResource <jk>extends</jk> Resource { 
+       <jk>public class</jk> MethodExampleResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jd>/** Example GET request that redirects to our example 
method */</jd> 
@@ -13646,7 +13678,7 @@
                path=<js>"/urlEncodedForm"</js>, 
                messages=<js>"nls/UrlEncodedFormResource"</js>
        ) 
-       <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> Resource 
{ 
+       <jk>public class</jk> UrlEncodedFormResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jd>/** GET request handler */</jd> 
@@ -13870,7 +13902,7 @@
                        EnumerationSwap.<jk>class</jk>
                }
        )
-       <jk>public class</jk> RequestEchoResource <jk>extends</jk> Resource {
+       <jk>public class</jk> RequestEchoResource <jk>extends</jk> 
RestServletDefault {
        
                <jd>/** GET request handler */</jd>
                <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/*"</js>, 
converters={Queryable.<jk>class</jk>,Traversable.<jk>class</jk>})
@@ -14420,7 +14452,7 @@
                        url:'http://juneau.apache.org'}}]"</js>,
                externalDocs=<js>"{description:'Home 
page',url:'http://juneau.apache.org'}"</js>
        ) 
-       <jk>public class</jk> AddressBookResource <jk>extends</jk> ResourceJena 
{ 
+       <jk>public class</jk> AddressBookResource <jk>extends</jk> 
RestServletJenaDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jc>// The in-memory address book</jc> 
@@ -15343,7 +15375,7 @@
                }, 
                encoders=GzipEncoder.<jk>class</jk> 
        ) 
-       <jk>public class</jk> AtomFeedResource <jk>extends</jk> ResourceJena { 
+       <jk>public class</jk> AtomFeedResource <jk>extends</jk> 
RestServletJenaDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
        
                <jk>private</jk> Feed <jf>feed</jf>; <jc>// The root resource 
object</jc> 
@@ -15452,7 +15484,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> DockerRegistryResource <jk>extends</jk> Resource 
{ 
+       <jk>public class</jk> DockerRegistryResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jc>// Get registry URL from examples.cfg file.</jc>
@@ -15537,7 +15569,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> TumblrParserResource <jk>extends</jk> Resource { 
+       <jk>public class</jk> TumblrParserResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
        
                <ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>) 
@@ -15774,7 +15806,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> JsonSchemaResource <jk>extends</jk> ResourceJena 
{ 
+       <jk>public class</jk> JsonSchemaResource <jk>extends</jk> 
RestServletJenaDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jk>private</jk> Schema schema; <jc>// The schema document</jc> 
@@ -15865,7 +15897,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> SqlQueryResource <jk>extends</jk> Resource { 
+       <jk>public class</jk> SqlQueryResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jk>private</jk> Config <jf>cf</jf> = getConfig(); 
@@ -16060,7 +16092,7 @@
                        }
                )
        ) 
-       <jk>public class</jk> ConfigResource <jk>extends</jk> Resource { 
+       <jk>public class</jk> ConfigResource <jk>extends</jk> 
RestServletDefault { 
                <jk>private static final long</jk> <jsf>serialVersionUID</jsf> 
= 1L; 
                
                <jd>/** 
@@ -16521,6 +16553,12 @@
                                        <li>{@link 
org.apache.juneau.svl.vars.UpperCaseVar}
                                        <li>{@link 
org.apache.juneau.svl.vars.LowerCaseVar}
                                </ul>
+                       <li>
+                               Variables moved from <l>juneau-microservice</l>:
+                               <ul>
+                                       <li>{@link 
org.apache.juneau.svl.vars.ArgsVar}
+                                       <li>{@link 
org.apache.juneau.svl.vars.ManifestFileVar}
+                               </ul>
                </ul>
                
                <h5 class='topic'>juneau-config</h5>
@@ -16530,6 +16568,23 @@
                        <li>
                                <code>Config.write(Reader,boolean)</code> 
method renamed to {@link org.apache.juneau.config.Config#load(Reader,boolean)}.
                </ul>
+
+               <h5 class='topic'>juneau-rest-server</h5>
+               <ul class='spaced-list'>
+                       <li>
+                               <code>RestServletGroupDefault</code> renamed to 
{@link org.apache.juneau.rest.RestServletGroup}.
+               </ul>
+
+               <h5 class='topic'>juneau-microservice</h5>
+               <ul class='spaced-list'>
+                       <li>
+                               <code>Resource</code> and 
<code>ResourceGroup</code> classes removed.
+                               <br>{@link 
org.apache.juneau.rest.RestServletDefault} and {@link 
org.apache.juneau.rest.RestServletGroup} can be used instead.
+                       <li>
+                               <code>ResourceJena</code> and 
<code>ResourceJenaGroup</code> classes rename to
+                               {@link 
org.apache.juneau.microservice.RestServletJenaDefault} and {@link 
org.apache.juneau.microservice.RestServletJenaGroup} can be used instead.
+                               
+               </ul>
        </div>
        
        <!-- 
===========================================================================================================
 -->
@@ -16912,7 +16967,7 @@
                                instead of <code>close()</code> on the stream.
                        <li>
                                Added the following annotations to the {@link 
org.apache.juneau.rest.RestServletDefault} class
-                               (which were previously defined on the {@link 
org.apache.juneau.microservice.Resource} class):
+                               (which were previously defined on the 
<code><del>Resource</del></code> class):
                                <p class='bcode'>
        <ja>@RestResource</ja>(
                htmldoc=<ja>@HtmlDoc</ja>(
@@ -19448,14 +19503,14 @@
                                </ul>
                        <li>Eliminated 
<code>org.apache.juneau.microservice.Main</code> class.  This is replaced by
                                the microservice classes defined above.
-                       <li>{@link org.apache.juneau.microservice.Resource} and 
{@link org.apache.juneau.microservice.ResourceGroup}
+                       <li><code><del>Resource</del></code> and 
<code><del>ResourceGroup</del></code>
                                classes now support the following new string 
variables:
                                <ul>
-                                       <li><js>"$ARG{key,default}""</js> - 
Command line arguments.
+                                       <li><js>"$A{key,default}""</js> - 
Command line arguments.
                                        <li><js>"$MF{key,default}""</js> - 
Manifest file entries.
                                </ul> 
                        <li>CSS stylesheet now configurable through config file 
entry <js>"REST/stylesheet"</js>.
-                       <li>New {@link 
org.apache.juneau.microservice.ResourceJena} class if you want your REST 
interface to support RDF.
+                       <li>New {@link 
org.apache.juneau.microservice.RestServletJenaDefault} class if you want your 
REST interface to support RDF.
                        <li>Eliminated the following classes:
                                <ul>
                                        
<li><code>org.apache.juneau.microservice.RootResource</code>
@@ -19741,7 +19796,7 @@
        <ja>@Property</ja>(name=<jsf>HTMLDOC_navlinks</jsf>, 
value=<js>"{back:'$R{servletURI}"</js>),
        <ja>@Property</ja>(name=<jsf>HTMLDOC_description</jsf>, 
value=<js>"Resource options"</js>)
                                </p>
-                       <li>New {@link 
org.apache.juneau.rest.RestServletGroupDefault} class.
+                       <li>New {@link org.apache.juneau.rest.RestServletGroup} 
class.
                        <li>Removed 
<code>RestServletProperties.REST_trimTrailingUriSlashes</code> and 
<code>RestServletProperties.REST_pathInfoBlankForNull</code>. 
                        <li>New annotations for providing labels and 
descriptions.  Useful if you don't plan on having to support other languages, 
so you don't 
                                want to provide labels in resource bundles.
diff --git a/juneau-doc/src/main/javadoc/resources/juneau-doc.css 
b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
index 30572bd..260eec2 100755
--- a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
+++ b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
@@ -202,6 +202,11 @@ ul.toc div,
        padding-left: 5px;
 }
 
+p.toc2 {
+    background-color: #dee3e950;
+    border-radius: 0px 15px 15px 0px;
+}
+
 /* Linear gradients */
 
 /* Light-colored background headers */
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
index a2f73f5..ce46f11 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/AtomFeedResource.java
@@ -13,10 +13,9 @@
 package org.apache.juneau.examples.rest;
 
 import static org.apache.juneau.dto.atom.AtomBuilder.*;
-import static org.apache.juneau.html.HtmlDocSerializer.*;
+import static org.apache.juneau.http.HttpMethodName.*;
 import static org.apache.juneau.jena.RdfCommon.*;
 import static org.apache.juneau.jena.RdfSerializer.*;
-import static org.apache.juneau.http.HttpMethodName.*;
 
 import java.net.*;
 
@@ -53,7 +52,7 @@ import org.apache.juneau.rest.widget.*;
        },
        encoders=GzipEncoder.class
 )
-public class AtomFeedResource extends ResourceJena {
+public class AtomFeedResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        private Feed feed;     // The root resource object
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
index 72b77e9..e784d22 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/CodeFormatterResource.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.dto.html5.HtmlBuilder.*;
 import static org.apache.juneau.http.HttpMethodName.*;
 
 import org.apache.juneau.dto.html5.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
@@ -45,7 +44,7 @@ import org.apache.juneau.rest.annotation.*;
        )
 )
 @SuppressWarnings({"serial"})
-public class CodeFormatterResource extends Resource {
+public class CodeFormatterResource extends RestServletDefault {
 
        /** [GET /] - Display query entry page. */
        @RestMethod(name=GET, path="/")
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
index 1a83c90..0f438c2 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
@@ -12,18 +12,17 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.examples.rest;
 
-import static org.apache.juneau.rest.annotation.HookEvent.*;
 import static java.util.logging.Level.*;
 import static javax.servlet.http.HttpServletResponse.*;
-import static org.apache.juneau.html.HtmlDocSerializer.*;
+import static org.apache.juneau.html.HtmlSerializer.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.rest.annotation.HookEvent.*;
 
 import java.io.*;
 import java.net.*;
 import java.util.*;
 import java.util.logging.*;
 
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
@@ -57,7 +56,7 @@ import org.apache.juneau.utils.*;
                @Property(name="allowPuts", value="false")
        }
 )
-public class DirectoryResource extends Resource {
+public class DirectoryResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        private File rootDir;     // The root directory
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
index 8ba0892..41cf2ac 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
@@ -12,13 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.examples.rest;
 
-import static org.apache.juneau.rest.annotation.HookEvent.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.rest.annotation.HookEvent.*;
 
 import java.util.*;
 
 import org.apache.juneau.config.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.*;
@@ -41,7 +40,7 @@ import org.apache.juneau.rest.labels.*;
                aside="$F{resources/DockerRegistryResourceAside.html}"
        )
 )
-public class DockerRegistryResource extends Resource {
+public class DockerRegistryResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        // Get registry URL from examples.cfg file.
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
index b34e505..fc2706d 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/HelloWorldResource.java
@@ -14,7 +14,7 @@ package org.apache.juneau.examples.rest;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
@@ -38,7 +38,7 @@ import org.apache.juneau.rest.annotation.*;
                }
        )
 )
-public class HelloWorldResource extends Resource {
+public class HelloWorldResource extends RestServletDefault {
 
        /** GET request handler */
        @RestMethod(name=GET, path="/*", summary="Responds with \"Hello 
world!\"")
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
index c6be826..808d674 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/JsonSchemaResource.java
@@ -46,7 +46,7 @@ import org.apache.juneau.rest.widget.*;
                }
        )
 )
-public class JsonSchemaResource extends ResourceJena {
+public class JsonSchemaResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        private Schema schema;     // The schema document
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
index 28b5532..23d5bae 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
@@ -17,10 +17,8 @@ import static org.apache.juneau.http.HttpMethodName.*;
 import java.util.*;
 
 import org.apache.juneau.http.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.annotation.Method;
 import org.apache.juneau.rest.labels.*;
 import org.apache.juneau.utils.*;
 
@@ -44,7 +42,7 @@ import org.apache.juneau.utils.*;
                }
        )
 )
-public class MethodExampleResource extends Resource {
+public class MethodExampleResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        private static final UUID SAMPLE_UUID = 
UUID.fromString("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
index 7c355e7..8ff2d7d 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.examples.rest;
 
 import static org.apache.juneau.dto.html5.HtmlBuilder.*;
-import static org.apache.juneau.rest.annotation.HookEvent.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.rest.annotation.HookEvent.*;
 
 import java.util.*;
 import java.util.Map;
@@ -68,7 +68,7 @@ import org.apache.juneau.transforms.*;
        ),
        staticFiles={"htdocs:htdocs"}
 )
-public class PetStoreResource extends ResourceJena {
+public class PetStoreResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        // Our database.
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
index 989ee65..817410f 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
@@ -19,13 +19,11 @@ import static org.apache.juneau.http.HttpMethodName.*;
 import java.awt.image.*;
 import java.io.*;
 import java.net.*;
-import java.net.URI;
 import java.util.*;
 
 import javax.imageio.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
@@ -57,7 +55,7 @@ import org.apache.juneau.serializer.*;
                @Property(name=HTML_uriAnchorText, value="SERVLET_RELATIVE")
        }
 )
-public class PhotosResource extends Resource {
+public class PhotosResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        // Our cache of photos
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
index e2c9548..752ecbc 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
@@ -16,7 +16,7 @@ import static org.apache.juneau.http.HttpMethodName.*;
 
 import org.apache.juneau.examples.addressbook.*;
 import org.apache.juneau.html.annotation.*;
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.labels.*;
 import org.apache.juneau.rest.widget.*;
@@ -42,7 +42,7 @@ import org.apache.juneau.rest.widget.*;
                }
        )
 )
-public class PredefinedLabelsResource extends Resource {
+public class PredefinedLabelsResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        @RestMethod(name=GET, path="/")
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
index 7a528a1..f163091 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
@@ -12,12 +12,11 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.examples.rest;
 
-import static org.apache.juneau.html.HtmlDocSerializer.*;
+import static org.apache.juneau.serializer.Serializer.*;
 
 import javax.servlet.*;
 import javax.servlet.http.*;
 
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
@@ -64,7 +63,7 @@ import org.apache.juneau.transforms.*;
                EnumerationSwap.class
        }
 )
-public class RequestEchoResource extends Resource {
+public class RequestEchoResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        /** GET request handler */
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index fcef063..1816511 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -81,7 +81,7 @@ import org.apache.juneau.rest.widget.*;
                ShutdownResource.class
        }
 )
-public class RootResources extends ResourceJenaGroup {
+public class RootResources extends RestServletJenaGroup {
        // IMPORTANT!  If you don't need RDF support, change the parent class 
to ResourceGroup.
        // It allows you to remove the Jena prerequisite.
 
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
index bde41df..dfc97a0 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SqlQueryResource.java
@@ -14,9 +14,9 @@ package org.apache.juneau.examples.rest;
 
 import static javax.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.dto.html5.HtmlBuilder.*;
+import static org.apache.juneau.http.HttpMethodName.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.rest.annotation.HookEvent.*;
-import static org.apache.juneau.http.HttpMethodName.*;
 
 import java.sql.*;
 import java.util.*;
@@ -24,7 +24,6 @@ import java.util.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.dto.*;
 import org.apache.juneau.dto.html5.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
@@ -56,7 +55,7 @@ import org.apache.juneau.rest.widget.*;
                }
        )
 )
-public class SqlQueryResource extends Resource {
+public class SqlQueryResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        private String driver, connectionUrl;
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
index 2b8e8eb..a62f997 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
@@ -13,15 +13,14 @@
 package org.apache.juneau.examples.rest;
 
 import static org.apache.juneau.dto.html5.HtmlBuilder.*;
-import static org.apache.juneau.html.HtmlDocSerializer.*;
 import static org.apache.juneau.http.HttpMethodName.*;
+import static org.apache.juneau.serializer.Serializer.*;
 
 import java.util.*;
 import java.util.Map;
 
 import org.apache.juneau.dto.html5.*;
 import org.apache.juneau.encoders.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
@@ -88,7 +87,7 @@ import org.apache.juneau.rest.widget.*;
                externalDocs="{description:'Home 
page',url:'http://juneau.apache.org'}"
        ) 
 )
-public class SystemPropertiesResource extends Resource {
+public class SystemPropertiesResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        @RestMethod(
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
index bbbb80b..b05cba5 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TumblrParserResource.java
@@ -15,9 +15,9 @@ package org.apache.juneau.examples.rest;
 import static org.apache.juneau.http.HttpMethodName.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.dto.LinkString;
+import org.apache.juneau.dto.*;
 import org.apache.juneau.dto.html5.*;
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.*;
 
@@ -40,7 +40,7 @@ import org.apache.juneau.rest.client.*;
                }
        )
 )
-public class TumblrParserResource extends Resource {
+public class TumblrParserResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        private static final int MAX_POSTS = 100;
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
index 0544a24..3f6a5af 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/UrlEncodedFormResource.java
@@ -19,7 +19,6 @@ import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.dto.html5.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
@@ -50,7 +49,7 @@ import org.apache.juneau.transforms.*;
                }
        )
 )
-public class UrlEncodedFormResource extends Resource {
+public class UrlEncodedFormResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        /** GET request handler */
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
index 8dd6cf2..bf67847 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
@@ -117,7 +117,7 @@ import org.apache.juneau.utils.*;
                externalDocs="{description:'Home 
page',url:'http://juneau.apache.org'}"
        )
 )
-public class AddressBookResource extends ResourceJena {
+public class AddressBookResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        // The in-memory address book
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
index 993eb17..9d609bd 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -31,9 +31,9 @@ import org.apache.juneau.config.vars.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.microservice.console.*;
 import org.apache.juneau.microservice.resources.*;
-import org.apache.juneau.microservice.vars.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.svl.vars.*;
+import org.apache.juneau.svl.vars.ManifestFileVar;
 import org.apache.juneau.utils.*;
 
 /**
@@ -150,7 +150,8 @@ public abstract class Microservice implements 
ConfigEventListener {
                Console c = System.console();
                consoleReader = new Scanner(c == null ? new 
InputStreamReader(System.in) : c.reader());
                consoleWriter = c == null ? new PrintWriter(System.out, true) : 
c.writer();
-               this.args = new Args(args);
+               setArgs(new Args(args));
+               setManifest(this.getClass());
        }
        
        private static void setInstance(Microservice m) {
@@ -218,9 +219,22 @@ public abstract class Microservice implements 
ConfigEventListener {
         * </ol>
         * 
         * @param mf The manifest file of this microservice.
+        * @return This object (for method chaining).
+        */
+       public Microservice setManifest(ManifestFile mf) {
+               this.mf = mf;
+               ManifestFileVar.init(this.mf);
+               return this;
+       }
+
+       /**
+        * Shortcut for calling <code>setManifest(<jk>new</jk> 
ManifestFile(mf))</code>.
+        * 
+        * @param mf The manifest file of this microservice.
+        * @return This object (for method chaining).
         */
-       public void setManifest(Manifest mf) {
-               this.mf = new ManifestFile(mf);
+       public Microservice setManifest(Manifest mf) {
+               return setManifest(new ManifestFile(mf));
        }
 
        /**
@@ -232,18 +246,18 @@ public abstract class Microservice implements 
ConfigEventListener {
         */
        public Microservice setManifestContents(String...contents) throws 
IOException {
                String s = StringUtils.join(contents, "\n") + "\n";
-               this.mf = new ManifestFile(new Manifest(new 
ByteArrayInputStream(s.getBytes("UTF-8"))));
-               return this;
+               return setManifest(new ManifestFile(new Manifest(new 
ByteArrayInputStream(s.getBytes("UTF-8")))));
        }
 
        /**
         * Same as {@link #setManifest(Manifest)} except specified through a 
{@link File} object.
         * 
         * @param f The manifest file of this microservice.
+        * @return This object (for method chaining).
         * @throws IOException If a problem occurred while trying to read the 
manifest file.
         */
-       public void setManifest(File f) throws IOException {
-               this.mf = new ManifestFile(f);
+       public Microservice setManifest(File f) throws IOException {
+               return setManifest(new ManifestFile(f));
        }
 
        /**
@@ -251,10 +265,11 @@ public abstract class Microservice implements 
ConfigEventListener {
         * specified class is contained within.
         * 
         * @param c The class whose jar file contains the manifest to use for 
this microservice.
+        * @return This object (for method chaining).
         * @throws IOException If a problem occurred while trying to read the 
manifest file.
         */
-       public void setManifest(Class<?> c) throws IOException {
-               this.mf = new ManifestFile(c);
+       public Microservice setManifest(Class<?> c) throws IOException {
+               return setManifest(new ManifestFile(c));
        }
 
        /**
@@ -262,15 +277,19 @@ public abstract class Microservice implements 
ConfigEventListener {
         * 
         * <p>
         * The default implementation resolves the following variables:
-        * <ul>
-        *      <li><code>$S{key}</code>, <code>$S{key,default}</code> - System 
properties.
-        *      <li><code>$E{key}</code>, <code>$E{key,default}</code> - 
Environment variables.
-        *      <li><code>$C{key}</code>, <code>$C{key,default}</code> - Config 
file entries.
-        *      <li><code>$MF{key}</code>, <code>$MF{key,default}</code> - 
Manifest file entries.
-        *      <li><code>$ARG{key}</code>, <code>$ARG{key,default}</code> - 
Command-line arguments.
-        *      <li><code>$IF{boolArg,thenValue}</code>, 
<code>$IF{boolArg,thenValue,elseValue}</code> - If-block logic.
-        *      <li><code>$SW{stringArg,pattern,thenVal...}</code>, 
-        *              <code>$SW{stringArg,pattern,thenVal,elseVal...}</code>  
- Switch-block logic.
+        * <ul class='doctree'>
+        *      <li class='jc'>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar} - <code>$S{key[,default]}</code>
+        *      <li class='jc'>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar} - <code>$E{key[,default]}</code>
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.ArgsVar} - 
<code>$A{key[,default]}</code>
+        *      <li class='jc'>{@link 
org.apache.juneau.svl.vars.ManifestFileVar} - <code>$MF{key[,default]}</code>
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.IfVar} - 
<code>$IF{arg,then[,else]}</code>
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.SwitchVar} - 
<code>$SW{arg,pattern1:then1[,pattern2:then2...]}</code>
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.CoalesceVar} - 
<code>$CO{arg1[,arg2...]}</code>
+        *      <li class='jc'>{@link 
org.apache.juneau.svl.vars.PatternMatchVar} - <code>$PM{arg,pattern}</code> 
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.NotEmptyVar} - 
<code>$NE{arg}</code>
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.UpperCaseVar} 
- <code>$UC{arg}</code>
+        *      <li class='jc'>{@link org.apache.juneau.svl.vars.LowerCaseVar} 
- <code>$LC{arg}</code>
+        *      <li class='jc'>{@link org.apache.juneau.config.vars.ConfigVar} 
- <code>$C{key[,default]}</code>
         * </ul>
         * 
         * <p>
@@ -309,9 +328,7 @@ public abstract class Microservice implements 
ConfigEventListener {
        protected VarResolverBuilder createVarResolver() {
                VarResolverBuilder b = new VarResolverBuilder()
                        .defaultVars()
-                       .vars(ConfigVar.class, ManifestFileVar.class, 
ArgsVar.class, SwitchVar.class, IfVar.class)
-                       .contextObject(ManifestFileVar.SESSION_manifest, mf)
-                       .contextObject(ArgsVar.SESSION_args, args);
+                       .vars(ConfigVar.class, SwitchVar.class, IfVar.class);
                if (cf != null)
                        b.contextObject(ConfigVar.SESSION_config, cf);
                return b;
@@ -333,6 +350,18 @@ public abstract class Microservice implements 
ConfigEventListener {
        }
 
        /**
+        * Sets the arguments for this microservice.
+        * 
+        * @param args The arguments for this microservice.
+        * @return This object (for method chaining).
+        */
+       public Microservice setArgs(Args args) {
+               this.args = args;
+               ArgsVar.init(args);
+               return this;
+       }
+
+       /**
         * Returns the external INI-style configuration file that can be used 
to configure your microservice.
         * 
         * <p>
@@ -394,16 +423,16 @@ public abstract class Microservice implements 
ConfigEventListener {
         *      <ck>sameAsAnInt</ck> = $C{MySection/anInt}
         * 
         *      <cc># A command-line argument in the form "myarg=foo"</cc>
-        *      <ck>myArg</ck> = $ARG{myarg}
+        *      <ck>myArg</ck> = $A{myarg}
         * 
         *      <cc># The first command-line argument</cc>
-        *      <ck>firstArg</ck> = $ARG{0}
+        *      <ck>firstArg</ck> = $A{0}
         * 
         *      <cc># Look for system property, or env var if that doesn't 
exist, or command-line arg if that doesn't exist.</cc>
-        *      <ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$ARG{0}}}
+        *      <ck>nested</ck> = $S{mySystemProperty,$E{MY_ENV_VAR,$A{0}}}
         * 
         *      <cc># A POJO with embedded variables</cc>
-        *      <ck>aBean2</ck> = {foo:'$ARG{0}',baz:$C{MySection/anInt}}
+        *      <ck>aBean2</ck> = {foo:'$A{0}',baz:$C{MySection/anInt}}
         * </p>
         * 
         * <p class='bcode'>
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
deleted file mode 100755
index c0d7014..0000000
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import static org.apache.juneau.rest.annotation.HookEvent.*;
-
-import org.apache.juneau.microservice.vars.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Superclass for all REST resources.
- * 
- * <p>
- * In additional to the functionality of the {@link RestServletDefault} group,
- * augments the {@link RestContext#getVarResolver()} method with the following 
additional variable types:
- * <ul class='spaced-list'>
- *     <li>
- *             <code class='snippet'>$ARG{...}</code> - Command line arguments 
pulled from {@link Microservice#getArgs()}.
- *             
- *             <h5 class='figure'>Example:</h5>
- *             <p class='bcode'>
- *     String firstArg = request.getVarResolver().resolve(<js>"$ARG{0}"</js>); 
 <jc>// First argument.</jc>
- *     String namedArg = 
request.getVarResolver().resolve(<js>"$ARG{myarg}"</js>);  <jc>// Named 
argument (e.g. "myarg=foo"). </jc>
- *             </p>
- *     <li>
- *             <code class='snippet'>$MF{...}</code> - Manifest file entries 
pulled from {@link Microservice#getManifest()}.
- *             
- *             <h5 class='figure'>Example:</h5>
- *             <p class='bcode'>
- *     String mainClass = 
request.getVarResolver().resolve(<js>"$MF{Main-Class}"</js>);  <jc>// Main 
class. </jc>
- *             </p>
- * </ul>
- */
-@SuppressWarnings("serial")
-@RestResource
-public abstract class Resource extends RestServletDefault {
-
-       /**
-        * Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.
-        * 
-        * @param builder The resource config.
-        * @throws Exception
-        */
-       @RestHook(INIT) 
-       public void addConfigVars(RestContextBuilder builder) throws Exception {
-               Microservice m = Microservice.getInstance();
-               if (m != null) {
-                       builder
-                               .vars(ArgsVar.class, ManifestFileVar.class)
-                               .varContextObject(ArgsVar.SESSION_args, 
m.getArgs())
-                               
.varContextObject(ManifestFileVar.SESSION_manifest, m.getManifest());
-               }
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
deleted file mode 100755
index 3b2da75..0000000
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import static org.apache.juneau.rest.annotation.HookEvent.*;
-
-import org.apache.juneau.microservice.vars.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Superclass for all REST resource groups.
- * 
- * <p>
- * In additional to the functionality of the {@link RestServletGroupDefault} 
group,
- * augments the {@link RestContext#getVarResolver()} method with the following 
additional variable types:
- * <ul class='spaced-list'>
- *     <li>
- *             <jk>$ARG{...}</jk> - Command line arguments.
- *             <br>Resolves values from {@link Microservice#getArgs()}.
- *             
- *             <h5>Example:</h5>
- *             <p class='bcode'>
- *     String firstArg = request.getVarResolver().resolve(<js>"$ARG{0}"</js>); 
 <jc>// First argument.</jc>
- *     String namedArg = 
request.getVarResolver().resolve(<js>"$ARG{myarg}"</js>);  <jc>// Named 
argument (e.g. "myarg=foo"). </jc>
- *             </p>
- *     <li>
- *             <jk>$MF{...}</jk> - Manifest file entries.
- *             
- *             <h5>Example:</h5>
- *             <p class='bcode'>
- *     String mainClass = 
request.getVarResolver().resolve(<js>"$MF{Main-Class}"</js>);  <jc>// Main 
class. </jc>
- *             </p>
- * </ul>
- */
-@SuppressWarnings("serial")
-@RestResource
-public abstract class ResourceGroup extends RestServletGroupDefault {
-
-       /**
-        * Initializes the registry URL and rest clent.
-        * 
-        * @param builder The resource config.
-        * @throws Exception
-        */
-       @RestHook(INIT) 
-       public void addConfigVars(RestContextBuilder builder) throws Exception {
-               Microservice m = Microservice.getInstance();
-               if (m != null) {
-                       builder
-                               .vars(ArgsVar.class, ManifestFileVar.class)
-                               .varContextObject(ArgsVar.SESSION_args, 
m.getArgs())
-                               
.varContextObject(ManifestFileVar.SESSION_manifest, m.getManifest());
-               }
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
deleted file mode 100644
index 6b99e1e..0000000
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.microservice;
-
-import static org.apache.juneau.rest.annotation.HookEvent.*;
-
-import org.apache.juneau.html.*;
-import org.apache.juneau.jena.*;
-import org.apache.juneau.microservice.vars.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * Superclass for all REST resource groups.
- * 
- * <p>
- * In additional to the functionality of the {@link RestServletGroupDefault} 
group,
- * augments the {@link RestContext#getVarResolver()} method with the following 
additional variable types:
- * <ul class='spaced-list'>
- *     <li>
- *             <jk>$ARG{...}</jk> - Command line arguments.
- *             <br>Resolves values from {@link Microservice#getArgs()}.
- *             
- *             <h5>Example:</h5>
- *             <p class='bcode'>
- *     String firstArg = request.getVarResolver().resolve(<js>"$ARG{0}"</js>); 
 <jc>// First argument.</jc>
- *     String namedArg = 
request.getVarResolver().resolve(<js>"$ARG{myarg}"</js>);  <jc>// Named 
argument (e.g. "myarg=foo"). </jc>
- *             </p>
- *     <li>
- *             <jk>$MF{...}</jk> - Manifest file entries.
- *             
- *             <h5>Example:</h5>
- *             <p class='bcode'>
- *     String mainClass = 
request.getVarResolver().resolve(<js>"$MF{Main-Class}"</js>);  <jc>// Main 
class. </jc>
- *             </p>
- * </ul>
- */
-@SuppressWarnings("serial")
-@RestResource(
-       htmldoc=@HtmlDoc(
-               navlinks={
-                       "up: request:/..",
-                       "options: servlet:/?method=OPTIONS"
-               }
-       ),
-       config="$S{juneau.configFile}",
-       serializers={
-               HtmlDocSerializer.class,  // HTML must be listed first because 
Internet Explore does not include text/html in their Accept header.
-               RdfSerializer.Xml.class,
-               RdfSerializer.XmlAbbrev.class,
-               RdfSerializer.Turtle.class,
-               RdfSerializer.NTriple.class,
-               RdfSerializer.N3.class
-       },
-       parsers={
-               RdfParser.Xml.class,
-               RdfParser.Turtle.class,
-               RdfParser.NTriple.class,
-               RdfParser.N3.class
-       }
-)
-public abstract class ResourceJenaGroup extends RestServletGroupDefault {
-
-       /**
-        * Add <code>$ARGS</code> and <code>$MF</code> variable resolvers.
-        * 
-        * @param builder The resource config.
-        * @throws Exception
-        */
-       @RestHook(INIT) 
-       public void addConfigVars(RestContextBuilder builder) throws Exception {
-               Microservice m = Microservice.getInstance();
-               if (m != null) {
-                       builder
-                               .vars(ArgsVar.class, ManifestFileVar.class)
-                               .varContextObject(ArgsVar.SESSION_args, 
m.getArgs())
-                               
.varContextObject(ManifestFileVar.SESSION_manifest, m.getManifest());
-               }
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaDefault.java
similarity index 85%
copy from 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java
copy to 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaDefault.java
index 4b99105..2dd956f 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaDefault.java
@@ -18,18 +18,10 @@ import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
- * Superclass for all REST resources with RDF support.
+ * Resource servlet with additional RDF support.
  */
 @SuppressWarnings("serial")
 @RestResource(
-       htmldoc=@HtmlDoc(
-               navlinks={
-                       "up: request:/..",
-                       "options: servlet:/?method=OPTIONS"
-               },
-               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
-       ),
-       config="$S{juneau.configFile}",
        serializers={
                HtmlDocSerializer.class,  // HTML must be listed first because 
Internet Explore does not include text/html in their Accept header.
                RdfSerializer.Xml.class,
@@ -45,4 +37,4 @@ import org.apache.juneau.rest.annotation.*;
                RdfParser.N3.class
        }
 )
-public abstract class ResourceJena extends RestServletDefault {}
+public abstract class RestServletJenaDefault extends RestServletDefault {}
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaGroup.java
old mode 100755
new mode 100644
similarity index 85%
rename from 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java
rename to 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaGroup.java
index 4b99105..3c1f2b1
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJena.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/RestServletJenaGroup.java
@@ -18,18 +18,10 @@ import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
- * Superclass for all REST resources with RDF support.
+ * Resource group with additional RDF support.
  */
 @SuppressWarnings("serial")
 @RestResource(
-       htmldoc=@HtmlDoc(
-               navlinks={
-                       "up: request:/..",
-                       "options: servlet:/?method=OPTIONS"
-               },
-               stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
-       ),
-       config="$S{juneau.configFile}",
        serializers={
                HtmlDocSerializer.class,  // HTML must be listed first because 
Internet Explore does not include text/html in their Accept header.
                RdfSerializer.Xml.class,
@@ -45,4 +37,4 @@ import org.apache.juneau.rest.annotation.*;
                RdfParser.N3.class
        }
 )
-public abstract class ResourceJena extends RestServletDefault {}
+public abstract class RestServletJenaGroup extends RestServletGroup {}
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
index 1027513..b08020f 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ConfigResource.java
@@ -21,7 +21,6 @@ import java.util.Map;
 
 import org.apache.juneau.*;
 import org.apache.juneau.dto.html5.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
@@ -41,7 +40,7 @@ import org.apache.juneau.rest.annotation.Body;
                }
        )
 )
-public class ConfigResource extends Resource {
+public class ConfigResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        /**
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
index 16738f5..983127c 100644
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
@@ -39,7 +39,7 @@ import org.apache.juneau.rest.labels.*;
        allowedMethodParams="OPTIONS,POST"
 )
 @SuppressWarnings("javadoc")
-public class DebugResource extends Resource {
+public class DebugResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        /**
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index 9880aa2..94eeeb6 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -25,7 +25,6 @@ import java.util.logging.*;
 import javax.servlet.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
@@ -74,7 +73,7 @@ import org.apache.juneau.utils.*;
                @Property(name="DirectoryResource.rootDir", value="")
        }
 )
-public class DirectoryResource extends Resource {
+public class DirectoryResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        private File rootDir;     // The root directory
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
index 16b578d..46129f7 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
@@ -26,7 +26,6 @@ import java.util.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.dto.LinkString;
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
@@ -48,7 +47,7 @@ import org.apache.juneau.transforms.*;
                DateSwap.ISO8601DT.class  // Serialize Date objects as ISO8601 
strings.
        }
 )
-public class LogsResource extends Resource {
+public class LogsResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        private File logDir;
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
index 4122d6a..07d70e0 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/SampleRootResource.java
@@ -12,7 +12,7 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.microservice.resources;
 
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
@@ -24,6 +24,6 @@ import org.apache.juneau.rest.annotation.*;
        description="This is a sample router page",
        children={ConfigResource.class,LogsResource.class}
 )
-public class SampleRootResource extends ResourceGroup {
+public class SampleRootResource extends RestServletGroup {
        private static final long serialVersionUID = 1L;
 }
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
index e950c15..dd33bfb 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/ShutdownResource.java
@@ -14,7 +14,7 @@ package org.apache.juneau.microservice.resources;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
@@ -24,7 +24,7 @@ import org.apache.juneau.rest.annotation.*;
        path="/shutdown",
        title="Shut down this resource"
 )
-public class ShutdownResource extends Resource {
+public class ShutdownResource extends RestServletDefault {
 
        private static final long serialVersionUID = 1L;
 
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java
deleted file mode 100755
index 40b9863..0000000
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java
+++ /dev/null
@@ -1,18 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-
-/**
- * Predefined SVL Variables
- */
-package org.apache.juneau.microservice.vars;
-
diff --git 
a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
 
b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
index 8de3f04..371df39 100755
--- 
a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
+++ 
b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/HelloWorldResource.java
@@ -14,7 +14,7 @@ package org.apache.juneau.microservice.sample;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
-import org.apache.juneau.microservice.Resource;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.RestMethod;
 import org.apache.juneau.rest.annotation.RestResource;
 
@@ -26,7 +26,7 @@ import org.apache.juneau.rest.annotation.RestResource;
        path="/helloworld",
        description="Simplest possible REST resource"
 )
-public class HelloWorldResource extends Resource {
+public class HelloWorldResource extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        /** 
diff --git 
a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
 
b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
index 41fa4fd..a9f94d7 100755
--- 
a/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
+++ 
b/juneau-microservice/juneau-microservice-template/src/main/java/org/apache/juneau/microservice/sample/RootResources.java
@@ -12,9 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.microservice.sample;
 
-import org.apache.juneau.microservice.ResourceGroup;
 import org.apache.juneau.microservice.resources.ConfigResource;
 import org.apache.juneau.microservice.resources.LogsResource;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.HtmlDoc;
 import org.apache.juneau.rest.annotation.RestResource;
 import org.apache.juneau.rest.widget.ContentTypeMenuItem;
@@ -42,6 +42,6 @@ import org.apache.juneau.rest.widget.StyleMenuItem;
                LogsResource.class
        }
 )
-public class RootResources extends ResourceGroup {
+public class RootResources extends RestServletGroup {
        private static final long serialVersionUID = 1L;
 }
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
index aa86a79..e40ece7 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/BpiResource.java
@@ -24,7 +24,7 @@ import org.apache.juneau.rest.annotation.*;
 @RestResource(
        path="/testBpi"
 )
-public class BpiResource extends ResourceJena {
+public class BpiResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        
//====================================================================================================
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
index 8e8d489..8ea723d 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ClientVersionResource.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.test;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
-import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
 /**
@@ -28,12 +28,12 @@ import org.apache.juneau.rest.annotation.*;
        }
 )
 @SuppressWarnings("serial")
-public class ClientVersionResource extends Resource {
+public class ClientVersionResource extends RestServletDefault {
 
        @RestResource(
                path="/defaultHeader"
        )
-       public static class DefaultHeader extends Resource {
+       public static class DefaultHeader extends RestServletDefault {
 
                @RestMethod(name=GET, path="/")
                public String test0() {
@@ -65,7 +65,7 @@ public class ClientVersionResource extends Resource {
                path="/customHeader",
                clientVersionHeader="Custom-Client-Version"
        )
-       public static class CustomHeader extends Resource {
+       public static class CustomHeader extends RestServletDefault {
 
                @RestMethod(name=GET, path="/")
                public String test0() {
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java
index da50e11..fe4b622 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ConfigResource.java
@@ -14,7 +14,6 @@ package org.apache.juneau.rest.test;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 
-import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 
@@ -25,7 +24,7 @@ import org.apache.juneau.rest.annotation.*;
        path="/testConfig"
 )
 @SuppressWarnings("serial")
-public class ConfigResource extends Resource {
+public class ConfigResource extends RestServletDefault {
 
        @RestMethod(name=GET, path="/")
        public Object test1(RestRequest req) {
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
index aa75846..4051202 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/InterfaceProxyResource.java
@@ -31,7 +31,7 @@ import org.junit.*;
  */
 @RestResource(
        path="/testInterfaceProxyResource")
-public class InterfaceProxyResource extends ResourceJena {
+public class InterfaceProxyResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        
//====================================================================================================
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java
index 1e1759e..84d4854 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/LargePojosResource.java
@@ -23,7 +23,7 @@ import org.apache.juneau.rest.annotation.*;
 @RestResource(
        path="/testLargePojos"
 )
-public class LargePojosResource extends ResourceJena {
+public class LargePojosResource extends RestServletJenaDefault {
        private static final long serialVersionUID = 1L;
 
        
//====================================================================================================
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java
index e1fdf20..1703dd8 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/NlsResource.java
@@ -33,7 +33,7 @@ import org.apache.juneau.utils.*;
        }
 )
 @SuppressWarnings({"serial"})
-public class NlsResource extends RestServletGroupDefault {
+public class NlsResource extends RestServletGroup {
        private static final long serialVersionUID = 1L;
 
        
//====================================================================================================
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
index da3b956..4928fb6 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
@@ -27,7 +27,7 @@ import org.apache.juneau.rest.annotation.*;
        path="/testRequestBeanProxy"
 )
 @SuppressWarnings("serial")
-public class RequestBeanProxyResource extends ResourceJena {
+public class RequestBeanProxyResource extends RestServletJenaDefault {
 
        @RestMethod(name=GET, path="/echoQuery")
        public Reader echoQuery(RestRequest req) throws Exception {
diff --git 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
index 77e050f..ddc9fc5 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/ThirdPartyProxyResource.java
@@ -36,7 +36,7 @@ import org.apache.juneau.utils.*;
        path="/testThirdPartyProxy"
 )
 @SuppressWarnings("serial")
-public class ThirdPartyProxyResource extends ResourceJena {
+public class ThirdPartyProxyResource extends RestServletJenaDefault {
 
        public static FileWriter logFile;
        static {
diff --git 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
index 5f8b7fa..b6a475e 100644
--- 
a/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
+++ 
b/juneau-microservice/juneau-microservice-test/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
@@ -38,7 +38,7 @@ public class ConfigTest extends RestTestcase {
 
                Config cf = Config.create().memStore().build().load(m);
 
-               
assertObjectEquals("{int1:'1',int2:'[1,2,3]',int3:'1',int4:'1',int5:'-1',boolean1:'true',boolean2:'[true,true]',testManifestEntry:'$MF{Test-Entry}'}",
 cf.getSectionAsMap("Test"));
+               
assertObjectEquals("{int1:'1',int2:'[1,2,3]',int3:'1',int4:'1',int5:'-1',boolean1:'true',boolean2:'[true,true]',testManifestEntry:'test-value'}",
 cf.getSectionAsMap("Test"));
 
                assertEquals("'1'", c.doGet(URL + "/Test%2Fint1/" + 
getName(String.class)).getResponseAsString());
                assertEquals("'[1,2,3]'", c.doGet(URL + "/Test%2Fint2/" + 
getName(String.class)).getResponseAsString());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index fd4dbd1..fd90cdf 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -142,14 +142,8 @@ public class RestContextBuilder extends BeanContextBuilder 
implements ServletCon
 
                        htmlDocBuilder = new HtmlDocBuilder(properties);
                        varResolverBuilder = new VarResolverBuilder()
-                               .vars(
-                                       SystemPropertiesVar.class,
-                                       EnvVariablesVar.class,
-                                       ConfigVar.class,
-                                       IfVar.class,
-                                       SwitchVar.class,
-                                       CoalesceVar.class
-                               );
+                               .defaultVars()
+                               .vars(ConfigVar.class);
 
                        VarResolver vr = varResolverBuilder.build();
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroupDefault.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroup.java
similarity index 95%
rename from 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroupDefault.java
rename to 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroup.java
index 191e6aa..8d0125f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroupDefault.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServletGroup.java
@@ -33,7 +33,7 @@ import org.apache.juneau.rest.labels.*;
  * </ul>
  */
 @RestResource
-public abstract class RestServletGroupDefault extends RestServletDefault {
+public class RestServletGroup extends RestServletDefault {
        private static final long serialVersionUID = 1L;
 
        /**

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to