You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by rv...@apache.org on 2016/05/19 15:14:49 UTC

[42/51] [partial] incubator-geode git commit: Add source for geode c++ and .net clients

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/HierarchicalClient/README.html
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/HierarchicalClient/README.html b/geode-client-native/examples/clicache/HierarchicalClient/README.html
new file mode 100755
index 0000000..bedc3c8
--- /dev/null
+++ b/geode-client-native/examples/clicache/HierarchicalClient/README.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 7.0/HTML Export Filter">
+
+<TITLE>HierarchicalClient: Pivotal GemFire&#169; Native Client Example</TITLE>
+
+</HEAD>
+<BODY>
+ <IMG SRC="../../../docs/PIVOTAL_GemFire_190x81.png" BORDER="0">
+ <DIV>
+   <h1 align="center"><a name="Top" id="Top"></a>HierarchicalClient</h1>
+   <h2 align="center">Pivotal GemFire&#174; Native Client</h2>
+   <h2 align="center">C# Programming Example</h2>
+</DIV>
+ 
+<DIV>
+<P>Tiered caching, also called hierarchical caching, lets you isolate data management to one or more servers, allowing multiple clients to connect and use the server caches. This is the model for scalability, with many clients benefitting from the management resources of just a few servers.
+<P> In GemFire hierarchical caching, there is a server-side distributed system and one or more client-side distributed systems. The server VMs run BridgeServers that listen on unique ports for data requests and updates from clients. The clients forward all data requests their caches cannot fulfill to the servers. To do this, they use a custom data loader, the BridgeLoader. The clients might also be configured with a custom listener, called the BridgeWriter, that updates the servers when data is modified on the client side.  In the <a href="../../../quickstart/xml/hierarchicalserver.xml" target="_blank"><code>HierarchicalServer.xml</code></a> file for the cache server used in this example, note that the BridgeServer is defined for the entire cache. It services requests from any client for any region in the cache.<br>
+  <br>
+</DIV>
+ <DIV>
+<H2>
+About the HierarchicalClient Example </H2>
+<P>The <code>HierarchicalClient</code> example is an interactive C# program that uses Microsoft .NET Framework 4.0 to access the GemFire C++ API for modifying and viewing cache contents.</P>
+<blockquote>
+  <p align="left"><em>Microsoft .NET Framework 4.0 must be installed before running this example. For information about installing the .NET Framework, see the </em>GemFire Native Client User's Guide<em>.</em> </p>
+</blockquote>
+<P><code>HierarchicalClient</code> demonstrates a server in a tiered hierarchical caching setup. The client application comes with a cache configuration file, <code><a href="./HierarchicalClient.xml" target="_blank">HierarchicalClient.xml</a></code>, which  is configured to create a root region and establish the native client endpoints to the locally-run server by specifying <code>localhost:40404</code>.</P>
+<P>The <code>HierarchicalClient</code> cache listens for client requests at a specific port (see <code><a href="../../../quickstart/xml/hierarchicalserver.xml" target="_blank">HierarchicalServer.xml</a></code>). The client connects to the cache server's port, sending data requests and updates. At the beginning, both the server and client cache regions are empty.</P>
+<P> When you run the example it will:</P>
+<UL>
+<LI CLASS="Bulleted">Get entries.<br>
+  These result in client cache misses, so the client forwards   the request to the server. The server's loader runs to satisfy its   cache misses. You also see server and client listeners reporting on the   new cache entries.<br>
+  <br>
+</LI>
+<LI CLASS="Bulleted">Modify the cache.<br>
+  The client entry updates and destroys are forwarded to   the server by the client's cache writer. Client entry invalidates are not   forwarded. Again, the listeners on both sides report the cache activity.<br>
+</LI>
+</UL>
+</DIV>
+
+<DIV>
+<H2>
+<a name="configuring_environment" id="configuring_environment"></a>Configuring the Environment </H2>
+<P>
+Examples that interact with a Java cache server require specific environment configurations so the Java cache server will run properly. Follow the configuration steps listed below that apply to your operating system: </P>
+</DIV>
+ <DIV>
+<ol>
+  <li>From the GemFire product installation directory, configure your environment settings by following the steps in <code>examples/EnvSetup.html</code>. Refer to the User's 
+      Guide if you need help with this step.<br>
+      <br>
+  <li>Set the <code>JAVA_HOME</code> and <code>GF_JAVA_HOME</code>  environment variables to your installed Java JRE or JDK. See the Installation chapter of the   <em>GemFire Users's Guide</em> for the versions of Java that are compatible with GemFire. The <code>JAVA_HOME</code> setting is for your applications, and  <code>GF_JAVA_HOME</code> is for the GemFire scripts. You must have a compatible Java JRE or JDK installed and you must set <code>JAVA_HOME</code> and <code>GF_JAVA_HOME</code> to point to it.<br>
+      <br>
+  <li>Add <code>$JAVA_HOME/bin</code> to the start of your <code>PATH</code>. <br>
+  <br>
+  <li>Add the GemFire quickstart classes to your <code>CLASSPATH</code>. <br>
+  <blockquote>
+  <p><strong> <code><strong>set CLASSPATH=%GEMFIRE%\quickstart\classes;%CLASSPATH%</strong></code></strong></p>
+</blockquote>  
+</ol>
+<p>The following is a list of the environment configuration commands for the <code>HierarchicalClient</code> example. Choose the set of commands that are appropriate for your operating system. The text that you type is shown in bold.
+  These configurations only need to be performed for the sessions that invoke the Java cache server.</p>
+<p><strong>Bourne and Korn shells (sh, ksh, bash)</strong></p>
+<blockquote>
+  <p>    <code>% <strong>cd GemFireInstallDirectory</strong><br>
+    % <strong>CLASSPATH=$CLASSPATH:$GEMFIRE/quickstart/classes; export CLASSPATH</strong><br>
+    % <strong>cd $GEMFIRE/quickstart</strong><br>
+    % <strong>JAVA_HOME=&lt;Installed JRE PATH&gt;; export JAVA_HOME</strong><br>
+    % <strong>GF_JAVA_HOME=$JAVA_HOME; export GF_JAVA_HOME</strong><br>
+    % <strong>PATH=$JAVA_HOME/bin:$PATH; export PATH</strong></code></p>
+</blockquote>
+<p><strong>Windows</strong></p>
+<blockquote>
+  <p><code>&gt; <strong>cd GemFireInstallDirectory</strong><br>
+&gt; <strong>set CLASSPATH=%GEMFIRE%\quickstart\classes;%CLASSPATH%</strong><br>
+&gt; <strong>cd %GEMFIRE%\quickstart</strong><br>
+&gt; <strong>set JAVA_HOME=&lt;Installed JRE PATH&gt;</strong><br>
+&gt; <strong>set GF_JAVA_HOME=%JAVA_HOME%</strong><br>
+&gt; <strong>set PATH=%JAVA_HOME%\bin;%PATH%</strong> </code></p>
+</blockquote>
+</DIV>
+
+<DIV>
+<H2>
+Starting HierarchicalClient </H2>
+<P>
+To run the <code>HierarchicalClient</code> example, create a session from the GemFire product directory and complete the following steps.</P>
+<P>This first session starts the Java cache server. </P>
+</DIV>
+ <DIV>
+<OL>
+<LI CLASS="Numbered-1st"><p>
+Configure the session environment according to the steps listed in <a href="#configuring_environment">Configuring the Environment</a><a href="../envsetup.html" target="_blank"></a>.</p>
+</LI>
+
+<LI CLASS="Numbered-1st">If you have not already done so, go to the <code>%GEMFIRE%/quickstart</code> directory.</LI>
+  <blockquote>
+    <p><strong>
+      <code>cd %GEMFIRE%/quickstart</code></strong></p>
+    </blockquote>
+<LI CLASS="Numbered">Enter this command to start the Java cache server:
+  
+  <blockquote>
+    <p><strong>
+      <code>java quickstart.HierarchicalServer</code></strong></p>
+     </blockquote>
+  <P>The server creates <code>/root/exampleRegion</code> and prompts you to start the <code>HierarchicalClient</code> application.</P>
+</LI>
+<LI CLASS="Numbered">
+Create another session and go to the <code>cli_HierarchicalClient</code> example directory:
+  <blockquote>
+    <p><strong><code>cd examples\cli_HierarchicalClient</code></strong></p>
+  </blockquote>
+  <li>
+    Start the <code>HierarchicalClient</code> application:</li>
+  <blockquote>
+   <p><strong>
+     <code>HierarchicalClient.exe</code></strong></p>
+   </blockquote>	
+</OL>
+<br>
+</DIV>
+
+<DIV>
+<H2>
+Running the Example </H2>
+<P>
+The client session does a <code>get</code> for <code>Key0</code>, <code>Key1</code>, <code>Key2</code>, and <code>Key3</code>, then forwards the requests to the cache server. The server session reports that the values have been retrieved.</P>
+</DIV>
+<DIV>
+<P><strong>
+In the client session</strong></P>
+<blockquote>
+  <p>
+    Press <code>Enter</code>, as prompted. The client session reports a series of entry updates and destroys, which are forwarded to the cache server.</p>
+  </blockquote>
+<p><strong>In the server session</strong></p>
+<blockquote>
+  <p>
+    The listener for the cache server reports create, update, and destroy events resulting from the modified entries.
+  </p>
+</blockquote>
+<p><strong>In the client session</strong></p>
+<blockquote>
+  <p>
+    Press <code>Enter</code> to end the application, then type <strong><code>Exit</code></strong> to close the session.  </p>
+</blockquote>
+<p><strong>In the server session</strong></p>
+<blockquote>
+  <p>Press <code>Enter</code> to end the cache server, then type <strong><code>Exit</code></strong> to close the session.  </p>
+</blockquote>
+</DIV>
+<DIV>
+<H2>
+Changing System Parameters</H2>
+<P>This product ships configured to run with default system properties. If you need to run in a non-default configuration, GemFire also takes a system-level configuration file. To configure a .NET client, rename any <code>gfcpp.properties</code> file currently in the example directory, then copy <code>gfcpp.properties</code> file into your <code>cli_HierarchicalClient</code> directory from the <code>defaultSystem</code> directory. Edit the <code>gfcpp.properties</code> file in your <code>cli_HierarchicalClient</code> directory, as needed.</P>
+<P>If you also need to make a non-default configuration for the Java cache server, rename any <code>gemfire.properties</code> file currently in the <code>%GEMFIRE%/quickstart</code>, then copy <code>gemfire.properties</code> into the <code>/quickstart</code> directory from the <code>%GEMFIRE%/defaultConfigs</code> directory and edit it. For example, to change the name of the <code>cache.xml</code> file, uncomment this line and change the file name:</P>
+<P> <code>#cache-xml-file=cache.xml</code></P>
+<P>When you're done with the example, delete your edited versions of <code>gemfire.properties</code> and <code>gfcpp.properties</code>, then restore the renamed original versions to their original names so other examples can use the unedited files.</P>
+</DIV>
+<a href="#Top">Top</a>
+<P>
+<br>
+Copyright &#169; 2005-2014 Pivotal Software, Inc. All rights reserved. This product is protected by U.S. and international copyright and intellectual property laws. Pivotal products are covered by one or more patents listed at http://www.pivotal.io/patents.
+</BODY>
+</HTML>
+

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Form1.Designer.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Form1.Designer.cs b/geode-client-native/examples/clicache/ProductBrowser/Form1.Designer.cs
new file mode 100755
index 0000000..9437a85
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Form1.Designer.cs
@@ -0,0 +1,364 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *========================================================================
+ */
+
+namespace ProductBrowser
+{
+  partial class ProductBrowser
+  {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+      this.lblProdId = new System.Windows.Forms.Label();
+      this.txtProdId = new System.Windows.Forms.TextBox();
+      this.txtProdName = new System.Windows.Forms.TextBox();
+      this.lblProdName = new System.Windows.Forms.Label();
+      this.txtProdNum = new System.Windows.Forms.TextBox();
+      this.lblProdNum = new System.Windows.Forms.Label();
+      this.txtStock = new System.Windows.Forms.TextBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.txtReorder = new System.Windows.Forms.TextBox();
+      this.label2 = new System.Windows.Forms.Label();
+      this.txtCost = new System.Windows.Forms.TextBox();
+      this.label3 = new System.Windows.Forms.Label();
+      this.txtList = new System.Windows.Forms.TextBox();
+      this.label4 = new System.Windows.Forms.Label();
+      this.txtMfgDays = new System.Windows.Forms.TextBox();
+      this.label5 = new System.Windows.Forms.Label();
+      this.label6 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
+      this.btnCreate = new System.Windows.Forms.Button();
+      this.btnSearch = new System.Windows.Forms.Button();
+      this.txtSellDate = new System.Windows.Forms.TextBox();
+      this.txtDiscDate = new System.Windows.Forms.TextBox();
+      this.btnClear = new System.Windows.Forms.Button();
+      this.txtEvent = new System.Windows.Forms.TextBox();
+      this.btnDestroy = new System.Windows.Forms.Button();
+      this.btnInvalidate = new System.Windows.Forms.Button();
+      this.label8 = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // lblProdId
+      // 
+      this.lblProdId.AutoSize = true;
+      this.lblProdId.Location = new System.Drawing.Point(44, 52);
+      this.lblProdId.Name = "lblProdId";
+      this.lblProdId.Size = new System.Drawing.Size(56, 13);
+      this.lblProdId.TabIndex = 0;
+      this.lblProdId.Text = "Product Id";
+      // 
+      // txtProdId
+      // 
+      this.txtProdId.Location = new System.Drawing.Point(134, 45);
+      this.txtProdId.Name = "txtProdId";
+      this.txtProdId.Size = new System.Drawing.Size(100, 20);
+      this.txtProdId.TabIndex = 1;
+      // 
+      // txtProdName
+      // 
+      this.txtProdName.Location = new System.Drawing.Point(134, 86);
+      this.txtProdName.Name = "txtProdName";
+      this.txtProdName.Size = new System.Drawing.Size(100, 20);
+      this.txtProdName.TabIndex = 3;
+      // 
+      // lblProdName
+      // 
+      this.lblProdName.AutoSize = true;
+      this.lblProdName.Location = new System.Drawing.Point(44, 93);
+      this.lblProdName.Name = "lblProdName";
+      this.lblProdName.Size = new System.Drawing.Size(75, 13);
+      this.lblProdName.TabIndex = 2;
+      this.lblProdName.Text = "Product Name";
+      // 
+      // txtProdNum
+      // 
+      this.txtProdNum.Location = new System.Drawing.Point(134, 124);
+      this.txtProdNum.Name = "txtProdNum";
+      this.txtProdNum.Size = new System.Drawing.Size(100, 20);
+      this.txtProdNum.TabIndex = 5;
+      // 
+      // lblProdNum
+      // 
+      this.lblProdNum.AutoSize = true;
+      this.lblProdNum.Location = new System.Drawing.Point(44, 131);
+      this.lblProdNum.Name = "lblProdNum";
+      this.lblProdNum.Size = new System.Drawing.Size(84, 13);
+      this.lblProdNum.TabIndex = 4;
+      this.lblProdNum.Text = "Product Number";
+      // 
+      // txtStock
+      // 
+      this.txtStock.Location = new System.Drawing.Point(134, 168);
+      this.txtStock.Name = "txtStock";
+      this.txtStock.Size = new System.Drawing.Size(100, 20);
+      this.txtStock.TabIndex = 7;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(44, 175);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(56, 13);
+      this.label1.TabIndex = 6;
+      this.label1.Text = "Stock Amt";
+      // 
+      // txtReorder
+      // 
+      this.txtReorder.Location = new System.Drawing.Point(134, 201);
+      this.txtReorder.Name = "txtReorder";
+      this.txtReorder.Size = new System.Drawing.Size(100, 20);
+      this.txtReorder.TabIndex = 9;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(44, 208);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(66, 13);
+      this.label2.TabIndex = 8;
+      this.label2.Text = "Reorder Amt";
+      // 
+      // txtCost
+      // 
+      this.txtCost.Location = new System.Drawing.Point(134, 237);
+      this.txtCost.Name = "txtCost";
+      this.txtCost.Size = new System.Drawing.Size(100, 20);
+      this.txtCost.TabIndex = 11;
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(44, 244);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(28, 13);
+      this.label3.TabIndex = 10;
+      this.label3.Text = "Cost";
+      // 
+      // txtList
+      // 
+      this.txtList.Location = new System.Drawing.Point(134, 279);
+      this.txtList.Name = "txtList";
+      this.txtList.Size = new System.Drawing.Size(100, 20);
+      this.txtList.TabIndex = 13;
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(44, 286);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(50, 13);
+      this.label4.TabIndex = 12;
+      this.label4.Text = "List Price";
+      // 
+      // txtMfgDays
+      // 
+      this.txtMfgDays.Location = new System.Drawing.Point(134, 318);
+      this.txtMfgDays.Name = "txtMfgDays";
+      this.txtMfgDays.Size = new System.Drawing.Size(100, 20);
+      this.txtMfgDays.TabIndex = 15;
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(44, 325);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(64, 13);
+      this.label5.TabIndex = 14;
+      this.label5.Text = "Days to Mfg";
+      // 
+      // label6
+      // 
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(44, 360);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(50, 13);
+      this.label6.TabIndex = 16;
+      this.label6.Text = "Sell Date";
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(44, 396);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(89, 13);
+      this.label7.TabIndex = 18;
+      this.label7.Text = "Discontinue Date";
+      // 
+      // btnCreate
+      // 
+      this.btnCreate.Location = new System.Drawing.Point(319, 447);
+      this.btnCreate.Name = "btnCreate";
+      this.btnCreate.Size = new System.Drawing.Size(75, 23);
+      this.btnCreate.TabIndex = 20;
+      this.btnCreate.Text = "Put";
+      this.btnCreate.UseVisualStyleBackColor = true;
+      this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click);
+      // 
+      // btnSearch
+      // 
+      this.btnSearch.Location = new System.Drawing.Point(238, 447);
+      this.btnSearch.Name = "btnSearch";
+      this.btnSearch.Size = new System.Drawing.Size(75, 23);
+      this.btnSearch.TabIndex = 23;
+      this.btnSearch.Text = "Get";
+      this.btnSearch.UseVisualStyleBackColor = true;
+      this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
+      // 
+      // txtSellDate
+      // 
+      this.txtSellDate.Location = new System.Drawing.Point(134, 360);
+      this.txtSellDate.Name = "txtSellDate";
+      this.txtSellDate.Size = new System.Drawing.Size(100, 20);
+      this.txtSellDate.TabIndex = 24;
+      // 
+      // txtDiscDate
+      // 
+      this.txtDiscDate.Location = new System.Drawing.Point(134, 396);
+      this.txtDiscDate.Name = "txtDiscDate";
+      this.txtDiscDate.Size = new System.Drawing.Size(100, 20);
+      this.txtDiscDate.TabIndex = 25;
+      // 
+      // btnClear
+      // 
+      this.btnClear.Location = new System.Drawing.Point(562, 447);
+      this.btnClear.Name = "btnClear";
+      this.btnClear.Size = new System.Drawing.Size(75, 23);
+      this.btnClear.TabIndex = 26;
+      this.btnClear.Text = "Clear";
+      this.btnClear.UseVisualStyleBackColor = true;
+      this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
+      // 
+      // txtEvent
+      // 
+      this.txtEvent.Location = new System.Drawing.Point(316, 45);
+      this.txtEvent.Multiline = true;
+      this.txtEvent.Name = "txtEvent";
+      this.txtEvent.Size = new System.Drawing.Size(321, 364);
+      this.txtEvent.TabIndex = 27;
+      // 
+      // btnDestroy
+      // 
+      this.btnDestroy.Location = new System.Drawing.Point(400, 447);
+      this.btnDestroy.Name = "btnDestroy";
+      this.btnDestroy.Size = new System.Drawing.Size(75, 23);
+      this.btnDestroy.TabIndex = 28;
+      this.btnDestroy.Text = "Destroy";
+      this.btnDestroy.UseVisualStyleBackColor = true;
+      this.btnDestroy.Click += new System.EventHandler(this.btnDestroy_Click);
+      // 
+      // btnInvalidate
+      // 
+      this.btnInvalidate.Location = new System.Drawing.Point(481, 447);
+      this.btnInvalidate.Name = "btnInvalidate";
+      this.btnInvalidate.Size = new System.Drawing.Size(75, 23);
+      this.btnInvalidate.TabIndex = 29;
+      this.btnInvalidate.Text = "Invalidate";
+      this.btnInvalidate.UseVisualStyleBackColor = true;
+      this.btnInvalidate.Click += new System.EventHandler(this.btnInvalidate_Click);
+      // 
+      // label8
+      // 
+      this.label8.AutoSize = true;
+      this.label8.Location = new System.Drawing.Point(316, 26);
+      this.label8.Name = "label8";
+      this.label8.Size = new System.Drawing.Size(81, 13);
+      this.label8.TabIndex = 30;
+      this.label8.Text = "Event Message";
+      // 
+      // ProductBrowser
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(673, 501);
+      this.Controls.Add(this.label8);
+      this.Controls.Add(this.btnInvalidate);
+      this.Controls.Add(this.btnDestroy);
+      this.Controls.Add(this.txtEvent);
+      this.Controls.Add(this.btnClear);
+      this.Controls.Add(this.txtDiscDate);
+      this.Controls.Add(this.txtSellDate);
+      this.Controls.Add(this.btnSearch);
+      this.Controls.Add(this.btnCreate);
+      this.Controls.Add(this.label7);
+      this.Controls.Add(this.label6);
+      this.Controls.Add(this.txtMfgDays);
+      this.Controls.Add(this.label5);
+      this.Controls.Add(this.txtList);
+      this.Controls.Add(this.label4);
+      this.Controls.Add(this.txtCost);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.txtReorder);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.txtStock);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.txtProdNum);
+      this.Controls.Add(this.lblProdNum);
+      this.Controls.Add(this.txtProdName);
+      this.Controls.Add(this.lblProdName);
+      this.Controls.Add(this.txtProdId);
+      this.Controls.Add(this.lblProdId);
+      this.Name = "ProductBrowser";
+      this.Text = "Product Browser";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label lblProdId;
+    private System.Windows.Forms.TextBox txtProdId;
+    private System.Windows.Forms.TextBox txtProdName;
+    private System.Windows.Forms.Label lblProdName;
+    private System.Windows.Forms.TextBox txtProdNum;
+    private System.Windows.Forms.Label lblProdNum;
+    private System.Windows.Forms.TextBox txtStock;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox txtReorder;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.TextBox txtCost;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.TextBox txtList;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.TextBox txtMfgDays;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.Button btnCreate;
+    private System.Windows.Forms.Button btnSearch;
+    private System.Windows.Forms.TextBox txtSellDate;
+    private System.Windows.Forms.TextBox txtDiscDate;
+    private System.Windows.Forms.Button btnClear;
+    private System.Windows.Forms.TextBox txtEvent;
+    private System.Windows.Forms.Button btnDestroy;
+    private System.Windows.Forms.Button btnInvalidate;
+    private System.Windows.Forms.Label label8;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Form1.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Form1.cs b/geode-client-native/examples/clicache/ProductBrowser/Form1.cs
new file mode 100755
index 0000000..5300f22
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Form1.cs
@@ -0,0 +1,342 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *========================================================================
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using GemStone.GemFire.Cache;
+
+namespace ProductBrowser
+{
+  public partial class ProductBrowser : Form, ICacheListener
+  {
+    //Cache cache = null;
+    GemStone.GemFire.Cache.Region prodRegion = null;
+    private string logLevel = "debug";
+    private string logFile = "productBrowserLog";
+
+    public ProductBrowser()
+    {
+      InitializeComponent();
+      Serializable.RegisterType(Product.CreateInstance);
+
+      /*
+       * Initialize Cache system properties
+       */      
+      GemStone.GemFire.Cache.Properties prop = GemStone.GemFire.Cache.Properties.Create();
+      prop.Insert("log-file", logFile);
+      prop.Insert("log-level", logLevel);
+      prop.Insert("name", "ProductCache");
+      CacheFactory cacheFactory = CacheFactory.CreateCacheFactory(prop);      
+
+      try
+      {
+        /*
+         * Create the GemFire Client cache
+         */
+
+        Cache cache = cacheFactory.SetSubscriptionEnabled(true).Create();
+
+        /*
+         * Specify required region attributes
+         */
+
+        RegionFactory regionFactory = cache.CreateRegionFactory(RegionShortcut.CACHING_PROXY);
+
+        /*
+         * Create the region and register interest in all keys
+         */
+         prodRegion = regionFactory
+          .SetCachingEnabled(true)
+          .SetCacheListener(this)
+          .Create("product");      
+
+         prodRegion.RegisterAllKeys();
+      }
+      catch (Exception e)
+      {
+        MessageBox.Show("Error during client initialization.  " + e.Message);
+      }
+
+    }
+
+    private void btnCreate_Click(object sender, EventArgs e)
+    {
+      Product prd = new Product();
+      prd.productId = Convert.ToInt32(txtProdId.Text);
+      prd.name = txtProdName.Text;
+      prd.productNumber = txtProdNum.Text;
+      prd.makeFlag = "false";
+      prd.finishedGoodsFlag = "false";
+      prd.color = "Black";
+      prd.safetyLockLevel = Convert.ToInt32(txtStock.Text);
+      prd.reorderPoint = Convert.ToInt32(txtReorder.Text);
+      prd.standardCost = Convert.ToDouble(txtCost.Text);
+      prd.listPrice = Convert.ToDouble(txtList.Text);
+      prd.daysToManufacture = Convert.ToInt32(txtMfgDays.Text);
+      prd.sellStartDate = txtSellDate.Text;
+      prd.discontinuedDate = txtDiscDate.Text;
+
+      try
+      {
+        // as the unique identifier is ProductId, we can use this as the key
+        CacheableString key = new CacheableString(txtProdId.Text);
+        prodRegion.Put(key, prd);
+      }
+      catch (Exception ex)
+      {
+        MessageBox.Show("Error creating a new product.  " + ex.Message);
+      }
+    }
+
+    private void btnSearch_Click(object sender, EventArgs e)
+    {
+      //  perform a search based upon the ProductId.  If the ProductId is not specified, thrown an exception.
+      if (txtProdId.Text == null)
+      {
+        MessageBox.Show("Searching enabled on Product ID only");
+      }
+      else
+      {
+        string prodId = txtProdId.Text;
+        clearTxtBoxes();
+        Product prod = (Product)prodRegion.Get(prodId);
+
+        if (prod == null)
+        {
+          MessageBox.Show("Unable to find a product with a ProductId of " + prodId);
+        }
+        else
+        {
+          txtProdId.Text = Convert.ToString(prodId);
+          txtProdName.Text = prod.name;
+          txtProdNum.Text = prod.productNumber;
+          txtStock.Text = Convert.ToString(prod.safetyLockLevel);
+          txtReorder.Text = Convert.ToString(prod.reorderPoint);
+          txtCost.Text = Convert.ToString(prod.standardCost);
+          txtList.Text = Convert.ToString(prod.listPrice);
+          txtMfgDays.Text = Convert.ToString(prod.daysToManufacture);
+          txtSellDate.Text = prod.sellStartDate;
+          txtDiscDate.Text = prod.discontinuedDate;
+        }
+      }
+    }
+
+    private void btnClear_Click(object sender, EventArgs e)
+    {
+      clearTxtBoxes();
+    }
+
+    private void clearTxtBoxes()
+    {
+      txtCost.Clear();
+      txtList.Clear();
+      txtMfgDays.Clear();
+      txtProdId.Clear();
+      txtProdName.Clear();
+      txtProdNum.Clear();
+      txtReorder.Clear();
+      txtStock.Clear();
+      txtSellDate.ResetText();
+      txtDiscDate.ResetText();
+      txtEvent.ResetText();
+    }
+
+
+    #region ICacheListener Members
+
+    public void AfterCreate(EntryEvent ev)
+    {
+      string createMessage;
+
+      ICacheableKey cKey = ev.Key;
+      CacheableString cStr = cKey as CacheableString;
+
+      Product newProd = (Product)ev.NewValue;
+
+      createMessage = string.Format("Product ID {1} has been created. " +
+        "Product details are:{0}\tProduct Name :  {2}{0}\tProduct Number :  " +
+        "{3}{0}\tColor :  {4}{0}\tStock Level :  {5}{0}\tReorder Point :  " +
+        "{6}{0}\tProduct Cost :  {7}{0}\tList Price :  " +
+        "{8}{0}\tAvailable as of :  {9}{0}\tDiscontinued as of :  {10}",
+        Environment.NewLine, cStr.Value, newProd.name, newProd.productNumber,
+        newProd.color, newProd.safetyLockLevel, newProd.reorderPoint,
+        newProd.standardCost, newProd.listPrice, newProd.sellStartDate,
+        newProd.discontinuedDate);
+    }
+
+    public void AfterDestroy(EntryEvent ev)
+    {
+      string destroyMessage;
+
+      ICacheableKey cKey = ev.Key;
+      CacheableString cStr = cKey as CacheableString;
+
+      destroyMessage = "Product ID " + cStr.Value + " has been destroyed";
+    }
+
+    public void AfterInvalidate(EntryEvent ev)
+    {
+      string invalidateMessage;
+
+      ICacheableKey cKey = ev.Key;
+      CacheableString cStr = cKey as CacheableString;
+
+      invalidateMessage = "Product ID " + cStr.Value + " has been invalidated";
+    }
+
+    public void AfterRegionDestroy(RegionEvent ev)
+    {
+      txtEvent.Text = ev.Region.Name + " has been destroyed";
+    }
+
+    public void AfterRegionClear(RegionEvent ev)
+    {
+      txtEvent.Text = ev.Region.Name + " has been cleared";
+    }
+
+    public void AfterRegionInvalidate(RegionEvent ev)
+    {
+      txtEvent.Text = ev.Region.Name + " has been invalidated";
+    }
+    /*
+     * AfterUpdate is invoked after an entry has been updated.  It provide access to the 
+     * old and new values of the entry
+     */
+    public void AfterUpdate(EntryEvent ev)
+    {
+      // text string containing the 'delta' between the two objects
+      string updateMessage = null;
+
+      try
+      {
+        ICacheableKey cKey = ev.Key;
+        CacheableString cStr = cKey as CacheableString;
+
+        updateMessage = "Product ID " + cStr.Value + " has been updated." +
+          Environment.NewLine;
+
+        Product newProduct = (Product)ev.NewValue;
+        Product oldProduct = (Product)ev.OldValue;
+
+        if (oldProduct != null)
+        {
+          updateMessage = updateMessage + Environment.NewLine +
+            "\tProduct Name :  " + oldProduct.name + " ---> " +
+              newProduct.name + Environment.NewLine +
+            "\tProduct Number :  " + oldProduct.productNumber + " ---> " +
+              newProduct.productNumber + Environment.NewLine +
+            "\tColor :  " + oldProduct.color + " ---> " +
+              newProduct.color + Environment.NewLine +
+            "\tStock Level :  " + oldProduct.safetyLockLevel + " ---> " +
+              newProduct.safetyLockLevel + Environment.NewLine +
+            "\tReorder Point :  " + oldProduct.reorderPoint + " ---> " +
+              newProduct.reorderPoint + Environment.NewLine +
+            "\tProduct Cost :  " + oldProduct.standardCost + " ---> " +
+              newProduct.standardCost + Environment.NewLine +
+            "\tList Price :  " + oldProduct.listPrice + " ---> " +
+              newProduct.listPrice + Environment.NewLine +
+            "\tAvailable as of :  " + oldProduct.sellStartDate + " ---> " +
+              newProduct.sellStartDate + Environment.NewLine +
+            "\tDiscontinued as of :  " + oldProduct.discontinuedDate + " ---> " +
+              newProduct.discontinuedDate + Environment.NewLine;
+
+          txtEvent.Text = updateMessage;
+        }
+        else
+        {
+          updateMessage = "Product ID " + cStr.Value + " has been updated. " +
+            "A prior value does not exist.  Product details are: " + Environment.NewLine + Environment.NewLine +
+            "\tProduct Name :  " + newProduct.name + Environment.NewLine +
+            "\tProduct Number :  " + newProduct.productNumber + Environment.NewLine +
+            "\tColor :  " + newProduct.color + Environment.NewLine +
+            "\tStock Level :  " + newProduct.safetyLockLevel + Environment.NewLine +
+            "\tReorder Point :  " + newProduct.reorderPoint + Environment.NewLine +
+            "\tProduct Cost :  " + newProduct.standardCost + Environment.NewLine +
+            "\tList Price :  " + newProduct.listPrice + Environment.NewLine +
+            "\tAvailable as of :  " + newProduct.sellStartDate + Environment.NewLine +
+            "\tDiscontinued as of :  " + newProduct.discontinuedDate + Environment.NewLine;
+        }
+      }
+      catch (Exception e)
+      {
+        txtEvent.Text = "AfterUpdate exception." +
+          Environment.NewLine + e.Message;
+      }
+    }
+
+    public void AfterRegionLive(RegionEvent ev)
+    {
+      txtEvent.Text = ev.Region.Name + " is live";
+    }
+
+    public void Close(GemStone.GemFire.Cache.Region region)
+    {
+      txtEvent.Text = region.Name + " has closed";
+    }
+    public void AfterRegionDisconnected(GemStone.GemFire.Cache.Region region)
+    {
+      txtEvent.Text = region.Name + " has disconnected";
+    }
+    #endregion
+
+    private void btnDestroy_Click(object sender, EventArgs e)
+    {
+      //  Destroy an entry based upon the ProductId (key).  If the ProductId is not specified, notify the user.
+      if (txtProdId.Text.Length == 0)
+      {
+        MessageBox.Show("Please specify a Product Id to destroy.");
+      }
+      else
+      {
+        string prodId = txtProdId.Text;
+
+        try
+        {
+          prodRegion.Destroy(prodId);
+          clearTxtBoxes();
+        }
+        catch (Exception re)
+        {
+          MessageBox.Show("Unable to destroy entry." +
+            Environment.NewLine + re.Message);
+        }
+      }
+    }
+
+    private void btnInvalidate_Click(object sender, EventArgs e)
+    {
+      //  Invalidate an entry based upon the ProductId (key).  If the ProductId is not specified, notify the user.
+      if (txtProdId.Text.Length == 0)
+      {
+        MessageBox.Show("Please specify a Product Id to invalidate.");
+      }
+      else
+      {
+        string prodId = txtProdId.Text;
+
+        try
+        {
+          prodRegion.Invalidate(prodId);
+          clearTxtBoxes();
+        }
+        catch (Exception re)
+        {
+          MessageBox.Show("Unable to invalidate entry." +
+            Environment.NewLine + re.Message);
+        }
+      }
+
+    }
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Form1.resx
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Form1.resx b/geode-client-native/examples/clicache/ProductBrowser/Form1.resx
new file mode 100755
index 0000000..19dc0dd
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Form1.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Product.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Product.cs b/geode-client-native/examples/clicache/ProductBrowser/Product.cs
new file mode 100755
index 0000000..8b3e764
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Product.cs
@@ -0,0 +1,293 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *========================================================================
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using GemStone.GemFire.Cache;
+
+namespace ProductBrowser
+{
+  class Product : IGFSerializable
+  {
+    private int ProductID;
+    private string Name;
+    private string ProductNumber;
+    private string MakeFlag;
+    private string FinishedGoodsFlag;
+    private string Color;
+    private int SafetyStockLevel;
+    private int ReorderPoint;
+    private double StandardCost;
+    private double ListPrice;
+    private int DaysToManufacture;
+    private string SellStartDate;
+    private string DiscontinuedDate;
+
+    private UInt32 GetStringSize(string str)
+    {
+      return (UInt32)(str == null ? 0 : sizeof(char) * str.Length);
+    }
+
+    public Product()
+    {
+    }
+
+    public Product(int prodId, string prodName, string prodNum, string makeFlag, string finished, string color,
+                    int safetyLock, int reorderPt, double stdCost, double listPrice, int mfgDays,
+                    string startDate, string discDate)
+    {
+      ProductID = prodId;
+      Name = prodName;
+      ProductNumber = prodNum;
+      MakeFlag = makeFlag;
+      FinishedGoodsFlag = finished;
+      Color = color;
+      SafetyStockLevel = safetyLock;
+      ReorderPoint = reorderPt;
+      StandardCost = stdCost;
+      ListPrice = listPrice;
+      DaysToManufacture = mfgDays;
+      SellStartDate = startDate;
+      DiscontinuedDate = discDate;
+    }
+
+    public static IGFSerializable CreateInstance()
+    {
+      return new Product(0, null, null, Convert.ToString(false), Convert.ToString(false), null, 1000, 750, 0.00, 0.00, 5,
+                          Convert.ToString(DateTime.Now), Convert.ToString(DateTime.Now));
+    }
+
+    public int productId
+    {
+      get
+      {
+        return ProductID;
+      }
+      set
+      {
+        ProductID = value;
+      }
+    }
+
+    public string name
+    {
+      get
+      {
+        return Name;
+      }
+      set
+      {
+        Name = value;
+      }
+    }
+
+    public string productNumber
+    {
+      get
+      {
+        return ProductNumber;
+      }
+      set
+      {
+        ProductNumber = value;
+      }
+    }
+
+    public string makeFlag
+    {
+      get
+      {
+        return MakeFlag;
+      }
+      set
+      {
+        MakeFlag = value;
+      }
+    }
+
+    public string finishedGoodsFlag
+    {
+      get
+      {
+        return FinishedGoodsFlag;
+      }
+      set
+      {
+        FinishedGoodsFlag = value;
+      }
+    }
+
+    public string color
+    {
+      get
+      {
+        return Color;
+      }
+      set
+      {
+        Color = value;
+      }
+    }
+
+    public int safetyLockLevel
+    {
+      get
+      {
+        return SafetyStockLevel;
+      }
+      set
+      {
+        SafetyStockLevel = value;
+      }
+    }
+
+    public int reorderPoint
+    {
+      get
+      {
+        return ReorderPoint;
+      }
+      set
+      {
+        ReorderPoint = value;
+      }
+    }
+
+    public double standardCost
+    {
+      get
+      {
+        return StandardCost;
+      }
+      set
+      {
+        StandardCost = value;
+      }
+    }
+
+    public double listPrice
+    {
+      get
+      {
+        return ListPrice;
+      }
+      set
+      {
+        ListPrice = value;
+      }
+    }
+
+    public int daysToManufacture
+    {
+      get
+      {
+        return DaysToManufacture;
+      }
+      set
+      {
+        DaysToManufacture = value;
+      }
+    }
+
+    public string sellStartDate
+    {
+      get
+      {
+        return SellStartDate;
+      }
+      set
+      {
+        SellStartDate = value;
+      }
+    }
+
+    public string discontinuedDate
+    {
+      get
+      {
+        return DiscontinuedDate;
+      }
+      set
+      {
+        DiscontinuedDate = value;
+      }
+    }
+
+    #region IGFSerializable Members
+
+    public UInt32 ClassId
+    {
+      get
+      {
+        return 0x07;
+      }
+    }
+
+    public IGFSerializable FromData(DataInput input)
+    {
+      ProductID = input.ReadInt32();
+      Name = input.ReadUTF();
+      ProductNumber = input.ReadUTF();
+      MakeFlag = input.ReadUTF();
+      FinishedGoodsFlag = input.ReadUTF();
+      Color = input.ReadUTF();
+      SafetyStockLevel = input.ReadInt32();
+      ReorderPoint = input.ReadInt32();
+      StandardCost = input.ReadDouble();
+      ListPrice = input.ReadDouble();
+      DaysToManufacture = input.ReadInt32();
+      SellStartDate = input.ReadUTF();
+      DiscontinuedDate = input.ReadUTF();
+
+      return this;
+
+    }
+
+    public void ToData(DataOutput output)
+    {
+      output.WriteInt32(ProductID);
+      output.WriteUTF(Name);
+      output.WriteUTF(ProductNumber);
+      output.WriteUTF(MakeFlag);
+      output.WriteUTF(FinishedGoodsFlag);
+      output.WriteUTF(Color);
+      output.WriteInt32(SafetyStockLevel);
+      output.WriteInt32(ReorderPoint);
+      output.WriteDouble(StandardCost);
+      output.WriteDouble(ListPrice);
+      output.WriteInt32(DaysToManufacture);
+      output.WriteUTF(SellStartDate);
+      output.WriteUTF(DiscontinuedDate);
+    }
+
+    public UInt32 ObjectSize
+    {
+      get
+      {
+        UInt32 objectSize = 0;
+        objectSize += (UInt32)sizeof(Int32);
+        objectSize += GetStringSize(Name);
+        objectSize += GetStringSize(ProductNumber);
+        objectSize += GetStringSize(MakeFlag);
+        objectSize += GetStringSize(FinishedGoodsFlag);
+        objectSize += GetStringSize(Color);
+        objectSize += (UInt32)sizeof(Int32);
+        objectSize += (UInt32)sizeof(Int32);
+        objectSize += (UInt32)sizeof(double);
+        objectSize += (UInt32)sizeof(double);
+        objectSize += (UInt32)sizeof(double);
+        objectSize += GetStringSize(SellStartDate);
+        objectSize += GetStringSize(DiscontinuedDate);
+        return objectSize;
+      }
+    }
+
+    #endregion
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/ProductBrowser.csproj
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/ProductBrowser.csproj b/geode-client-native/examples/clicache/ProductBrowser/ProductBrowser.csproj
new file mode 100755
index 0000000..9f580a4
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/ProductBrowser.csproj
@@ -0,0 +1,120 @@
+\ufeff<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{7C77A471-0334-49DF-ABE5-B1799428B8AC}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>GemStone.GemFire.Cache.Examples</RootNamespace>
+    <AssemblyName>ProductBrowser</AssemblyName>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <IntermediateOutputPath>$(OSBUILDDIR)\examples\clicache\Debug\ProductBrowser\</IntermediateOutputPath>
+    <OutputPath>$(OSBUILDDIR)\examples\clicache\Debug\ProductBrowser\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+    <NoWarn>618</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <IntermediateOutputPath>$(OSBUILDDIR)\examples\clicache\ProductBrowser\</IntermediateOutputPath>
+    <OutputPath>$(OSBUILDDIR)\examples\clicache\ProductBrowser\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+    <NoWarn>618</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <IntermediateOutputPath>$(OSBUILDDIR)\examples\clicache\Debug\ProductBrowser\</IntermediateOutputPath>
+    <OutputPath>$(OSBUILDDIR)\examples\clicache\Debug\ProductBrowser\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoWarn>618</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <IntermediateOutputPath>$(OSBUILDDIR)\examples\clicache\ProductBrowser\</IntermediateOutputPath>
+    <OutputPath>$(OSBUILDDIR)\examples\clicache\ProductBrowser\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoWarn>618</NoWarn>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\vs_projects\gfclicache\gfclicache.vcproj">
+      <Project>{B274E3B1-6A09-4322-952B-8BDA712892CE}</Project>
+      <Name>gfclicache</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Product.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Program.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Program.cs b/geode-client-native/examples/clicache/ProductBrowser/Program.cs
new file mode 100755
index 0000000..4d6c758
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Program.cs
@@ -0,0 +1,28 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *========================================================================
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace ProductBrowser
+{
+  static class Program
+  {
+    /// <summary>
+    /// The main entry point for the application.
+    /// </summary>
+    [STAThread]
+    static void Main()
+    {
+      Application.EnableVisualStyles();
+      Application.SetCompatibleTextRenderingDefault(false);
+      Application.Run(new ProductBrowser());
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Properties/AssemblyInfo.cs b/geode-client-native/examples/clicache/ProductBrowser/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..64c4fa9
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+\ufeffusing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ProductBrowser")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("GemStone Systems, Inc.")]
+[assembly: AssemblyProduct("ProductBrowser")]
+[assembly: AssemblyCopyright("Copyright � GemStone Systems, Inc. 2008")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5f89d3ba-58b8-46d9-b61d-744b82704cf6")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("9.0.0.0")]
+[assembly: AssemblyFileVersion("9.0.0.0")]

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.Designer.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.Designer.cs b/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.Designer.cs
new file mode 100755
index 0000000..f27808e
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+\ufeff//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GemStone.GemFire.Cache.Examples.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GemStone.GemFire.Cache.Examples.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.resx
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.resx b/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.resx
new file mode 100755
index 0000000..af7dbeb
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Properties/Resources.resx
@@ -0,0 +1,117 @@
+\ufeff<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.Designer.cs
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.Designer.cs b/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.Designer.cs
new file mode 100755
index 0000000..4ff0889
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+\ufeff//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GemStone.GemFire.Cache.Examples.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.settings
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.settings b/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.settings
new file mode 100755
index 0000000..abf36c5
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/Properties/Settings.settings
@@ -0,0 +1,7 @@
+\ufeff<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/examples/clicache/ProductBrowser/README.html
----------------------------------------------------------------------
diff --git a/geode-client-native/examples/clicache/ProductBrowser/README.html b/geode-client-native/examples/clicache/ProductBrowser/README.html
new file mode 100644
index 0000000..bd2eed5
--- /dev/null
+++ b/geode-client-native/examples/clicache/ProductBrowser/README.html
@@ -0,0 +1,377 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
+<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 7.0/HTML Export Filter">
+
+<TITLE>ProductBrowser: GemFire Native&#174; Client Example</TITLE>
+<style type="text/css">
+<!--
+.style1 {font-style: italic}
+-->
+</style>
+</HEAD>
+<BODY>
+ <IMG SRC="../../../docs/PIVOTAL_GemFire_190x81.png" BORDER="0">
+ <DIV>
+   <h1 align="center"><a name="Top" id="Top"></a>ProductBrowser</h1>
+   <h2 align="center">Pivotal GemFire&#174; Native Client</h2>
+   <h2 align="center">Programming Example</h2>
+</DIV>
+<DIV>
+<P>The <code>ProductBrowser</code> example demonstrates heterogeneous client access by using both a .NET client and a Java client to interact with a Java cache server and exchange data between the clients. Both clients have <code>Product</code> for their <code>DataSerializable</code> class, and the .NET client implements a cache listener to display events as they occur.
+<P>Use <code>ProductBrowser</code> to put product data into the cache server from one client, retrieve the data in another client, make modifications, then update the clients with the new data. The example is located in <code>examples/cli_ProductBrowser.<br>
+  </code><br>
+  <br>
+</DIV>
+ <DIV>
+<H2>
+Running ProductBrowser</H2>
+<P>
+The <code>ProductBrowser</code> example runs both a .NET client and a Java client with a GemFire Java cache server. The example uses <code><a href="./product.xml" target="_blank">product.xml</a></code> to configure the Java cache server. When the Java cache server starts, <code>product.xml</code> creates a <code>root</code> region named <code>product</code>.</P>
+<P>
+In the procedures, the lines you type are shown in a
+ <code> <strong>boldface fixed</strong></code> font. System output is in a <code>regular fixed</code> font.<br>
+ <br>
+ <br>
+</P> 
+</DIV>
+
+<DIV>
+<H2>
+<a name="configuring_environment" id="configuring_environment"></a>Configuring the Environment </H2>
+<P>
+Examples that interact with a Java cache server require specific environment configurations so the Java cache server will run properly. Follow the configuration steps listed below that apply to your operating system: </P>
+</DIV>
+ <DIV>
+<ol>
+  <li>From the GemFire product installation directory, configure your environment settings by following the steps in <code>examples/EnvSetup.html</code>. Refer to the developer's 
+      guide if you need help with this step.<br>
+      <br>
+  <li>Set the <code>JAVA_HOME</code> and <code>GF_JAVA_HOME</code>  environment variables to your installed Java JRE or JDK. See the Installation chapter of the   <em>GemFire User's Guide</em> for the versions of Java that are compatible with GemFire. The <code>JAVA_HOME</code> setting is for your applications, and  <code>GF_JAVA_HOME</code> is for the GemFire scripts.  You must have a compatible Java JRE or JDK installed and you must set <code>JAVA_HOME</code> and <code>GF_JAVA_HOME</code> to point to it.<br>
+      <br>
+  <li>Add <code>$JAVA_HOME/bin</code> to the start of your <code>PATH</code>. <br>
+</ol>
+<p>The following is a list of the environment configuration commands for the <code>ProductBrowser</code> example. Choose the set of commands that are appropriate for your operating system. The text that you type is shown in bold.
+  These configurations only need to be performed for the sessions that invoke the Java cache server.</p>
+<p><strong>Bourne and Korn shells (sh, ksh, bash)</strong></p>
+<blockquote>
+  <p>    <code>% <strong>cd GemFireInstallDirectory</strong><br>
+    % <strong>JAVA_HOME=&lt;installed JRE PATH&gt;; export JAVA_HOME</strong><br>
+    % <strong>GF_JAVA_HOME=$JAVA_HOME; export GF_JAVA_HOME</strong><br>
+    % <strong>PATH=$JAVA_HOME/bin:$PATH; export PATH</strong></code></p>
+</blockquote>
+<p><strong>Windows</strong></p>
+<blockquote>
+  <p><code>&gt; <strong>cd GemFireInstallDirectory</strong><br>
+&gt; <strong>set JAVA_HOME=&lt;installed JRE PATH&gt;</strong><br>
+&gt; <strong>set GF_JAVA_HOME=%JAVA_HOME%</strong><br>
+&gt; <strong>set PATH=%JAVA_HOME%\bin;%PATH%</strong> </code></p>
+</blockquote>
+</DIV>
+
+<DIV>
+<H2>
+<a name="starting_application_processes" id="starting_application_processes"></a>Starting the Cache Server </H2>
+<P>
+To start the cache server for the <code>ProductBrowser</code> example, create a session and complete the following steps. </P>
+</DIV>
+ <DIV>
+<OL>
+<LI CLASS="Numbered-1st">
+<p>Configure the session environment according to the steps listed in <a href="#configuring_environment">Configuring the Environment</a><a href="..\EnvSetup.html" target="_blank"></a>.</p>
+</LI>
+<LI CLASS="Numbered">
+Go to the <code>cli_ProductBrowser</code> directory:
+ <blockquote>
+   <p><strong>
+     <code>cd examples\cli_ProductBrowser</code></strong></p>
+   </blockquote>
+ </LI>
+<LI CLASS="Numbered">
+Start the cache server, specifying <code>product.xml</code> in the <code>defaultConfig</code> directory as its configuration file. Enter the entire <code>cacheserver start</code> command below on a single line, replacing the <code>xxxx</code> in <code>NativeClient_xxxx</code> with the actual four-digit product version:
+   <blockquote>
+     <p><strong><code>cacheserver start -dir=</code></strong><strong><code>defaultConfig cache-xml-file=product.xml</code></strong></p>
+   </blockquote>
+ <P>The cache server is initialized using the settings in the <code>product.xml</code> file. A message similar to the following appears, indicating that the cache server is running:</P>
+</LI>
+ <blockquote>
+   <p>
+     <code>Cacheserver pid: 2120 status: running</code></p>
+   </blockquote>
+</OL>
+</DIV>
+
+<DIV>
+<H2>
+<a name="starting_application_processes" id="starting_application_processes"></a>Starting the ProductBrowser Java client </H2>
+<P>
+The Java client uses <code>productClient.jar</code> in the <code>lib</code> directory. To start the </code>Java client:</P>
+</DIV>
+
+ <DIV>
+<OL>
+<LI CLASS="Numbered-1st">
+<p>Create another session and configure its environment
+  by entering the following command:
+</LI>
+  <blockquote>
+   <p><strong>
+     <code>bin\setenv.bat</code></strong></p>
+   </blockquote>
+ <LI CLASS="Numbered-1st">
+   <p>Add the classes for <code>productClient.jar</code> to your <code>CLASSPATH</code> by entering the following in a single line: </p>
+ </LI>
+  <blockquote>
+   <p><strong>
+     <code>set CLASSPATH=&lt;full path to NativeClient_xxxx&gt;\examples\cli_ProductBrowser\<br>
+     lib\productClient.jar;%CLASSPATH%</code></strong></p>
+   </blockquote>
+ <LI CLASS="Numbered">
+Start the <code> ProductBrowser</code>
+ Java client:
+     <blockquote>
+       <p><strong><code>java com.examples.gemfire.net.ProductBrowser</code></strong> </p>
+   </blockquote>
+ <P>The <code>ProductBrowser</code> Java client is initialized and connects with the cache server. In a moment, the following prompt appears:</P>
+</LI>
+ <blockquote>
+   <p>
+     <code>Enter the operation to execute.  'Get' to find an object, 'Put' to insert/update  an object, or 'Exit' to end:</code></p>
+   </blockquote>
+</OL>
+<br>
+</DIV>
+
+<DIV>
+<H2>Starting the ProductBrowser .NET Client</H2>
+<P>
+To complete the client setup, start the .NET client by following these steps:</P>
+</DIV>
+<DIV>
+  <OL>
+  <li>Create another session, then go to the <code>cli_ProductBrowser</code> directory.
+    <blockquote>
+   <p><strong><code>cd examples\cli_ProductBrowser</code></strong></p>
+   </blockquote>
+ </li>
+
+  <LI CLASS="Numbered">
+    Start the .NET client:
+      <blockquote>
+        <p><strong>
+          <code>ProductBrowser.exe</code></strong></p>
+      </blockquote>
+      <P>
+      The Product Browser form appears. The form consists of a set of fields where you enter product data. The Event Message area is a cache listener interface that displays events as they occur in the clients. </P>
+  </LI>
+  </OL>
+</DIV>
+<DIV>
+<H2>
+Entering Data in the Product Browser Form </H2>
+<P>
+Enter data in the Product Browser form and put the data into the cache.</P>
+</DIV>
+<DIV>
+<P CLASS="Head-D"><strong>
+In the Product Browser form: </strong></P>
+
+<OL>
+<LI CLASS="Numbered">
+Type the following data into each of the fields:</LI>
+<blockquote>
+  <table width="302" cellpadding="2" cellspacing="2">
+    <tr>
+      <td width="142"><code>Product Id </code></td>
+      <td width="150" bordercolor="#000000"><strong><code>101</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Product Name </code></td>
+      <td bordercolor="#000000"><strong><code>widget</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Product Number </code></td>
+      <td bordercolor="#000000"><strong><code>123</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Stock Amt </code></td>
+      <td bordercolor="#000000"><strong><code>15</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Reorder Amt </code></td>
+      <td bordercolor="#000000"><strong><code>10</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Cost</code></td>
+      <td bordercolor="#000000"><strong><code>1.5</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>List Price </code></td>
+      <td bordercolor="#000000"><strong><code>5.0</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Days to Mfg </code></td>
+      <td bordercolor="#000000"><strong><code>5</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Sell Date </code></td>
+      <td bordercolor="#000000"><strong><code>3/15</code></strong></td>
+    </tr>
+    <tr>
+      <td><code>Discontinue Date </code></td>
+      <td bordercolor="#000000"><strong><code>9/12</code></strong></td>
+    </tr>
+  </table>
+  </blockquote>
+<li>
+  Click the <code>Put</code> button to enter the data into the cache server.</li>
+</OL>
+<br>
+</DIV>
+<DIV>
+<H2>
+<a name="managing_data"></a>Retrieving the Data in the Java Client</H2>
+<P>
+Next, specify the Product ID to update the Java client with the data you entered in the Product Browser form<code></code>.</P>
+</DIV>
+<DIV>
+<P CLASS="Head-D"><strong>
+In the Java client: </strong></P>
+  <OL>
+    <LI CLASS="Numbered">
+Get the product data previously entered into the Product Browser form:
+     <blockquote>
+       <p><strong><code>Get</code></strong></p>
+   </blockquote>
+    <li>When the following prompt appears, enter <code>101</code> for the Product ID that was defined in the Product Browser:
+      <blockquote>
+        <p><code>Enter the Product ID to search for:<strong> 101</strong></code></p>
+   </blockquote>
+        <p> The data associated with Product ID 101 is retrieved from the cacheserver:</p>
+        <blockquote>
+        <p><code>Product ID =            101<br>
+          Product Name =          widget<br>
+          Product Number =        123<br>
+          Color =                 Black<br>
+          Stock Level =           15<br>
+          Reorder Point =         10<br>
+          Product Cost =          1.5<br>
+          List Price =            5.0<br>
+          Available as of =       3/15<br>
+          Discontinue as of =     9/12</code></p>
+      </blockquote>
+  </li>
+  </OL>
+</DIV>
+<DIV>
+<H2>
+<a name="managing_data"></a>Modifying the Data With the Java Client</H2>
+<P>
+Enter some new product values into the Java client and see both the original and the new values displayed in the .NET client (Product Browser).</P>
+</DIV>
+<DIV>
+<P CLASS="Head-D"><strong>
+In the Java client: </strong></P>
+  <OL>
+<LI CLASS="Numbered-1st">Put new data into the cache. You're prompted with the same input fields as the Product Browser form:
+  <blockquote>
+    <p><strong><code>Put</code></strong></p>
+  </blockquote>
+  </LI>
+    <LI CLASS="Numbered">For each of the following prompts, enter the values shown:<br>
+      <br>
+    </LI>
+    <blockquote>
+      <table width="379" cellpadding="2" cellspacing="2">
+        <tr>
+          <td width="225"><code>ProductId: </code></td>
+          <td width="138" bordercolor="#000000"><strong><code>101</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Product Name: </code></td>
+          <td bordercolor="#000000"><strong><code>widget</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Product Number: </code></td>
+          <td bordercolor="#000000"><strong><code>123</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Color:</code></td>
+          <td bordercolor="#000000"><strong><code>Blue</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Stock Level (int): </code></td>
+          <td bordercolor="#000000"><strong><code>30</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Reorder Point (int): </code></td>
+          <td bordercolor="#000000"><strong><code>15</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Product Cost (double): </code></td>
+          <td bordercolor="#000000"><strong><code>2.0</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>List Price (double): </code></td>
+          <td bordercolor="#000000"><strong><code>6.0</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Available as of (string):  </code></td>
+          <td bordercolor="#000000"><strong><code>6/15</code></strong></td>
+        </tr>
+        <tr>
+          <td><code>Discontinue as of (string): </code></td>
+          <td bordercolor="#000000"><strong><code>11/12</code></strong></td>
+        </tr>
+      </table>
+    </blockquote>
+  <LI CLASS="Numbered"><p>Look at the Product Browser. Its Event Message area displays the original values for Product ID 101, along with the updated values that you just entered in the Java client.</p></LI>
+
+    <LI CLASS="Numbered">In the cache server session, enter the following command to stop the cache server:
+      <blockquote>
+        <p><strong> <code>cacheserver stop -dir=defaultConfig </code></strong></p>
+      </blockquote>
+    </LI>
+<li>
+  <p>Now close the cache server session: </p>
+  <blockquote>
+    <p><strong> <code>exit</code></strong></p>
+  </blockquote>
+</li>
+<li>
+  <p>End the Java client, then close its session: </p>
+  <blockquote>
+    <p><strong> <code>exit</code></strong></p>
+    <p><strong><code>exit</code></strong></p>
+  </blockquote>
+</li>
+<li>
+  <p>Close the .NET client session: </p>
+  <blockquote>
+    <p><strong><code>exit</code></strong></p>
+  </blockquote>
+</li>
+  <LI CLASS="Numbered">
+    Close the Product Browser form by clicking the '<code>X</code>' button in the right part of its titlebar, or by clicking the icon in the left part of its titlebar and then clicking <code>Close</code>.</LI>
+</OL>
+  <br>
+</DIV>
+
+<DIV>
+<H2>
+Changing System Parameters</H2>
+<P>
+This product ships configured to run with default system properties. If you need to run in a non-default configuration, GemFire also takes a system-level configuration file. Copy the <code>gfcpp.properties</code> file into your <code>cli_ProductBrowser</code> directory from the <code>defaultSystem</code> directory. Edit the <code>gfcpp.properties</code> file in your <code>cli_ProductBrowser</code> directory as needed. For example, to change the name of the <code>cache.xml</code> file, uncomment this line and change the file name:</P>
+<P> <code>#cache-xml-file=cache.xml</code><br>
+  <br>
+  <br>
+</P>
+</DIV>
+<a href="#Top">Top</a>
+<P>&nbsp;</P>
+<P>
+<p>Copyright &#169; 2005-2014 Pivotal Software, Inc. All rights reserved.  This product is protected by U.S. and international copyright and intellectual property laws. Pivotal products are covered by one or more patents listed at http://www.pivotal.io/patents.</p>
+</BODY>
+</HTML>
+