Description
-----------
This example shows how to do pre- and post-processing on get calls using the AccessControl callback.

The pre- and post-processing behavior is in the PrePostGetOperationAccessControl class. The authorizeOperation method is invoked before and after the get operation based on this configuration in the gemfire-server.properties file:

security-client-accessor=PrePostGetOperationAccessControl.create
security-client-accessor-pp=PrePostGetOperationAccessControl.create

Note: The DummyAuthInitialize and DummyAuthenticator are necessary to setup the security framework.

Initialization
--------------
Modify the GEODE environment variable in the setenv.sh script to point to a GEODE installation.

Compile Classes
---------------
Compile the classes using the compile.sh script like:

compile.sh 

Start Locator
-------------
Start the locator using the startlocator.sh script like:

startlocator.sh 
......
Locator in /Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/locator on 192.168.2.13[12345] as locator is currently online.
Process ID: 9608
Uptime: 5 seconds
GemFire Version: 1.0.0-incubating-SNAPSHOT
Java Version: 1.8.0_45
Log File: /Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/locator/locator.log
JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /Users/boglesby/Dev/GemFire/Git/geode/open/gemfire-assembly/build/install/apache-geode/lib/gemfire-core-1.0.0-incubating-SNAPSHOT.jar:/Users/boglesby/Dev/GemFire/Git/geode/open/gemfire-assembly/build/install/apache-geode/lib/gemfire-core-dependencies.jar

Successfully connected to: [host=192.168.2.13, port=1099]

Cluster configuration service is up and running.

Start Servers
-------------
Start N cache servers using the startservers.sh script like:

startservers.sh 2
Launching server 1
.......
Server in /Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/server1 on 192.168.2.13[52381] as server1 is currently online.
Process ID: 9626
Uptime: 4 seconds
GemFire Version: 1.0.0-incubating-SNAPSHOT
Java Version: 1.8.0_45
Log File: /Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/server1/cacheserver.log
JVM Arguments: -DgemfirePropertyFile=/Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/config/gemfire-server.properties -Dgemfire.use-cluster-configuration=true -XX:OnOutOfMemoryError=kill -KILL %p -Xms1024m -Xmx1024m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /Users/boglesby/Dev/GemFire/Git/geode/open/gemfire-assembly/build/install/apache-geode/lib/gemfire-core-1.0.0-incubating-SNAPSHOT.jar:/Users/boglesby/Dev/tests/authentication/geode/get-pre-post-processing/config:/Users/boglesby/Dev/tests/authentication/geode/get-pre-post-processing/classes:/Users/boglesby/Dev/GemFire/Git/geode/open/gemfire-assembly/build/install/apache-geode/lib/gemfire-core-dependencies.jar

Launching server 2
.......
Server in /Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/server2 on 192.168.2.13[52394] as server2 is currently online.
Process ID: 9642
Uptime: 4 seconds
GemFire Version: 1.0.0-incubating-SNAPSHOT
Java Version: 1.8.0_45
Log File: /Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/server2/cacheserver.log
JVM Arguments: -DgemfirePropertyFile=/Users/boglesby/Dev/Tests/authentication/geode/get-pre-post-processing/config/gemfire-server.properties -Dgemfire.use-cluster-configuration=true -XX:OnOutOfMemoryError=kill -KILL %p -Xms1024m -Xmx1024m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /Users/boglesby/Dev/GemFire/Git/geode/open/gemfire-assembly/build/install/apache-geode/lib/gemfire-core-1.0.0-incubating-SNAPSHOT.jar:/Users/boglesby/Dev/tests/authentication/geode/get-pre-post-processing/config:/Users/boglesby/Dev/tests/authentication/geode/get-pre-post-processing/classes:/Users/boglesby/Dev/GemFire/Git/geode/open/gemfire-assembly/build/install/apache-geode/lib/gemfire-core-dependencies.jar


Run Client Loader
-----------------
Run the client loader using the runclient.sh like:

runclient.sh load 10
Created GemFireCache[id = 24293395; isClosing = false; isShutDownAll = false; created = Thu Jan 28 10:24:15 PST 2016; server = false; copyOnRead = false; lockLease = 120; lockTimeout = 60]
Retrieved region: com.gemstone.gemfire.internal.cache.LocalRegion[path='/data';scope=LOCAL';dataPolicy=EMPTY; concurrencyChecksEnabled]
Loaded 10 entries in 234 ms

Run Client Getter
-----------------
Run the client getter using the runclient.sh like:

runclient.sh get 10
Created GemFireCache[id = 24293395; isClosing = false; isShutDownAll = false; created = Thu Jan 28 10:24:25 PST 2016; server = false; copyOnRead = false; lockLease = 120; lockTimeout = 60]
Retrieved region: com.gemstone.gemfire.internal.cache.LocalRegion[path='/data';scope=LOCAL';dataPolicy=EMPTY; concurrencyChecksEnabled]
Retrieved [0]: value-0
Retrieved [1]: value-1
Retrieved [2]: value-2
Retrieved [3]: value-3
Retrieved [4]: value-4
Retrieved [5]: value-5
Retrieved [6]: value-6
Retrieved [7]: value-7
Retrieved [8]: value-8
Retrieved [9]: value-9
Retrieved 10 entries in 33 ms

The server logs will contain messages like:

[info 2016/01/28 10:24:25.617 PST server1 <ServerConnection on port 52381 Thread 0> tid=0x50] PrePostGetOperationAccessControl beforeGet key=key-0

[info 2016/01/28 10:24:25.619 PST server1 <ServerConnection on port 52381 Thread 0> tid=0x50] PrePostGetOperationAccessControl afterGet key=key-0; value=value-0

[info 2016/01/28 10:24:25.631 PST server1 <ServerConnection on port 52381 Thread 0> tid=0x50] PrePostGetOperationAccessControl beforeGet key=key-1

[info 2016/01/28 10:24:25.631 PST server1 <ServerConnection on port 52381 Thread 0> tid=0x50] PrePostGetOperationAccessControl afterGet key=key-1; value=value-1

Shutdown
--------
Shutdown servers and locator using the shutdownall.sh script like:

shutdownall.sh 

(1) Executing - connect --locator=localhost[12345]

Connecting to Locator at [host=localhost, port=12345] ..
Connecting to Manager at [host=192.168.2.13, port=1099] ..
Successfully connected to: [host=192.168.2.13, port=1099]


(2) Executing - shutdown --include-locators=true

Shutdown is triggered
