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

dbarnes pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git


The following commit(s) were added to refs/heads/develop by this push:
     new 53686e5  Feature/geode 4728 (#454)
53686e5 is described below

commit 53686e5790567f2d7a39ae39a232aef5e0032403
Author: Dave Barnes <dbar...@pivotal.io>
AuthorDate: Mon Mar 4 11:52:18 2019 -0800

    Feature/geode 4728 (#454)
    
    * GEODE-4728 - User Guide, Incorporate reviewer suggestions
---
 .../source/subnavs/geode-nc-nav.erb                |  13 +-
 .../continuous-queries.html.md.erb                 |  51 ++--
 .../function-execution.html.md.erb                 |  74 +++--
 .../function-execution.html.md.erb-NOTOC           | 300 ---------------------
 .../regions/region-attributes.html.md.erb          |  35 +--
 docs/geode-native-docs/regions/regions.html.md.erb |   4 +-
 .../registering-interest-for-entries.html.md.erb   |   0
 docs/geode-native-docs/remote-queries.html.md.erb  |  36 ++-
 .../security/authentication.html.md.erb            |   2 +-
 .../security/security.html.md.erb                  |   2 +-
 .../security/sslclientserver.html.md.erb           |   5 +-
 .../transactions/transactions.html.md.erb          |   2 +-
 12 files changed, 120 insertions(+), 404 deletions(-)

diff --git 
a/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb 
b/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
index 859b20a..c9b6e9f 100644
--- a/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
+++ b/docs/geode-native-book/master_middleman/source/subnavs/geode-nc-nav.erb
@@ -38,13 +38,8 @@ limitations under the License.
     <li class="has_submenu">
       <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/configuring/configuration.html">Configuring
 a Client Application</a>
       <ul>
-        <li class="has_submenu">
+        <li>
           <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/configuring/system-level-configuration.html">System
 Level Configuration</a>
-          <ul>
-           <li>
-             <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/configuring/sysprops.html">System
 Properties</a>
-           </li>
-          </ul>
         </li>
       </ul>
     </li>
@@ -56,6 +51,9 @@ limitations under the License.
       <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/regions/regions.html">Configuring
 Regions</a>
       <ul>
         <li>
+        <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/regions/registering-interest-for-entries.html">Registering
 Interest for Entries</a>
+        </li>
+        <li>
         <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/regions/region-attributes.html">Region
 Attributes</a>
         </li>
       </ul>
@@ -92,6 +90,9 @@ limitations under the License.
     <li>
       <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/transactions/transactions.html">Transactions</a>
     </li>
+    <li>
+      <a 
href="/docs/geode-native/<%=vars.product_version_nodot%>/configuring/sysprops.html">System
 Properties</a>
+    </li>
   </ul>
   </div>
 </div>
diff --git a/docs/geode-native-docs/continuous-queries.html.md.erb 
b/docs/geode-native-docs/continuous-queries.html.md.erb
index 4ef7510..dd9fdc2 100644
--- a/docs/geode-native-docs/continuous-queries.html.md.erb
+++ b/docs/geode-native-docs/continuous-queries.html.md.erb
@@ -28,7 +28,7 @@ in the *<%=vars.product_name%> User Guide*.
 
 Continuous querying provides the following features:
 
--   **Standard <%=vars.product_name%> native client query syntax and 
semantics**. Continuous queries are expressed in the same language used for 
other native client queries. See [Remote Queries](remote-queries.html).
+- **Standard <%=vars.product_name%> native client query syntax and 
semantics**. Continuous queries are expressed in the same language used for 
other native client queries. See [Remote Queries](remote-queries.html).
 
 - **Standard <%=vars.product_name%> events-based management of CQ events**. 
The event handling used
 to process CQ events is based on the standard <%=vars.product_name%> event 
handling framework. 
@@ -41,16 +41,18 @@ server failure (see [High Availability for Client-to-Server 
Communication](prese
 If your clients are durable, you can also define any of your CQs as durable 
(see [Durable Client Messaging](preserving-data/durable-client-messaging.html)).
 
 - **Interest criteria based on data values**. Continuous queries are run 
against the region's entry values. 
-Compare this to register interest by reviewing [Registering Interest for 
Entries](client-cache/registering-interest-for-entries.html).
+Compare this to register interest by reviewing [Registering Interest for 
Entries](regions/registering-interest-for-entries.html).
 
--   **Active query execution**. Once initialized, the queries operate only on 
new events, rather than on the entire region data set. 
-Events that change the query result are sent to the client immediately.
+- **Active query execution**. Once initialized, the queries operate on new 
events. Events that change the query result are sent to the client immediately.
 
 ## <a id="cq_api"></a>Typical Continuous Query Lifecycle
 
 1.  The client creates the CQ. This sets up everything for running the query 
and provides the client with a `CqQuery` object, but does not execute the CQ. 
At this point, the query is in a `STOPPED `state, ready to be closed or run.
-2.  The client initiates the CQ with an API call to one of the `CqQuery 
execute*` methods. This puts the query into a `RUNNING` state on the client and 
on the server.  The server remotely evaluates the query string, and optionally 
returns the results to the client.
-1.  The CqListener waits for events. When it receives events, it takes action 
accordingly. Events are not result sets. If the action requires doing something 
with the data, the data must first be retrieved.
+2.  The client initiates the CQ with an API call to one of the `CqQuery 
execute*` methods. This puts the query into a `RUNNING` state on the client and 
on the server.  The server remotely evaluates the query string, and optionally 
returns the results to the client. `CqQuery execute*` methods include:
+  - .NET: `CqQuery.Execute()` and `CqQuery.ExecuteWithInitialResults()`
+  - C++: `CqQuery.execute()` and `CqQuery.executeWithInitialResults()`
+
+1.  A CQ Listener waits for events. When it receives events, it takes action 
accordingly with the data in the CqEvent.
 3.  The CQ is closed by a client call to `CqQuery.close`. This de-allocates 
all resources in use for the CQ on the client and server. At this point, the 
cycle could begin again with the creation of a new `CqQuery` instance.
 
 ## <a id="ExecutingACQ"></a>Executing a Continuous Query from the Client
@@ -58,15 +60,16 @@ Events that change the query result are sent to the client 
immediately.
 The essential steps to create and execute a continuous query are:
 
 1.  Create an instance of the `QueryService` class. If you are using the pool 
API (recommended), you should obtain the `QueryService` from the pool.
-1.  Create a `CqListener` to field events sent from the server.
-1.  Use the `Query.execute()` method to submit the query string to the cache 
server. The server
-   remotely evaluates the query string, then monitors those results and 
notifies the client if they change.
+1.  Define a CQ Listener (in .NET, an `ICqListener`, in C++, a `CqListener`) 
to field events sent from the server.
+1.  Use one of the `CqQuery execute*` methods to submit the query string to 
the cache server.
+1.  The server remotely evaluates the query string, then monitors those 
results and notifies the client if they change.
+1.  The client listens for changes that match the query predicate.
 1.  Iterate through the returned objects.
 1.  When finished, close down the continuous query.
 
 ### <a id="DotNetCQExample"></a>.NET Continuous Query Example
 
-These C# code excerpts are from the `examples\dotnet\ContinuousQueryCs` 
example included in your client
+These C# code excerpts are from the `examples\dotnet\continuousquery` example 
included in your client
 distribution. See the example for full context.
 
 Following the steps listed above,
@@ -77,15 +80,17 @@ Following the steps listed above,
     var queryService = pool.GetQueryService();
     ```
 
-1. Create a CQ Listener:
+1. Define an ICqListener:
 
     ```
-    var cqListener = new MyCqListener<string, Order>();
+    public class MyCqListener<TKey, TResult> : ICqListener<TKey, TResult>
+    {
     ```
 
-1. Insert the CQ Listener into a CQ attributes object:
+1. Create an instance of your ICqListener and insert it into a CQ attributes 
object:
 
     ```
+    var cqListener = new MyCqListener<string, Order>();
     var cqAttributesFactory = new CqAttributesFactory<string, Order>();
     cqAttributesFactory.AddCqListener(cqListener);
     var cqAttributes = cqAttributesFactory.Create();
@@ -97,12 +102,18 @@ Following the steps listed above,
     var query = queryService.NewCq("MyCq", "SELECT * FROM /example_orderobject 
WHERE quantity > 30", cqAttributes, false);
     ```
 
+1. Execute the query:
+
+    ```
+    query.Execute();
+    ```
+
 1. Wait for events and do something with them.
 
     ```
        /* Excerpt from the CqListener */
 
-       /* Determine OP Type */
+       /* Determine Operation Type */
            switch (ev.getQueryOperation())
             {
                 case CqOperation.OP_TYPE_CREATE:
@@ -149,13 +160,13 @@ Following the steps listed above,
     auto queryService = pool->getQueryService();
     ```
 
-1. Create a CQ Listener:
+1. Define a CqListener:
 
     ```
     class MyCqListener : public CqListener {
     ```
 
-1. Insert the CQ Listener into a CQ attributes object:
+1. Create an instance of your CqListener and insert it into a CQ attributes 
object:
 
     ```
     CqAttributesFactory cqFactory;
@@ -174,12 +185,18 @@ Following the steps listed above,
          cqAttributes);
     ```
 
+1. Execute the query:
+
+    ```
+    query->execute();
+    ```
+
 1. Wait for events and do something with them.
 
     ```
        /* Excerpt from the CqListener */
 
-       /* Determine OP Type */
+       /* Determine Operation Type */
        switch (cqEvent.getQueryOperation()) {
        case CqOperation::OP_TYPE_CREATE:
          opStr = "CREATE";
diff --git a/docs/geode-native-docs/function-execution.html.md.erb 
b/docs/geode-native-docs/function-execution.html.md.erb
index da7301b..c2c7f91 100644
--- a/docs/geode-native-docs/function-execution.html.md.erb
+++ b/docs/geode-native-docs/function-execution.html.md.erb
@@ -19,11 +19,15 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 -->
 
-A client can invoke a server-resident function, with paramaters, and can 
collect and operate on the returned results.
+A client can invoke a server-resident function, with parameters, and can 
collect and operate on the returned results.
 
 ## <a id="server_side_requirements"></a>Server-side Requirements
 
-To be callable from your client, a function must be resident on the server and 
registered as available for client access.
+To be callable from your client, a function must be 
+
+- resident on the server, and
+- registered as available for client access.
+
 See [Executing a Function in 
<%=vars.product_name_long%>](/serverman/developing/function_exec/function_execution.html)
 
 in the <%=vars.product_name%> User Guide for details on how to write and 
register server-resident functions.
 
@@ -34,46 +38,34 @@ The client must connect to the server through a connection 
pool in order to invo
 ## <a id="how_functions_execute"></a>How Functions Execute
 
 1.  The calling client application runs the `execute` method on the 
`Execution` object. The function must already be registered on the servers.
-2.  The function is invoked on all servers where it needs to run. The 
locations are determined by the `FunctionService on*` 
+2.  The function is invoked on the servers where it needs to run. The servers 
are determined by the `FunctionService on*` 
 method calls, region configuration, and any filters.
 3.  If the function has results, the result is returned in a `ResultCollector` 
object.
-4.  The client collects results using the result collector `getResult`.
+4.  The client collects results using the `ResultCollector.getResult()` method.
 
 In every client where you want to execute the function and process the results:
 
 - Use one of the `FunctionService on*` methods to create an `Execution` 
object. The `on*` methods,
-`onRegion`, `onServer` and `onServers`, define the highest level where the 
function is run. If
-you use `onRegion` you can further narrow your run scope by setting key 
filters. The function run
-using `onRegion` is a data dependent function – the others are 
data-independent functions.
-You can run a data dependent function against partitioned and colocated 
partitioned regions. From the client, provide the appropriate key
+`onRegion`, `onServer` and `onServers`, define the highest level where the 
function is run.
+- If you use `onRegion` you can further narrow your run scope by setting key 
filters.
+- A function run using `onRegion` is a *data dependent* function – others are 
*data-independent* functions.
+- You can run a data dependent function against partitioned and colocated 
partitioned regions. From the client, provide the appropriate key
  sets to the function call.
 
--  Use the `Execution` object as needed for additional function configuration. 
You can:
-    -   Provide a set of data keys to `withFilter` to narrow the execution 
scope. This works only for `onRegion` Execution objects.
-    -   Provide function arguments to `withArgs`.
-    -   Provide a custom `ResultCollector` to `withCollector`.
+-  The `Execution` object allows you to customize the invocation by:
+    -   Providing a set of data keys to `withFilter` to narrow the execution 
scope. This works only for `onRegion` Execution objects (data-dependent 
functions).
+    -   Providing function arguments to `withArgs`.
+    -   Defining a custom `ResultCollector` for `withCollector`.
 
--  Call the `Execution` object execute method to run the function.
+-  Call the `Execution.execute()` method to run the function.
 
 ## <a id="processing_function_results"></a>Processing Function Results
 
-The client may use the default result collector. If the client needs special 
results handling, code
-a custom `ResultsCollector` implementation to replace the default. Use the
-`Execution::withCollector` method to define the custom collector.
-
-For example, to program your client to get the results from a function, use 
the result collector returned from the function execution, like this:
-
-```cpp
-ResultCollectorPtr rc = FunctionService::onRegion(region)
-                    ->withArgs(args)
-                    ->withFilter(keySet)
-                    ->withCollector(new MyCustomResultCollector())
-                    .execute(Function);
-CacheableVectorPtr functionResult = rc.getResult();
-```
-
+To get the results from the function in the client app, use the result 
collector returned from the function execution.
 The `getResult` methods of the default result collector block until all 
results are received, then return the full result set.
 
+The client can use the default result collector. If the client needs special 
results handling, code a custom `ResultsCollector` implementation to replace 
the default.
+Use the `Execution::withCollector` method to specify the custom collector.
 To handle the results in a custom manner:
 
 1.  Write a class that implements the `ResultCollector` interface to handle 
the results in a custom manner. The methods are of two types: one handles data 
and information from <%=vars.product_name%> and populates the results set, 
while the other returns the compiled results to the calling application:
@@ -81,20 +73,22 @@ To handle the results in a custom manner:
     -  `endResults` is called to signal the end of all results from the 
function execution.
     -  `getResult` is available to your executing application (the one that 
calls `Execution.execute`) to retrieve the results. This may block until all 
results are available.
     -  `clearResults` is called to clear partial results from the results 
collector. This is used only for highly available `onRegion` functions where 
the calling application waits for the results. If the call fails, before 
<%=vars.product_name%> retries the execution, it calls `clearResults` to ready 
the instance for a clean set of results.
-2.  Use the `Execution` object in your executing member to call 
`withCollector`, passing your custom collector, as shown in the example above.
+2.  Use the `Execution` object in your executing member to call 
`withCollector`, passing your custom collector.
 
 # <a id="examples"></a>Examples
 
-The native client source release contains examples of function execution 
written for .NET and
-C++. The examples are located in `../examples/dotnet/FunctionExecutionCs` and
+The native client release contains examples of function execution written for 
.NET and
+C++. The examples are located in `../examples/dotnet/functionexecution` and
 `../examples/cpp/function-execution`, respectively.
 
-Both examples begin with a server-side script that runs `gfsh` commands to 
create
-a region, simply called "partition_region", which is preloaded with a JAR file 
containing the
-server-side Java function code. The function, called 
"ExampleMultiGetFunction", is defined in the
+The two examples share some common elements:
+
+- They begin with a server-side script that runs `gfsh` commands to create a 
region, simply called "partition_region".
+- The function is preloaded with a JAR file containing the server-side Java 
function code. 
+- The function, called "ExampleMultiGetFunction", is defined in the
 `examples/utilities` directory of your distribution. As its input parameter, 
the function takes an array of keys,
 then performs a `get` on each key and returns an array containing the results.
-The function does not load values into the data store. That is a separate 
operation, performed in these examples by
+- The function does not load values into the data store. That is a separate 
operation, performed in these examples by
 the client, and does not involve the server-side function.
 
 As prerequisites, the client code must be aware of the connection to the 
server, the name of the function, and the expected type/format 
@@ -103,12 +97,12 @@ of the input parameter and return value.
 The client:
 
 - creates an execution object
-- populates the execution object with input parameters
-- invokes the object's execute method to invoke the server-side function.
+- provides the execution object with a populated input parameter array
+- invokes the object's execute method to invoke the server-side function
 
-If the client expects results, it must create a result
-object. Optionally, the client can use a provided ResultCollector which offers 
some predefined
-methods for iterating over and processing return values.
+If the client expects results, it must create a result object. The C++ example 
uses a result object to hold the function results.
+Alternatively, the client can use a provided Result Collector which offers 
some predefined methods for iterating over and processing return values.
+The .NET example uses a built-in result collector 
(`IResultCollector.getRestults()`) to retrieve the function results.
 
 ## <a id="dotnet_example"></a>.NET Example
 This section contains code snippets showing highlights of the .NET function 
execution example. They are not intended for cut-and-paste execution.
diff --git a/docs/geode-native-docs/function-execution.html.md.erb-NOTOC 
b/docs/geode-native-docs/function-execution.html.md.erb-NOTOC
deleted file mode 100644
index 92ef29b..0000000
--- a/docs/geode-native-docs/function-execution.html.md.erb-NOTOC
+++ /dev/null
@@ -1,300 +0,0 @@
----
-title:  Function Execution
----
-
-<!--
-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.
--->
-
-A client can invoke a server-resident function, with paramaters, and can 
collect and operate on the returned results.
-
-## Server-side Requirements
-
-To be callable from your client, a function must be resident on the server and 
registered as available for client access.
-See [Executing a Function in 
<%=vars.product_name_long%>](/serverman/developing/function_exec/function_execution.html)
 
-in the <%=vars.product_name%> User Guide for details on how to write and 
register server-resident functions.
-
-## Client-side Requirements
-
-The client must connect to the server through a connection pool in order to 
invoke a server-side function.
-
-## How Functions Execute
-
-1.  The calling client application runs the `execute` method on the 
`Execution` object. The object must already be registered on the servers.
-2.  The function is invoked on all servers where it needs to run. The 
locations are determined by the `FunctionService on*` 
-method calls, region configuration, and any filters.
-3.  If the function has results, the result is returned in a `ResultCollector` 
object.
-4.  The client collects results using the result collector `getResult`.
-
-In every client where you want to execute the function and process the results:
-
-- Use one of the `FunctionService on*` methods to create an `Execution` 
object. The `on*` methods,
-`onRegion`, `onServer` and `onServers`, define the highest level where the 
function is run. If
-you use `onRegion` you can further narrow your run scope by setting key 
filters. The function run
-using `onRegion` is a data dependent function – the others are 
data-independent functions.
-
-You can run a data dependent function against custom partitioned and colocated 
partitioned regions. From the client, provide the appropriate key
- sets to the function call.
-
--  Use the `Execution` object as needed for additional function configuration. 
You can:
-    -   Provide a set of data keys to `withFilter` to narrow the execution 
scope. This works only for `onRegion` Execution objects.
-    -   Provide function arguments to `withArgs`.
-    -   Define a custom `ResultCollector` to `withCollector`.
-
--  Call the `Execution` object execute method to run the function.
-
-## Processing Function Results
-
-The client may use the default result collector. If the client needs special 
results handling, code
-a custom `ResultsCollector` implementation to replace the default. Use the
-`Execution::withCollector` method to define the custom collector.
-
-For example, to program your client to get the results from a function, use 
the result collector returned from the function execution, like this:
-
-```cpp
-ResultCollectorPtr rc = FunctionService::onRegion(region)
-                    ->withArgs(args)
-                    ->withFilter(keySet)
-                    ->withCollector(new MyCustomResultCollector())
-                    .execute(Function);
-CacheableVectorPtr functionResult = rc.getResult();
-```
-
-The `getResult` methods of the default result collector block until all 
results are received, then return the full result set.
-
-To handle the results in a custom manner:
-
-1.  Write a class that implements the `ResultCollector` interface to handle 
the results in a custom manner. The methods are of two types: one handles data 
and information from <%=vars.product_name%> and populates the results set, 
while the other returns the compiled results to the calling application:
-    -  `addResult` is called when results arrive from the `Function` methods. 
Use `addResult` to add a single result to the ResultCollector.
-    -  `endResults` is called to signal the end of all results from the 
function execution.
-    -  `getResult` is available to your executing application (the one that 
calls `Execution.execute`) to retrieve the results. This may block until all 
results are available.
-    -  `clearResults` is called to clear partial results from the results 
collector. This is used only for highly available `onRegion` functions where 
the calling application waits for the results. If the call fails, before 
<%=vars.product_name%> retries the execution, it calls `clearResults` to ready 
the instance for a clean set of results.
-2.  Use the `Execution` object in your executing member to call 
`withCollector`, passing your custom collector, as shown in the example above.
-
-# Examples
-
-The native client source release contains examples of function execution 
written for .NET and
-C++. The examples are located in `../examples/dotnet/FunctionExecutionCs` and
-`../examples/cpp/function-execution`, respectively.
-
-Both examples begin with a server-side script that runs `gfsh` commands to 
create
-a region, simply called "partition_region", which is preloaded with a JAR file 
containing the
-server-side Java function code. The function, called 
"ExampleMultiGetFunction", is defined in the
-`examples/utilities` directory of your distribution. As its input parameter, 
the function takes an array of keys,
-then performs a `get` on each key and returns an array containing the results.
-The function does not load values into the data store. That is a separate 
operation, performed in these examples by
-the client, and does not involve the server-side function.
-
-As prerequisites, the client code must be aware of the connection to the 
server, the name of the function, and the expected type/format 
-of the input parameter and return value.
-
-The client:
-
-- creates an execution object
-- populates the execution object with input parameters
-- invokes the object's execute method to invoke the server-side function.
-
-If the client expects results, it must create a result
-object. Optionally, the client can use a provided result collector which 
offers some predefined
-methods for iterating over and processing return values.
-
-## .NET Example
-This section contains code snippets showing highlights of the .NET function 
execution example. They are not intended for cut-and-paste execution.
-For the complete source, see the example source directory.
-
-The .NET example creates a cache, then uses it to create a connection pool.
-
-```csharp
-   var cacheFactory = new CacheFactory()
-       .Set("log-level", "none");
-   var cache = cacheFactory.Create();
-
-   var poolFactory = cache.GetPoolFactory()
-       .AddLocator("localhost", 10334);
-   var pool = poolFactory.Create("pool");
-```
-
-The example uses the connection pool to create a region, with the same 
characteristics and name as the server-side region (`partition_region`).
-
-```csharp
-   var regionFactory = cache.CreateRegionFactory(RegionShortcut.PROXY)
-       .SetPoolName("pool");
-   var region = regionFactory.Create<object, object>("partition_region");
-```
-
-The sample client populates the server's datastore with values, using the API 
and some sample key-value pairs.
-
-```csharp
-   string rtimmonsKey = "rtimmons";
-   string rtimmonsValue = "Robert Timmons";
-   string scharlesKey = "scharles";
-   string scharlesValue = "Sylvia Charles";
-   region.Put(rtimmonsKey, rtimmonsValue, null);
-   region.Put(scharlesKey, scharlesValue, null);
-```
-
-To confirm that the data has been stored, the client uses the API to retrieve 
the values and write them to the console.
-This is done without reference to the server-side example function.
-
-```csharp
-   var user1 = region.Get(rtimmonsKey, null);
-   var user2 = region.Get(scharlesKey, null);
-
-   Console.WriteLine(rtimmonsKey + " = " + user1);
-   Console.WriteLine(scharlesKey + " = " + user2);
-```
-
-Next, the client retrieves those same values using the server-side example 
function.
-The client code creates the input parameter, an array of keys whose values are 
to be retrieved.
-
-```csharp
-   ArrayList keyArgs = new ArrayList();
-   keyArgs.Add(rtimmonsKey);
-   keyArgs.Add(scharlesKey);
-```
-
-The client creates an execution object using `Client.FunctionService.OnRegion` 
and specifying the region.
-
-```csharp
-   var exc = Client.FunctionService<object>.OnRegion<object, object>(region);
-```
-
-The client then calls the server side function with its input arguments and 
stores the results in a Client.IResultCollector.
-
-```csharp
-   Client.IResultCollector<object> rc = 
exc.WithArgs<object>(keyArgs).Execute("ExampleMultiGetFunction");
-```
-
-It then loops through the results and prints the retrieved values.
-
-```csharp
-   ICollection<object> res = rc.GetResult();
-
-   Console.WriteLine("Function Execution Results:");
-   Console.WriteLine("   Count = {0}", res.Count);
-
-   foreach (List<object> item in res)
-   {
-     foreach (object item2 in item)
-     {
-       Console.WriteLine("   value = {0}", item2.ToString());
-     }
-   }
-```
-
-## C++ Example
-This section contains code snippets showing highlights of the C++ function 
execution example. They are not intended for cut-and-paste execution.
-For the complete source, see the example source directory.
-
-The C++ example creates a cache.
-
-```cpp
-Cache setupCache() {
-  return CacheFactory()
-      .set("log-level", "none")
-      .create();
-}
-```
-
-The example client uses the cache to create a connection pool, 
-
-```cpp
-void createPool(const Cache& cache) {
-  auto pool = cache.getPoolManager()
-      .createFactory()
-      .addServer("localhost", EXAMPLE_SERVER_PORT)
-      .create("pool");
-}
-```
-
-Then, using that pool, the client creates a region with the same 
characteristics and name as the server-side region (`partition_region`).
-
-```cpp
-std::shared_ptr<Region> createRegion(Cache& cache) {
-  auto regionFactory = cache.createRegionFactory(RegionShortcut::PROXY);
-  auto region = regionFactory.setPoolName("pool").create("partition_region");
-
-  return region;
-}
-```
-
-The sample client populates the server's datastore with values, using the API 
and some sample key-value pairs.
-
-```cpp
-void populateRegion(const std::shared_ptr<Region>& region) {
-  for (int i = 0; i < keys.size(); i++) {
-    region->put(keys[i], values[i]);
-  }
-}
-```
-
-As confirmation that the data has been stored, the sample client uses the API 
to retrieve the values and write them to the console.
-This is done without reference to the server-side example function.
-
-```cpp
-std::shared_ptr<CacheableVector> populateArguments() {
-  auto arguments = CacheableVector::create();
-  for (int i = 0; i < keys.size(); i++) {
-    arguments->push_back(CacheableKey::create(keys[i]));
-  }
-  return arguments;
-}
-```
-
-Next, the client retrieves those same values using the server-side example 
function.
-The client code creates the input parameter, an array of keys whose values are 
to be retrieved.
-
-```cpp
-std::vector<std::string> executeFunctionOnServer(const std::shared_ptr<Region> 
region,
-    const std::shared_ptr<CacheableVector> arguments) {
-  std::vector<std::string> resultList;
-```
-
-The client creates an execution object using `Client.FunctionService.OnRegion` 
and specifying the region.
-
-```cpp
-  auto functionService = FunctionService::onServer(region->getRegionService());
-```
-
-The client then calls the server side function with its input arguments and 
stores the results in a Client.IResultCollector.
-
-```cpp
-  if(auto executeFunctionResult = 
functionService.withArgs(arguments).execute(getFuncIName)->getResult()) {
-    for (auto &arrayList: *executeFunctionResult) {
-      for (auto &cachedString: 
*std::dynamic_pointer_cast<CacheableArrayList>(arrayList)) {
-        
resultList.push_back(std::dynamic_pointer_cast<CacheableString>(cachedString)->value());
-      }
-    }
-  } else {
-    std::cout << "get executeFunctionResult is NULL\n";
-  }
-
-  return resultList;
-}
-```
-
-It then loops through the results and prints the retrieved values.
-
-```cpp
-void printResults(const std::vector<std::string>& resultList) {
-  std::cout << "Result count = " << resultList.size() << std::endl << 
std::endl;
-  int i = 0;
-  for (auto &cachedString: resultList) {
-    std::cout << "\tResult[" << i << "]=" << cachedString << std::endl;
-    ++i;
-  }
-```
-
diff --git a/docs/geode-native-docs/regions/region-attributes.html.md.erb 
b/docs/geode-native-docs/regions/region-attributes.html.md.erb
index d7eabe8..6460316 100644
--- a/docs/geode-native-docs/regions/region-attributes.html.md.erb
+++ b/docs/geode-native-docs/regions/region-attributes.html.md.erb
@@ -27,39 +27,28 @@ Region attribute settings determine where the data resides, 
how the region is ma
 
 Specify region attributes before creating the region. You can do this either 
through the API or
 through the declarative XML file. The API includes classes for defining a 
region's attributes before
-creation and for modifying some of them after creation. For details, see the 
API for
-`RegionShortcut`, `RegionAttributes`, `AttributesFactory`, and 
`AttributesMutator`.
+creation and for modifying some attributes after creation. For details, see 
the API for
+`RegionShortcut`, `RegionAttributes`, `RegionAttributesFactory`, and 
`AttributesMutator`.
 
 ## <a id="region-shortcuts"></a>Region Shortcuts
 
 <%=vars.product_name%> provides predefined, shortcut region attributes 
settings for your use in `RegionShortcut`.
-
-Shortcut attributes are a convenience only. They are named attributes that 
<%=vars.product_name%>
-has already stored for you. You can override their settings by storing new 
attributes with the same
-`id` as the predefined attributes.
-
-### <a id="region-shortcuts_shortcut-attribute-options"></a>Shortcut Attribute 
Options
-
-You can select the most common region attributes settings from 
`RegionShortcut`, the predefined named region attributes.
-
-This section provides an overview of the options available in the region 
shortcut settings.
-
-**Communication with Servers and Data Storage**
+The shortcuts are:
 
 `PROXY`
->  does not store data in the client cache, but connects the region to the 
servers for data requests and updates, interest registrations, and so on.
+>  does not store data in the client cache, but connects the region to the 
servers.
 
 `CACHING_PROXY`
->  stores data in the client cache and connects the region to the servers for 
data requests and updates, interest registrations, and so on.
+>  stores data in the client cache and connects the region to the servers.
+
+`CACHING_PROXY_ENTRY_LRU`
+>  stores data in the client cache and connects the region to the servers.
+Limits the amount of data stored locally in the client to a default limit of 
100,000 entries by ejecting the least recently used (LRU) entries.
 
 `LOCAL`
 >  stores data in the client cache and does not connect the region to the 
 > servers. This is a client-side-only region.
 
-**Data Eviction**
-
-Non-PROXY regions are those that store data in the client cache.
-You can add data eviction for non-PROXY regions:
-
-`ENTRY_LRU`
->  causes least recently used data to be evicted from memory when the region 
reaches the entry count limit.
+`LOCAL_ENTRY_LRU`
+>  stores data in the client cache and does not connect the region to the 
servers. This is a client-side-only region.
+Limits the amount of data stored locally in the client to a default limit of 
100,000 entries by ejecting the least recently used (LRU) entries.
 
diff --git a/docs/geode-native-docs/regions/regions.html.md.erb 
b/docs/geode-native-docs/regions/regions.html.md.erb
index fc719c0..662b17d 100644
--- a/docs/geode-native-docs/regions/regions.html.md.erb
+++ b/docs/geode-native-docs/regions/regions.html.md.erb
@@ -144,7 +144,7 @@ Whether carried out explicitly or through expiration 
activities, invalidation an
 
 You can use `Cache::getRegion` to retrieve a reference to a specified region.
 
-`RegionPtr` returns `NULL` if the region is not already present in the 
application's cache. A server region must already exist.
+`Cache::getRegion` returns `nullptr` if the region is not already present in 
the application's cache. A server region must already exist.
 
 A region name *cannot* contain these characters:
 
@@ -163,7 +163,5 @@ A region name *cannot* contain these characters:
 ## <a id="getting-region-size"></a>Getting the Region Size
 
 The `Region` API provides a `size` method (`Size` property for .NET) that gets 
the size of a region.
-
 For client regions, this gives the number of entries in the local cache, not 
on the servers.
-
 See the `Region` API documentation for details.
diff --git 
a/docs/geode-native-docs/client-cache/registering-interest-for-entries.html.md.erb
 b/docs/geode-native-docs/regions/registering-interest-for-entries.html.md.erb
similarity index 100%
rename from 
docs/geode-native-docs/client-cache/registering-interest-for-entries.html.md.erb
rename to 
docs/geode-native-docs/regions/registering-interest-for-entries.html.md.erb
diff --git a/docs/geode-native-docs/remote-queries.html.md.erb 
b/docs/geode-native-docs/remote-queries.html.md.erb
index 565eb3d..ebf8d4f 100644
--- a/docs/geode-native-docs/remote-queries.html.md.erb
+++ b/docs/geode-native-docs/remote-queries.html.md.erb
@@ -33,7 +33,6 @@ Querying and indexing operate only on remote cache server 
contents.
 OQL is very similar to SQL, but OQL allows you to query complex objects, 
object attributes, and methods.
 
 In the context of a query, specify the name of a region by its full path, 
starting with a slash (`/`).
-The query processor performs binary numeric promotion, method invocation 
conversion, and temporal type conversion.
 
 The query language supports drilling down into nested object structures.
 Nested data collections can be explicitly referenced in the FROM clause of a 
query.
@@ -55,25 +54,44 @@ This section gives a general overview of the interfaces and 
classes that are pro
 
 ### <a id="Query"></a>Query
 
-A `Query` is obtained from a `QueryService` method, which is obtained from the 
cache. The `Query`
-interface provides methods for managing the compilation and execution of 
queries, and for retrieving
-an existing query string.
+You must create a `Query` object for each new query. The `Query` interface 
provides methods for
+managing the compilation and execution of queries, and for retrieving an 
existing query string.
+
+A `Query` is obtained from a `QueryService`, which is obtained from one of two 
sources:
+
+- To create a `Query` that operates on the <%=vars.product_name%> server, 
start with a `QueryService` obtained from a `Pool`.
+  - For .NET, use `Apache::Geode::Client::Pool::GetQueryService()`.
+  - For C++, use ` apache::geode::client::Pool::getQueryService()`.
+
+- To create a `Query` that operates on your application's local cache, start 
with a `QueryService` obtained from a `Cache`.
+  - For .NET, use `Apache::Geode::Client::Cache::GetQueryService()`.
+  - For C++, use ` apache::geode::client::Cache::getQueryService()`.
+
+[**QUESTION**] These are also available - when are they used?
+
+.NET:
+
+- Apache::Geode::Client::IRegionService::GetQueryService()
+
+C++:
+
+- apache::geode::client::RegionService::getQueryService()
+- apache::geode::client::AuthenticatedView::getQueryService()
 
-You must create a `Query` object for each new query.
 
 ### <a id="ExecutingAQuery"></a>Executing a Query from the Client
 
 The essential steps to create and execute a query are:
 
 1.  Create an instance of the `QueryService` class. If you are using the pool 
API (recommended), you should obtain the `QueryService` from the pool.
-1.  Create a `QueryPtr` to a query (C++) or create a query instance (.NET) 
that is compatible with the OQL specification.
+1.  Create a `Query` instance that is compatible with the OQL specification.
 1.  Use the `Query.execute()` method to submit the query string to the cache 
server. The server
    remotely evaluates the query string and returns the results to the client.
 1.  Iterate through the returned objects.
 
 ### <a id="DotNetQueryExample"></a>.NET Query Example
 
-These C# code excerpts are from the `examples\dotnet\RemoteQueryCs` example 
included in your client
+These C# code excerpts are from the `examples\dotnet\remotequery` example 
included in your client
 distribution. See the example for full context.
 
 Following the steps listed above,
@@ -108,14 +126,14 @@ distribution. See the example for full context.
 
 Following the steps listed above,
 
-  1. Obtain pointer to a `QueryService` object from the connection pool:
+  1. Obtain a `QueryService` object from the connection pool:
 
     ```
     std::shared_ptr<QueryService> queryService = nullptr;
     queryService = pool->getQueryService();
     ```
 
-  1. Create a pointer to a `Query` object by calling 
`QueryService.newQuery()`, specifying your OQL query as a string parameter:
+  1. Create a `Query` object by calling `QueryService.newQuery()`, specifying 
your OQL query as a string parameter:
 
     ```
     auto query = queryService->newQuery("SELECT * FROM /custom_orders WHERE 
quantity > 30");    
diff --git a/docs/geode-native-docs/security/authentication.html.md.erb 
b/docs/geode-native-docs/security/authentication.html.md.erb
index 2203d6d..ac774c5 100644
--- a/docs/geode-native-docs/security/authentication.html.md.erb
+++ b/docs/geode-native-docs/security/authentication.html.md.erb
@@ -27,7 +27,7 @@ this means setting the authentication credentials when you 
create the CacheFacto
 
 ### .NET Authentication Example
 
-The following excerpt is taken from the .NET example provided with your Native 
Client distribution in the `../examples/dotnet/AuthInitialize` directory.
+The following excerpt is taken from the .NET example provided with your Native 
Client distribution in the `../examples/dotnet/authinitialize` directory.
 
 In this C# authentication example, the `CacheFactory` creation process sets 
the authentication callback:
 
diff --git a/docs/geode-native-docs/security/security.html.md.erb 
b/docs/geode-native-docs/security/security.html.md.erb
index 3bbcc61..516eaaf 100644
--- a/docs/geode-native-docs/security/security.html.md.erb
+++ b/docs/geode-native-docs/security/security.html.md.erb
@@ -34,5 +34,5 @@ A Native Client application must address two security 
concerns when connecting t
 
 -   **[TLS/SSL Client/Server Communication Encryption](sslclientserver.html)**
 
-    Communication between client and server must be encrypted so 
authentication credentials and other transmissions cannot be viewed by 
third-parties.
+    Communication between client and server should be encrypted so 
authentication credentials and other transmissions cannot be viewed by 
third-parties.
 
diff --git a/docs/geode-native-docs/security/sslclientserver.html.md.erb 
b/docs/geode-native-docs/security/sslclientserver.html.md.erb
index a84d28c..407eee1 100644
--- a/docs/geode-native-docs/security/sslclientserver.html.md.erb
+++ b/docs/geode-native-docs/security/sslclientserver.html.md.erb
@@ -20,6 +20,7 @@ limitations under the License.
 -->
 
 This section describes how to implement TLS-based communication between your 
clients and servers using the OpenSSL encryption utility.
+When configuring TLS/SSL security for your client, you may find it helpful to 
refer to [The SSL section of the <%=vars.product_name%> User 
Guide](serverman/managing/security/ssl_overview.html).
 
 # Set Up OpenSSL
 
@@ -43,12 +44,10 @@ Download and install OpenSSL 1.1.1 for your specific 
operating system.
 
 The <%=vars.product_name%> server requires keys and keystores in the Java Key 
Store (JKS) format while the native client requires them in the clear PEM 
format. Thus you need to be able to generate private/public keypairs in either 
format and convert between the two using the `keytool` utility and the 
`openssl` command.
 
-There are public third party free tools and source code available to download 
such as the "KeyTool IUI" tool.
-
 
 ## Step 2. Configure environment variables
 
-Configure your system environment to build and run OpenSSL by adding the 
appropriate executable and library directories to your paths.
+Configure your system environment to run OpenSSL by adding the appropriate 
executable and library directories to your paths.
 For example, for Bourne and Korn shells (sh, ksh, bash), environment setup 
would look something like this:
 <code>
 % 
LD\_LIBRARY\_PATH=$LD\_LIBRARY\_PATH:_client-install-dir_/lib:_client-install-dir_/ssl\_libs:_openssl-install-dir_/lib<br
 />
diff --git a/docs/geode-native-docs/transactions/transactions.html.md.erb 
b/docs/geode-native-docs/transactions/transactions.html.md.erb
index fd3b6e2..f88f950 100644
--- a/docs/geode-native-docs/transactions/transactions.html.md.erb
+++ b/docs/geode-native-docs/transactions/transactions.html.md.erb
@@ -23,7 +23,7 @@ Client transactions run on the server tier. The client uses a 
server delegate
 that runs the transaction as it would a local transaction.
 Thus, the key to running client transactions lies in making sure the server
 is properly configured and programmed.
-For complete information about transactions in the Java server,
+For complete information about transactions in the <%=vars.product_name%> 
server,
 see the server documentation at
 [Transactions](geodeman/developing/transactions/chapter_overview.html).
 It provides detailed information including server data requirements,

Reply via email to