http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/integration-test/ThinClientStatisticTestsN.cs
----------------------------------------------------------------------
diff --git a/src/clicache/integration-test/ThinClientStatisticTestsN.cs 
b/src/clicache/integration-test/ThinClientStatisticTestsN.cs
index 730ea6c..69bc5e9 100644
--- a/src/clicache/integration-test/ThinClientStatisticTestsN.cs
+++ b/src/clicache/integration-test/ThinClientStatisticTestsN.cs
@@ -247,33 +247,7 @@ namespace Apache.Geode.Client.UnitTests
 
     void statisticsTest()
     {
-    /* Create Statistics in right and wrong manner */
-      StatisticsFactory factory = StatisticsFactory.GetExistingInstance();
-    
-    /* Register a type */
-      TestStatisticsType testType = new TestStatisticsType();
-      createType(factory, testType);
-      Util.Log("Statistics Type TestStats Registered");
-    
-    /* Create a statistics */
-      Statistics testStat1 = 
factory.CreateStatistics(testType.testStatsType,"TestStatistics");
-      Assert.IsNotNull(testStat1, "Test Statistics Creation Failed");
-    
-    /* Tests Find Type , Find Statistics */
-      Statistics temp = 
factory.FindFirstStatisticsByType(testType.testStatsType);
-      Assert.IsNotNull(temp , "findFirstStatisticsByType Failed");
-      Util.Log("Statistics testStat1 Created Successfully.");
-    
-    /* Test Set Functions */
-      testGetSetIncFunctions( testStat1, testType );
-      Util.Log("Get / Set / Inc Functions Tested ");
-    
-    /* Close Statistics */ 
-      testStat1.Close();
-      Statistics temp2 = 
factory.FindFirstStatisticsByType(testType.testStatsType);
-      Assert.IsNull(temp2, "Statistics close() Failed");
-      
-      Util.Log("StatisticsTest Completed");
+
     }
 
     #endregion

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/integration-test/ThinClientStringArrayTestsN.cs
----------------------------------------------------------------------
diff --git a/src/clicache/integration-test/ThinClientStringArrayTestsN.cs 
b/src/clicache/integration-test/ThinClientStringArrayTestsN.cs
index 1050b6b..6294bb0 100644
--- a/src/clicache/integration-test/ThinClientStringArrayTestsN.cs
+++ b/src/clicache/integration-test/ThinClientStringArrayTestsN.cs
@@ -72,8 +72,8 @@ namespace Apache.Geode.Client.UnitTests
       CacheHelper.Init();
       try
       {
-        Serializable.RegisterTypeGeneric(Portfolio.CreateDeserializable);
-        Serializable.RegisterTypeGeneric(Position.CreateDeserializable);
+        Serializable.RegisterTypeGeneric(Portfolio.CreateDeserializable, 
CacheHelper.DCache);
+        Serializable.RegisterTypeGeneric(Position.CreateDeserializable, 
CacheHelper.DCache);
       }
       catch (IllegalStateException)
       {
@@ -104,7 +104,7 @@ namespace Apache.Geode.Client.UnitTests
       IRegion<object, object> region2 = CacheHelper.GetRegion<object, 
object>(QueryRegionNames[2]);
       IRegion<object, object> region3 = CacheHelper.GetRegion<object, 
object>(QueryRegionNames[3]);
 
-      QueryHelper<object, object> qh = QueryHelper<object, object>.GetHelper();
+      QueryHelper<object, object> qh = QueryHelper<object, 
object>.GetHelper(CacheHelper.DCache);
       Util.Log("SetSize {0}, NumSets {1}.", qh.PortfolioSetSize,
         qh.PortfolioNumSets);
 
@@ -127,7 +127,7 @@ namespace Apache.Geode.Client.UnitTests
       IRegion<object, object> region0 = CacheHelper.GetRegion<object, 
object>(QueryRegionNames[0]);
       IRegion<object, object> subRegion0 = 
region0.GetSubRegion(QueryRegionNames[1]);
 
-      QueryHelper<object, object> qh = QueryHelper<object, object>.GetHelper();
+      QueryHelper<object, object> qh = QueryHelper<object, 
object>.GetHelper(CacheHelper.DCache);
       string[] /*sta*/ cnm = { "C#aaa", "C#bbb", "C#ccc", "C#ddd" };
       //CacheableStringArray cnm = CacheableStringArray.Create(sta);
       qh.PopulatePortfolioData(region0, 4, 2, 2, cnm);
@@ -152,7 +152,7 @@ namespace Apache.Geode.Client.UnitTests
       region["4"] = p4;
 
       QueryService<object, object> qs = null;
-      qs = PoolManager/*<object, 
object>*/.Find("__TESTPOOL1_").GetQueryService<object, object>();
+      qs = 
CacheHelper.DCache.GetPoolManager().Find("__TESTPOOL1_").GetQueryService<object,
 object>();
       Query<object> qry = qs.NewQuery("select * from /" + QERegionName + "  p 
where p.ID!=3");
       ISelectResults<object> results = qry.Execute();
       Util.Log("Results size {0}.", results.Size);

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Cache.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Cache.cpp b/src/clicache/src/Cache.cpp
index e900f76..7438e84 100644
--- a/src/clicache/src/Cache.cpp
+++ b/src/clicache/src/Cache.cpp
@@ -15,15 +15,18 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+#include "begin_native.hpp"
+#include "CacheRegionHelper.hpp"
+#include "CacheImpl.hpp"
+#include "end_native.hpp"
+
 #include "Cache.hpp"
 #include "ExceptionTypes.hpp"
 #include "DistributedSystem.hpp"
+#include "PoolFactory.hpp"
 #include "Region.hpp"
 #include "RegionAttributes.hpp"
 #include "QueryService.hpp"
-//#include "FunctionService.hpp"
-//#include "Execution.hpp"
 #include "CacheFactory.hpp"
 #include "impl/AuthenticatedCache.hpp"
 #include "impl/ManagedString.hpp"
@@ -47,7 +50,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getName( ) );
+          return ManagedString::Get( m_nativeptr->get()->getName( ).c_str() );
         }
         finally
         {
@@ -71,7 +74,7 @@ namespace Apache
       {
         try
         {
-          return 
Client::DistributedSystem::Create(m_nativeptr->get()->getDistributedSystem());
+          return 
Client::DistributedSystem::Create(&(m_nativeptr->get()->getDistributedSystem()));
         }
         finally
         {
@@ -120,13 +123,13 @@ namespace Apache
           // If DS automatically disconnected due to the new bootstrap API, 
then cleanup the C++/CLI side
           //if (!apache::geode::client::DistributedSystem::isConnected())
           {
-            
Apache::Geode::Client::DistributedSystem::UnregisterBuiltinManagedTypes();
+            
Apache::Geode::Client::DistributedSystem::UnregisterBuiltinManagedTypes(this);
           }
 
         _GF_MG_EXCEPTION_CATCH_ALL2
         finally
         {
-                                       
Apache::Geode::Client::Internal::PdxTypeRegistry::clear();
+                                       
CacheRegionHelper::getCacheImpl(m_nativeptr->get())->getPdxTypeRegistry()->clear();
           Serializable::Clear();
           Apache::Geode::Client::DistributedSystem::releaseDisconnectLock();
           Apache::Geode::Client::DistributedSystem::unregisterCliCallback();
@@ -343,8 +346,36 @@ namespace Apache
 
        IPdxInstanceFactory^ Cache::CreatePdxInstanceFactory(String^ className)
        {
-         return gcnew Internal::PdxInstanceFactoryImpl(className);
+    
+         return gcnew Internal::PdxInstanceFactoryImpl(className, 
(m_nativeptr->get()));
+
+       }
+
+       DataInput^ Cache::CreateDataInput(array<Byte>^ buffer, System::Int32 
len)
+       {
+         return gcnew DataInput(buffer, len,  m_nativeptr->get());
        }
+
+       
+       DataInput^ Cache::CreateDataInput(array<Byte>^ buffer)
+       {
+         return gcnew DataInput(buffer, m_nativeptr->get());
+       }
+
+        DataOutput^ Cache::CreateDataOutput()
+       {
+         return gcnew DataOutput( m_nativeptr->get());
+       }
+
+        PoolFactory^ Cache::GetPoolFactory()
+        {
+          return 
PoolFactory::Create(m_nativeptr->get_shared_ptr()->getPoolManager().createFactory());
+        }
+
+        PoolManager^ Cache::GetPoolManager()
+        {
+          return gcnew 
PoolManager(m_nativeptr->get_shared_ptr()->getPoolManager());
+        }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Cache.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Cache.hpp b/src/clicache/src/Cache.hpp
index 889faaf..666e562 100644
--- a/src/clicache/src/Cache.hpp
+++ b/src/clicache/src/Cache.hpp
@@ -22,6 +22,7 @@
 #include "IGeodeCache.hpp"
 #include "IRegion.hpp"
 #include "RegionAttributes.hpp"
+#include "PoolManager.hpp"
 
 using namespace System;
 
@@ -252,6 +253,15 @@ namespace Apache
         /// </summary>
         virtual IPdxInstanceFactory^ CreatePdxInstanceFactory(String^ 
className);
 
+        virtual DataInput^ CreateDataInput(array<Byte>^ buffer, System::Int32 
len);
+        virtual DataInput^ CreateDataInput(array<Byte>^ buffer);
+        
+        virtual DataOutput^ Cache::CreateDataOutput();
+
+        virtual PoolFactory^ GetPoolFactory();
+
+        virtual PoolManager^ GetPoolManager();
+
       internal:
 
         /// <summary>

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/CacheFactory.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/CacheFactory.cpp 
b/src/clicache/src/CacheFactory.cpp
index 6bdda46..2071b20 100644
--- a/src/clicache/src/CacheFactory.cpp
+++ b/src/clicache/src/CacheFactory.cpp
@@ -64,20 +64,25 @@ namespace Apache
                                bool pdxIgnoreUnreadFields = false;
         bool pdxReadSerialized = false;
                                bool appDomainEnable = false; 
+        native::CachePtr nativeCache = nullptr;
         _GF_MG_EXCEPTION_TRY2
           //msclr::lock lockInstance(m_singletonSync);
           DistributedSystem::acquireDisconnectLock();
     
+          nativeCache = m_nativeptr->get()->create( );
+
+           auto cache = Cache::Create( nativeCache );
+          // TODO global create SerializerRegistry
           if(!m_connected)
           {
-            
DistributedSystem::AppDomainInstanceInitialization(m_dsProps->GetNative());     
             
+            DistributedSystem::AppDomainInstanceInitialization(cache);         
         
           }
 
-          auto nativeCache = m_nativeptr->get()->create( );
+
                                        pdxIgnoreUnreadFields = 
nativeCache->getPdxIgnoreUnreadFields();
           pdxReadSerialized = nativeCache->getPdxReadSerialized();
 
-          appDomainEnable = 
DistributedSystem::SystemProperties->AppDomainEnabled;
+          appDomainEnable = 
cache->DistributedSystem->SystemProperties->AppDomainEnabled;
           Log::SetLogLevel(static_cast<LogLevel>(native::Log::logLevel( )));
                                        //TODO::split
           SafeConvertClassGeneric::SetAppDomainEnabled(appDomainEnable);
@@ -91,56 +96,33 @@ namespace Apache
             Serializable::RegisterTypeGeneric(
               native::GeodeTypeIds::PdxType,
               gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::Internal::PdxType::CreateDeserializable),
-              nullptr);
+              nullptr, cache);
 
            if(!m_connected)
            {
              //it registers types in unmanage layer, so should be once only 
-             DistributedSystem::ManagedPostConnect();
+             DistributedSystem::ManagedPostConnect(cache);
              DistributedSystem::AppDomainInstancePostInitialization();
              DistributedSystem::connectInstance();
            }
           
            m_connected = true;
            
-           return Cache::Create( nativeCache );
+          
+
+           DistributedSystem::registerCliCallback();
+           Serializable::RegisterPDXManagedCacheableKey(appDomainEnable, 
cache);
+
+           return cache;
         _GF_MG_EXCEPTION_CATCH_ALL2
           finally {
             GC::KeepAlive(m_nativeptr);
-            DistributedSystem::registerCliCallback();
-                                               
Serializable::RegisterPDXManagedCacheableKey(appDomainEnable);
                                        
Apache::Geode::Client::Internal::PdxTypeRegistry::PdxIgnoreUnreadFields = 
pdxIgnoreUnreadFields; 
           Apache::Geode::Client::Internal::PdxTypeRegistry::PdxReadSerialized 
= pdxReadSerialized; 
           DistributedSystem::releaseDisconnectLock();
         }
       }
-
-      Cache^ CacheFactory::GetInstance( DistributedSystem^ system )
-      {
-        _GF_MG_EXCEPTION_TRY2
-
-         return Cache::Create( native::CacheFactory::getInstance( 
system->GetNative() ) );
-
-        _GF_MG_EXCEPTION_CATCH_ALL2
-      }
-
-      Cache^ CacheFactory::GetInstanceCloseOk( DistributedSystem^ system )
-      {
-        _GF_MG_EXCEPTION_TRY2
-
-          return Cache::Create( native::CacheFactory::getInstanceCloseOk( 
system->GetNative() ) );
-
-        _GF_MG_EXCEPTION_CATCH_ALL2
-      }
-
-      Cache^ CacheFactory::GetAnyInstance( )
-      {
-        _GF_MG_EXCEPTION_TRY2
-
-          return Cache::Create( native::CacheFactory::getAnyInstance( ) );
-
-        _GF_MG_EXCEPTION_CATCH_ALL2
-      }
+   
 
       String^ CacheFactory::Version::get( )
       {
@@ -154,368 +136,6 @@ namespace Apache
       }
 
 
-      CacheFactory^ CacheFactory::SetFreeConnectionTimeout( Int32 
connectionTimeout )
-                 {
-                         _GF_MG_EXCEPTION_TRY2
-
-                         try
-                         {
-                           m_nativeptr->get()->setFreeConnectionTimeout( 
connectionTimeout );
-                         }
-                         finally
-                         {
-                           GC::KeepAlive(m_nativeptr);
-                         }
-
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetLoadConditioningInterval( 
Int32 loadConditioningInterval )
-                 {
-                         _GF_MG_EXCEPTION_TRY2
-
-                         try
-                         {
-                           m_nativeptr->get()->setLoadConditioningInterval( 
loadConditioningInterval );
-                         }
-                         finally
-                         {
-                           GC::KeepAlive(m_nativeptr);
-                         }
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetSocketBufferSize( Int32 
bufferSize )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setSocketBufferSize( bufferSize );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetReadTimeout( Int32 timeout )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setReadTimeout( timeout );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetMinConnections( Int32 
minConnections )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setMinConnections( minConnections );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetMaxConnections( Int32 
maxConnections )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setMaxConnections( maxConnections );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetIdleTimeout( Int32 idleTimeout 
)
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setIdleTimeout( idleTimeout );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetRetryAttempts( Int32 
retryAttempts )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-                         try
-                         {
-                           m_nativeptr->get()->setRetryAttempts( retryAttempts 
);
-                         }
-                         finally
-                         {
-                           GC::KeepAlive(m_nativeptr);
-                         }
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetPingInterval( Int32 
pingInterval )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setPingInterval( pingInterval );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-      CacheFactory^ CacheFactory::SetUpdateLocatorListInterval( Int32 
updateLocatorListInterval )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setUpdateLocatorListInterval( 
updateLocatorListInterval );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-      CacheFactory^ CacheFactory::SetStatisticInterval( Int32 
statisticInterval )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setStatisticInterval( statisticInterval );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-      CacheFactory^ CacheFactory::SetServerGroup( String^ group )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-        ManagedString mg_servergroup( group );
-        try
-        {
-          m_nativeptr->get()->setServerGroup( mg_servergroup.CharPtr );
-        }
-        finally
-        {
-          GC::KeepAlive(m_nativeptr);
-        }
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::AddLocator( String^ host, Int32 
port )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-        ManagedString mg_host( host );
-        try
-        {
-          m_nativeptr->get()->addLocator( mg_host.CharPtr, port );
-        }
-        finally
-        {
-          GC::KeepAlive(m_nativeptr);
-        }
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-      CacheFactory^ CacheFactory::AddServer( String^ host, Int32 port )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-                         ManagedString mg_host( host );
-        try
-        {
-          m_nativeptr->get()->addServer( mg_host.CharPtr, port );
-        }
-        finally
-        {
-          GC::KeepAlive(m_nativeptr);
-        }
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetSubscriptionEnabled( Boolean 
enabled )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-                         try
-                         {
-                           m_nativeptr->get()->setSubscriptionEnabled( enabled 
);
-                         }
-                         finally
-                         {
-                           GC::KeepAlive(m_nativeptr);
-                         }
-        return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-      CacheFactory^ CacheFactory::SetPRSingleHopEnabled( Boolean enabled )
-      {
-        _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setPRSingleHopEnabled(enabled);
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-         _GF_MG_EXCEPTION_CATCH_ALL2
-      }
-
-                 CacheFactory^ CacheFactory::SetSubscriptionRedundancy( Int32 
redundancy )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setSubscriptionRedundancy( redundancy );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ 
CacheFactory::SetSubscriptionMessageTrackingTimeout( Int32 
messageTrackingTimeout )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setSubscriptionMessageTrackingTimeout( 
messageTrackingTimeout );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-                 CacheFactory^ CacheFactory::SetSubscriptionAckInterval( Int32 
ackInterval )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setSubscriptionAckInterval( ackInterval );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-                 }
-
-      CacheFactory^ CacheFactory::SetThreadLocalConnections( bool enabled )
-      {
-        _GF_MG_EXCEPTION_TRY2
-
-        try
-        {
-          m_nativeptr->get()->setThreadLocalConnections( enabled );
-        }
-        finally
-        {
-          GC::KeepAlive(m_nativeptr);
-        }
-
-        _GF_MG_EXCEPTION_CATCH_ALL2
-
-        return this;
-      }
-
-      CacheFactory^ CacheFactory::SetMultiuserAuthentication( bool 
multiuserAuthentication )
-      {
-                         _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->setMultiuserAuthentication( 
multiuserAuthentication );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-          return this;
-
-                         _GF_MG_EXCEPTION_CATCH_ALL2
-          }
-
                        CacheFactory^ 
CacheFactory::SetPdxIgnoreUnreadFields(bool ignore)
                        {
                                _GF_MG_EXCEPTION_TRY2

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/CacheFactory.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/CacheFactory.hpp 
b/src/clicache/src/CacheFactory.hpp
index ca7f07b..fb9f8ba 100644
--- a/src/clicache/src/CacheFactory.hpp
+++ b/src/clicache/src/CacheFactory.hpp
@@ -72,59 +72,13 @@ namespace Apache
         Cache^ Create();
 
         /// <summary>
-        /// Gets the instance of <see cref="Cache" /> produced by an
-        /// earlier call to <see cref="CacheFactory.Create" />.
+        /// Set allocators for non default Microsoft CRT versions.
         /// </summary>
-        /// <param name="system">
-        /// the <see cref="DistributedSystem" /> the cache was created with.
-        /// </param>
-        /// <returns>the <see cref="Cache" /> associated with the specified 
system.</returns>
-        /// <exception cref="IllegalArgumentException">
-        /// if the distributed system argument is null
-        /// </exception>
-        /// <exception cref="CacheClosedException">
-        /// if a cache has not been created or the created one is closed
-        /// ( <see cref="Cache.IsClosed" /> )
-        /// </exception>
-        /// <exception cref="EntryNotFoundException">
-        /// if a cache with specified system not found
-        /// </exception>
-        static Cache^ GetInstance(DistributedSystem^ system);
-
-        /// <summary>
-        /// Gets the instance of <see cref="Cache" /> produced by an
-        /// earlier call to <see cref="CacheFactory.Create" />, even if it has 
been closed.
-        /// </summary>
-        /// <param name="system">
-        /// the <see cref="DistributedSystem" /> the cache was created with.
-        /// </param>
-        /// <returns>
-        /// the <c>Cache</c> associated with the specified system.
-        /// </returns>
-        /// <exception cref="IllegalArgumentException">
-        /// if the distributed system argument is null
-        /// </exception>
-        /// <exception cref="CacheClosedException">
-        /// if a cache has not been created.
-        /// </exception>
-        /// <exception cref="EntryNotFoundException">
-        /// if a cache with specified system not found
-        /// </exception>
-        static Cache^ GetInstanceCloseOk(DistributedSystem^ system);
-
-        /// <summary>
-        /// Gets an arbitrary open instance of <see cref="Cache" /> produced 
by an
-        /// earlier call to <see cref="CacheFactory.Create" />.
-        /// </summary>
-        /// <exception cref="CacheClosedException">
-        /// if a cache has not been created or the only created one is
-        /// closed ( <see cref="Cache.IsClosed" /> )
-        /// </exception>
-        /// <exception cref="EntryNotFoundException">
-        /// if a cache with specified system not found
-        /// </exception>
-        static Cache^ GetAnyInstance();
-
+       /* static void SetNewAndDelete()
+        {
+          native::setNewAndDelete(&operator new, &operator delete);
+        }
+*/
         /// <summary>
         /// Returns the version of the cache implementation.
         /// For the 1.0 release of Geode, the string returned is <c>1.0</c>.
@@ -143,390 +97,6 @@ namespace Apache
           static String^ get();
         }
 
-        /// <summary>
-        /// Sets the free connection timeout for this pool.
-        /// </summary>
-        /// <remarks>
-        /// If the pool has a max connections setting, operations will block
-        /// if all of the connections are in use. The free connection timeout
-        /// specifies how long those operations will block waiting for
-        /// a free connection before receiving an AllConnectionsInUseException.
-        /// If max connections is not set this setting has no effect.
-        /// </remarks>
-        /// <param>
-        /// connectionTimeout the connection timeout in milliseconds
-        /// </param>
-        /// <exception>
-        /// IllegalArgumentException if connectionTimeout 
-        /// is less than or equal to 0.
-        /// </exception>
-        CacheFactory^ SetFreeConnectionTimeout(Int32 connectionTimeout);
-
-        /// <summary>
-        /// Sets the load conditioning interval for this pool.
-        /// </summary>
-        /// <remarks>
-        /// This interval controls how frequently the pool will check to see if
-        /// a connection to a given server should be moved to a different
-        /// server to improve the load balance.
-        /// </remarks>
-        /// <param>
-        /// loadConditioningInterval the connection lifetime in milliseconds
-        /// A value of -1 disables load conditioning.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if connectionLifetime
-        /// is less than -1.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetLoadConditioningInterval(Int32 
loadConditioningInterval);
-
-        /// <summary>
-        /// Sets the socket buffer size for each connection made in this pool.
-        /// </summary>
-        /// <remarks>
-        /// Large messages can be received and sent faster when this buffer is 
larger.
-        /// Larger buffers also optimize the rate at which servers can send 
events
-        /// for client subscriptions.
-        /// </remarks>
-        /// <param>
-        /// bufferSize the size of the socket buffers used for reading and
-        /// writing on each connection in this pool.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if bufferSize
-        /// is less than or equal to 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetSocketBufferSize(Int32 bufferSize);
-
-        /// <summary>
-        /// Sets the number of milliseconds to wait for a response from a 
server before
-        /// timing out the operation and trying another server (if any are 
available).
-        /// </summary>
-        /// <param>
-        /// timeout number of milliseconds to wait for a response from a server
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if timeout
-        /// is less than or equal to 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetReadTimeout(Int32 timeout);
-
-        /// <summary>
-        /// Set the minimum number of connections to keep available at all 
times.
-        /// </summary>
-        /// <remarks>
-        /// When the pool is created, it will create this many connections.
-        /// If 0 then connections will not be made until an actual operation
-        /// is done that requires client-to-server communication.
-        /// </remarks>
-        /// <param>
-        /// minConnections the initial number of connections this pool will 
create.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if minConnections is less than 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetMinConnections(Int32 minConnections);
-
-        /// <summary>
-        /// Set the max number of client to server connections that the pool 
will create.
-        /// </summary>
-        /// <remarks>
-        /// If all of the connections are in use, an operation requiring a 
client to
-        /// server connection will block until a connection is available.
-        /// see setFreeConnectionTimeout(int)
-        /// </remarks>
-        /// <param>
-        /// maxConnections the maximum number of connections in the pool.
-        /// -1 indicates that there is no maximum number of connections.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if maxConnections is less than 
minConnections.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetMaxConnections(Int32 maxConnections);
-
-        /// <summary>
-        /// Set the amount of time a connection can be idle before expiring 
the connection.
-        /// </summary>
-        /// <remarks>
-        /// If the pool size is greater than the minimum specified, 
connections which have
-        /// been idle for longer than the idleTimeout will be closed.
-        /// </remarks>
-        /// <param>
-        /// idleTimeout The amount of time in milliseconds that an idle 
connection
-        /// should live before expiring. -1 indicates that connections should 
never expire.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if idleTimout is less than 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetIdleTimeout(Int32 idleTimeout);
-
-        /// <summary>
-        /// Set the number of times to retry a request after timeout/exception.
-        /// </summary>
-        /// <param>
-        /// retryAttempts The number of times to retry a request
-        /// after timeout/exception. -1 indicates that a request should be
-        /// tried against every available server before failing.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if idleTimout is less than 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetRetryAttempts(Int32 retryAttempts);
-
-        /// <summary>
-        /// Set how often to ping servers to verify that they are still alive.
-        /// </summary>
-        /// <remarks>
-        /// Each server will be sent a ping every pingInterval if there has not
-        /// been any other communication with the server.
-        /// These pings are used by the server to monitor the health of
-        /// the client. Make sure that the pingInterval is less than the
-        /// maximum time between pings allowed by the bridge server.
-        /// see in CacheServer: setMaximumTimeBetweenPings(int)
-        /// </remarks>
-        /// <param>
-        /// pingInterval The amount of time in milliseconds between pings.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if pingInterval is less than 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetPingInterval(Int32 pingInterval);
-
-        /// <summary>
-        /// Set how often to update locator list from locator
-        /// </summary>
-        /// <param>
-        /// updateLocatorListInterval The amount of time in milliseconds 
between
-        /// updating locator list. If its set to 0 then client will not update
-        /// the locator list.
-        /// </param>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetUpdateLocatorListInterval(Int32 
updateLocatorListInterval);
-
-
-        /// <summary>
-        /// Set how often to send client statistics to the server.
-        /// </summary>
-        /// <remarks>
-        /// Doing this allows gfmon to monitor clients.
-        /// A value of -1 disables the sending of client statistics
-        /// to the server.
-        /// </remarks>
-        /// <param>
-        /// statisticInterval The amount of time in milliseconds between
-        /// sends of client statistics to the server.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if statisticInterval
-        /// is less than -1.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetStatisticInterval(Int32 statisticInterval);
-
-        /// <summary>
-        /// Configures the group that all servers this pool connects to must 
belong to.
-        /// </summary>
-        /// <param>
-        /// group the server group that this pool will connect to.
-        /// If null or "" then all servers will be connected to.
-        /// </param>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetServerGroup(String^ group);
-
-        /// <summary>
-        /// Add a locator, given its host and port, to this factory.
-        /// </summary>
-        /// <remarks>
-        /// The locator must be a server locator and will be used to discover 
other running
-        /// bridge servers and locators.
-        /// </remarks>
-        /// <param>
-        /// host the host name or ip address that the locator is listening on.
-        /// </param>
-        /// <param>
-        /// port the port that the locator is listening on
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if host is an unknown host
-        /// or if port is outside the valid range of [1..65535] inclusive.
-        /// </exception>
-        /// <exception>
-        /// throws IllegalStateException if a locator has already been added 
to this factory.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ AddLocator(String^ host, Int32 port);
-
-        /// <summary>
-        /// Add a server, given its host and port, to this factory.
-        /// </summary>
-        /// <remarks>
-        /// The server must be a bridge server and this client will
-        /// directly connect to without consulting a server locator.
-        /// </remarks>
-        /// <param>
-        /// host the host name or ip address that the server is listening on.
-        /// </param>
-        /// <param>
-        /// port the port that the server is listening on
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if host is an unknown host
-        /// or if port is outside the valid range of [1..65535] inclusive.
-        /// </exception>
-        /// <exception>
-        /// throws IllegalStateException if a server has already been added to 
this factory.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ AddServer(String^ host, Int32 port);
-
-        /// <summary>
-        /// Enable subscriptions.
-        /// </summary>
-        /// <remarks>
-        /// If set to true then the created pool will have server-to-client
-        /// subscriptions enabled. If set to false then all Subscription*
-        /// attributes are ignored at create time.
-        /// </remarks>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetSubscriptionEnabled(Boolean enabled);
-
-        /// <summary>
-        /// By default SetPRSingleHopEnabled is true.
-        /// </summary>
-        /// <remarks>
-        /// The client is aware of location of partitions on servers hosting
-        /// Using this information, the client routes the client cache 
operations
-        /// directly to the server which is hosting the required partition for 
the
-        /// cache operation. 
-        /// If SetPRSingleHopEnabled is false the client can do an extra hop 
on servers
-        /// to go to the required partition for that cache operation.
-        /// The SetPRSingleHopEnabled avoids extra hops only for following 
cache operations :
-        /// put, get & destroy operations.
-        /// </remarks>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetPRSingleHopEnabled(Boolean enabled);
-
-        /// <summary>
-        /// Sets the redundancy level for this pools server-to-client 
subscriptions.
-        /// </summary>
-        /// <remarks>
-        /// If 0 then no redundant copies will be kept on the servers.
-        /// Otherwise an effort will be made to maintain the requested number 
of
-        /// copies of the server-to-client subscriptions. At most one copy per 
server will
-        /// be made up to the requested level.
-        /// </remarks>
-        /// <param>
-        /// redundancy the number of redundant servers for this client's 
subscriptions.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if redundancyLevel is less than -1.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetSubscriptionRedundancy(Int32 redundancy);
-
-        /// <summary>
-        /// Sets the messageTrackingTimeout attribute which is the 
time-to-live period,
-        /// in milliseconds, for subscription events the client has received 
from the server.
-        /// </summary>
-        /// <remarks>
-        /// It's used to minimize duplicate events. Entries that have not been 
modified
-        /// for this amount of time are expired from the list.
-        /// </remarks>
-        /// <param>
-        /// messageTrackingTimeout number of milliseconds to set the timeout 
to.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if messageTrackingTimeout is less 
than or equal to 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetSubscriptionMessageTrackingTimeout(Int32 
messageTrackingTimeout);
-
-        /// <summary>
-        /// Sets the is the interval in milliseconds to wait before sending
-        /// acknowledgements to the bridge server for events received from the 
server subscriptions.
-        /// </summary>
-        /// <param>
-        /// ackInterval number of milliseconds to wait before sending event 
acknowledgements.
-        /// </param>
-        /// <exception>
-        /// throws IllegalArgumentException if ackInterval is less than or 
equal to 0.
-        /// </exception>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetSubscriptionAckInterval(Int32 ackInterval);
-
-        /// <summary>
-        /// Enable thread local connections.
-        /// </summary>
-        /// <remarks>
-        /// Sets the thread local connections policy for the default 
connection pool.
-        /// If true then any time a thread goes to use a connection
-        /// from this pool it will check a thread local cache and see if it 
already
-        /// has a connection in it. If so it will use it. If not it will get 
one from
-        /// this pool and cache it in the thread local. This gets rid of 
thread contention
-        /// for the connections but increases the number of connections the 
servers see.
-        /// If false then connections are returned to the pool as soon
-        /// as the operation being done with the connection completes. This 
allows
-        /// connections to be shared amonst multiple threads keeping the 
number of
-        /// connections down.
-        /// </remarks>
-        CacheFactory^ SetThreadLocalConnections(bool enabled);
-
-        /// <summary>
-        /// Sets whether pool is in multiuser mode
-        /// </summary>
-        /// <param>
-        /// multiuserAuthentication should be true/false. Default value is 
false;
-        /// </param>
-        /// <returns>
-        /// a instance of <c>CacheFactory</c> 
-        /// </returns>
-        CacheFactory^ SetMultiuserAuthentication(bool multiuserAuthentication);
-
-
         ///<summary>
         /// Control whether pdx ignores fields that were unread during 
deserialization.
         /// The default is to preserve unread fields be including their data 
during serialization.

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/CacheableHashSet.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/CacheableHashSet.hpp 
b/src/clicache/src/CacheableHashSet.hpp
index 9330d4a..581d4a8 100644
--- a/src/clicache/src/CacheableHashSet.hpp
+++ b/src/clicache/src/CacheableHashSet.hpp
@@ -380,7 +380,7 @@ namespace Apache
 
             try
             {
-              
static_cast<HSTYPE*>(m_nativeptr->get())->insert(Serializable::GetUnmanagedValueGeneric(item));
+              
static_cast<HSTYPE*>(m_nativeptr->get())->insert(Serializable::GetUnmanagedValueGeneric(item,
 nullptr));
             }
             finally
             {
@@ -420,7 +420,7 @@ namespace Apache
           {
             try
             {
-              return 
static_cast<HSTYPE*>(m_nativeptr->get())->find(Serializable::GetUnmanagedValueGeneric(item))
 != static_cast<HSTYPE*>(m_nativeptr->get())->end();
+              return 
static_cast<HSTYPE*>(m_nativeptr->get())->find(Serializable::GetUnmanagedValueGeneric(item,
 nullptr)) != static_cast<HSTYPE*>(m_nativeptr->get())->end();
             }
             finally
             {
@@ -510,7 +510,7 @@ namespace Apache
           {
             try
             {
-              return 
(static_cast<HSTYPE*>(m_nativeptr->get())->erase(Serializable::GetUnmanagedValueGeneric(item))
 > 0);
+              return 
(static_cast<HSTYPE*>(m_nativeptr->get())->erase(Serializable::GetUnmanagedValueGeneric(item,
 nullptr)) > 0);
             }
             finally
             {

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/DataInput.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/DataInput.cpp b/src/clicache/src/DataInput.cpp
index e6d7ac1..a3ca689 100644
--- a/src/clicache/src/DataInput.cpp
+++ b/src/clicache/src/DataInput.cpp
@@ -18,6 +18,8 @@
 #include "begin_native.hpp"
 #include <geode/Cache.hpp>
 #include <GeodeTypeIdsImpl.hpp>
+#include "SerializationRegistry.hpp"
+#include "CacheRegionHelper.hpp"
 #include "end_native.hpp"
 
 #include <vcclr.h>
@@ -47,14 +49,15 @@ namespace Apache
     {
       namespace native = apache::geode::client;
 
-      DataInput::DataInput(System::Byte* buffer, int size)
+      DataInput::DataInput(System::Byte* buffer, int size, const 
native::Cache* cache)
       {
         m_ispdxDesrialization = false;
         m_isRootObjectPdx = false;
+        m_cache = cache;
         if (buffer != nullptr && size > 0) {
           _GF_MG_EXCEPTION_TRY2
 
-          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(std::make_unique<native::DataInput>(buffer,
 size));
+          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(cache->createDataInput(buffer, 
size));
           m_cursor = 0;
           m_isManagedObject = false;
           m_forStringDecode = gcnew array<Char>(100);
@@ -77,10 +80,11 @@ namespace Apache
         }
       }
 
-      DataInput::DataInput(array<Byte>^ buffer)
+      DataInput::DataInput(array<Byte>^ buffer, const native::Cache * cache)
       {
         m_ispdxDesrialization = false;
         m_isRootObjectPdx = false;
+        m_cache =  cache;
         if (buffer != nullptr && buffer->Length > 0) {
           _GF_MG_EXCEPTION_TRY2
 
@@ -88,7 +92,7 @@ namespace Apache
           GF_NEW(m_buffer, System::Byte[len]);
           pin_ptr<const Byte> pin_buffer = &buffer[0];
           memcpy(m_buffer, (void*)pin_buffer, len);
-          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(std::unique_ptr<native::DataInput>(new
 native::DataInput(m_buffer, len)));
+          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(m_cache->createDataInput(m_buffer,
 len));
 
           m_cursor = 0;
           m_isManagedObject = false;
@@ -112,10 +116,11 @@ namespace Apache
         }
       }
 
-      DataInput::DataInput(array<Byte>^ buffer, System::Int32 len)
+      DataInput::DataInput(array<Byte>^ buffer, System::Int32 len, const 
native::Cache* cache)
       {
         m_ispdxDesrialization = false;
         m_isRootObjectPdx = false;
+        m_cache = cache;
         if (buffer != nullptr) {
           if (len == 0 || (System::Int32)len > buffer->Length) {
             throw gcnew IllegalArgumentException(String::Format(
@@ -129,7 +134,7 @@ namespace Apache
             GF_NEW(m_buffer, System::Byte[len]);
           pin_ptr<const Byte> pin_buffer = &buffer[0];
           memcpy(m_buffer, (void*)pin_buffer, len);
-          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(std::unique_ptr<native::DataInput>(new
 native::DataInput(m_buffer, len)));
+          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(m_cache->createDataInput(m_buffer,
 len));
 
           try
           {
@@ -160,7 +165,7 @@ namespace Apache
 
       DataInput^ DataInput::GetClone()
       {
-        return gcnew DataInput(m_buffer, m_bufferLength);
+        return gcnew DataInput(m_buffer, m_bufferLength, m_cache);
       }
 
       Byte DataInput::ReadByte()
@@ -658,7 +663,7 @@ namespace Apache
           int cacheCursor = m_cursor;
           System::Byte* cacheBuffer = m_buffer;
           unsigned int cacheBufferLength = m_bufferLength;
-          Object^ ret = Internal::PdxHelper::DeserializePdx(this, false);
+          Object^ ret = Internal::PdxHelper::DeserializePdx(this, false, 
CacheRegionHelper::getCacheImpl(m_cache)->getSerializationRegistry().get());
           int tmp = m_nativeptr->get()->getBytesRemaining();
           m_cursor = cacheBufferLength - tmp;
           m_buffer = cacheBuffer;
@@ -682,7 +687,7 @@ namespace Apache
           int tmp = ReadArrayLen();
           int enumId = (dsId << 24) | (tmp & 0xFFFFFF);
 
-          Object^ enumVal = Internal::PdxHelper::GetEnum(enumId);
+          Object^ enumVal = Internal::PdxHelper::GetEnum(enumId, m_cache);
           return enumVal;
         }
         else if (compId == GeodeTypeIds::CacheableNullString) {
@@ -809,7 +814,7 @@ namespace Apache
         }
         else if (compId == GeodeClassIds::PDX)
         {
-          return Internal::PdxHelper::DeserializePdx(this, false);
+          return Internal::PdxHelper::DeserializePdx(this, false, 
CacheRegionHelper::getCacheImpl(m_cache)->getSerializationRegistry().get());
         }
         else if (compId == GeodeTypeIds::CacheableNullString) {
           //return SerializablePtr(CacheableString::createDeserializable());

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/DataInput.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/DataInput.hpp b/src/clicache/src/DataInput.hpp
index 8797381..80ed2b0 100644
--- a/src/clicache/src/DataInput.hpp
+++ b/src/clicache/src/DataInput.hpp
@@ -52,12 +52,12 @@ namespace Apache
         /// Construct <c>DataInput</c> using an given array of bytes.
         /// </summary>
         /// <param name="buffer">
-        /// The buffer to use for reading data values.
+        /// The buffer to use for reading data values
         /// </param>
         /// <exception cref="IllegalArgumentException">
         /// if the buffer is null
         /// </exception>
-        DataInput( array<Byte>^ buffer );
+        DataInput( array<Byte>^ buffer, const native::Cache* cache );
 
         /// <summary>
         /// Construct <c>DataInput</c> using a given length of an array of
@@ -72,7 +72,7 @@ namespace Apache
         /// <exception cref="IllegalArgumentException">
         /// if the buffer is null
         /// </exception>
-        DataInput( array<Byte>^ buffer, System::Int32 len );
+        DataInput( array<Byte>^ buffer, System::Int32 len, const 
native::Cache* cache );
 
         /// <summary>
         /// Dispose: frees the internal buffer.
@@ -656,11 +656,12 @@ namespace Apache
         /// Internal constructor to wrap a native object pointer
         /// </summary>
         /// <param name="nativeptr">The native object pointer</param>
-        inline DataInput( apache::geode::client::DataInput* nativeptr, bool 
managedObject )
+        inline DataInput( apache::geode::client::DataInput* nativeptr, bool 
managedObject, const native::Cache* cache )
         { 
           m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataInput>(nativeptr);
           m_ispdxDesrialization = false;
           m_isRootObjectPdx = false;
+          m_cache = cache;
           m_cursor = 0;
           m_isManagedObject = managedObject;
           m_forStringDecode = gcnew array<Char>(100);
@@ -673,7 +674,7 @@ namespace Apache
           }
         }
 
-        DataInput( System::Byte* buffer, int size );
+        DataInput( System::Byte* buffer, int size, const native::Cache* cache 
);
 
         bool IsManagedObject()
         {
@@ -693,6 +694,7 @@ namespace Apache
         /// </summary>
         bool m_ispdxDesrialization;
         bool m_isRootObjectPdx;
+        const native::Cache* m_cache;
         System::Byte* m_buffer;
         unsigned int m_bufferLength;
         int m_cursor;

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/DataOutput.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/DataOutput.cpp b/src/clicache/src/DataOutput.cpp
index 8ced074..8b1d1cc 100644
--- a/src/clicache/src/DataOutput.cpp
+++ b/src/clicache/src/DataOutput.cpp
@@ -17,6 +17,8 @@
 
 #include "begin_native.hpp"
 #include <GeodeTypeIdsImpl.hpp>
+#include "CacheRegionHelper.hpp"
+#include "CacheImpl.hpp"
 #include "end_native.hpp"
 
 #include <vcclr.h>
@@ -454,7 +456,7 @@ namespace Apache
         if (m_ispdxSerialization && obj->GetType()->IsEnum)
         {
           //need to set             
-          int enumVal = 
Internal::PdxHelper::GetEnumValue(obj->GetType()->FullName, 
Enum::GetName(obj->GetType(), obj), obj->GetHashCode());
+          int enumVal = 
Internal::PdxHelper::GetEnumValue(obj->GetType()->FullName, 
Enum::GetName(obj->GetType(), obj), obj->GetHashCode(), 
m_nativeptr->get()->getCache());
           WriteByte(GeodeClassIds::PDX_ENUM);
           WriteByte(enumVal >> 24);
           WriteArrayLen(enumVal & 0xFFFFFF);

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/DataOutput.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/DataOutput.hpp b/src/clicache/src/DataOutput.hpp
index 81e610d..c98245c 100644
--- a/src/clicache/src/DataOutput.hpp
+++ b/src/clicache/src/DataOutput.hpp
@@ -20,6 +20,7 @@
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/DataOutput.hpp>
+#include <geode/Cache.hpp>
 #include "end_native.hpp"
 
 #include "native_conditional_unique_ptr.hpp"
@@ -66,9 +67,9 @@ namespace Apache
         /// <summary>
         /// Default constructor.
         /// </summary>
-        inline DataOutput( )
+        inline DataOutput(native::Cache* cache)
         { 
-          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataOutput>(std::make_unique<native::DataOutput>());
+          m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DataOutput>(cache->createDataOutput());
           m_isManagedObject = true;
           m_cursor = 0;
           try
@@ -530,10 +531,6 @@ namespace Apache
         void WriteObject(UInt32% obj);       
 
         void WriteObject(UInt64% obj);
-        
-       // void WriteObject(array<UInt16>^ objArray);
-        //void WriteObject(array<UInt32>^ objArray);
-        //void WriteObject(array<UInt64>^ objArray);
 
         
         template <typename mType>
@@ -556,7 +553,6 @@ namespace Apache
 
         bool IsManagedObject()
         {
-          //TODO::
           return m_isManagedObject;
         }
 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/DistributedSystem.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/DistributedSystem.cpp 
b/src/clicache/src/DistributedSystem.cpp
index 239d7e2..7431933 100644
--- a/src/clicache/src/DistributedSystem.cpp
+++ b/src/clicache/src/DistributedSystem.cpp
@@ -22,12 +22,14 @@
 #include <geode/FixedPartitionResolver.hpp>
 #include <geode/CacheWriter.hpp>
 #include <geode/GeodeTypeIds.hpp>
+#include <geode/Cache.hpp>
 #include <CacheImpl.hpp>
 #include <CacheXmlParser.hpp>
 #include <DistributedSystemImpl.hpp>
 #include <ace/Process.h> // Added to get rid of unresolved token warning
 #include "end_native.hpp"
 
+#include "Cache.hpp"
 #include "Serializable.hpp"
 #include "DistributedSystem.hpp"
 #include "SystemProperties.hpp"
@@ -128,31 +130,31 @@ namespace Apache
     namespace Client
     {
 
+
       namespace native = apache::geode::client;
 
-      DistributedSystem^ DistributedSystem::Connect(String^ name)
+      DistributedSystem^ DistributedSystem::Connect(String^ name, Cache^ cache)
       {
-        return DistributedSystem::Connect(name, nullptr);
+        return DistributedSystem::Connect(name, nullptr, cache);
       }
 
-      DistributedSystem^ DistributedSystem::Connect(String^ name, 
Properties<String^, String^>^ config)
+      DistributedSystem^ DistributedSystem::Connect(String^ name, 
Properties<String^, String^>^ config, Cache ^ cache)
       {
         native::DistributedSystemImpl::acquireDisconnectLock();
 
         _GF_MG_EXCEPTION_TRY2
 
-          ManagedString mg_name(name);
-
-        
DistributedSystem::AppDomainInstanceInitialization(config->GetNative());
+        ManagedString mg_name(name);
 
         // this we are calling after all .NET initialization required in
         // each AppDomain
-        auto nativeptr = native::DistributedSystem::connect(mg_name.CharPtr,
+        auto nativeptr = native::DistributedSystem::create(mg_name.CharPtr, 
cache->GetNative().get(),
                                                             
config->GetNative());
+        nativeptr->connect();
 
-        ManagedPostConnect();
+        ManagedPostConnect(cache);
 
-        return Create(nativeptr);
+        return gcnew DistributedSystem(std::move(nativeptr));
 
         _GF_MG_EXCEPTION_CATCH_ALL2
 
@@ -161,19 +163,17 @@ namespace Apache
         }
       }
 
-      void DistributedSystem::Disconnect()
+      void DistributedSystem::Disconnect(Cache^ cache)
       {
         native::DistributedSystemImpl::acquireDisconnectLock();
 
         _GF_MG_EXCEPTION_TRY2
 
-          if (native::DistributedSystem::isConnected()) {
-            // native::CacheImpl::expiryTaskManager->cancelTask(
-            // s_memoryPressureTaskID);
-            Serializable::UnregisterNativesGeneric();
-            DistributedSystem::UnregisterBuiltinManagedTypes();
-          }
-        native::DistributedSystem::disconnect();
+
+        Serializable::UnregisterNativesGeneric();
+        DistributedSystem::UnregisterBuiltinManagedTypes(cache);
+        m_nativeptr->get()->disconnect();
+        GC::KeepAlive(m_nativeptr);
 
         _GF_MG_EXCEPTION_CATCH_ALL2
 
@@ -182,154 +182,16 @@ namespace Apache
         }
       }
 
-      void DistributedSystem::AppDomainInstanceInitialization(
-        const native::PropertiesPtr& nativepropsptr)
+      void DistributedSystem::AppDomainInstanceInitialization(Cache^ cache)
       {
         _GF_MG_EXCEPTION_TRY2
 
           // Register wrapper types for built-in types, this are still cpp 
wrapper
 
-          /*
-            Serializable::RegisterWrapperGeneric(
-            gcnew 
WrapperDelegateGeneric(Apache::Geode::Client::CacheableHashSet::Create),
-            native::GeodeTypeIds::CacheableHashSet);
-
-            Serializable::RegisterWrapperGeneric(
-            gcnew 
WrapperDelegateGeneric(Apache::Geode::Client::CacheableLinkedHashSet::Create),
-            native::GeodeTypeIds::CacheableLinkedHashSet);
-
-            Serializable::RegisterWrapperGeneric(
-            gcnew 
WrapperDelegateGeneric(Apache::Geode::Client::Struct::Create),
-            native::GeodeTypeIds::Struct);
-
-            Serializable::RegisterWrapperGeneric(
-            gcnew 
WrapperDelegateGeneric(Apache::Geode::Client::Properties::CreateDeserializable),
-            native::GeodeTypeIds::Properties);
-
-            // End register wrapper types for built-in types
-
-            // Register with cpp using unmanaged Cacheablekey wrapper
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableByte,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableByte::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableBoolean,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableBoolean::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableBytes,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableBytes::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::BooleanArray,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::BooleanArray::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableWideChar,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableCharacter::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CharArray,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CharArray::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableDouble,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableDouble::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableDoubleArray,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableDoubleArray::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableFloat,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableFloat::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableFloatArray,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableFloatArray::CreateDeserializable));
-
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableHashSet,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableHashSet::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableLinkedHashSet,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableLinkedHashSet::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt16,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableInt16::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt16Array,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableInt16Array::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt32,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableInt32::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt32Array,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableInt32Array::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt64,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableInt64::CreateDeserializable));
-
-            Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt64Array,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableInt64Array::CreateDeserializable));
-            */
-
-            /*Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::CacheableASCIIString,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableString::CreateDeserializable));
-
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::CacheableASCIIStringHuge,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableString::createDeserializableHuge));
-
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::CacheableString,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableString::createUTFDeserializable));
-
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::CacheableStringHuge,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableString::createUTFDeserializableHuge));*/
-
-              /*
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::CacheableNullString,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableString::CreateDeserializable));
-
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::CacheableStringArray,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableStringArray::CreateDeserializable));
-
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::Struct,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::Struct::CreateDeserializable));
-
-              Serializable::RegisterTypeGeneric(
-              native::GeodeTypeIds::Properties,
-              gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::Properties::CreateDeserializable));
-              */
-
-              // End register other built-in types
-
-              //primitive types are still C++, as these are used as keys mostly
-              // Register generic wrapper types for built-in types
-              //byte
-
-              /* Serializable::RegisterWrapperGeneric(
-                 gcnew WrapperDelegateGeneric(CacheableByte::Create),
-                 native::GeodeTypeIds::CacheableByte, Byte::typeid);*/
-
-                 Serializable::RegisterWrapperGeneric(
-                 gcnew WrapperDelegateGeneric(CacheableByte::Create),
-                 native::GeodeTypeIds::CacheableByte, SByte::typeid);
+        //byte
+        Serializable::RegisterWrapperGeneric(
+        gcnew WrapperDelegateGeneric(CacheableByte::Create),
+        native::GeodeTypeIds::CacheableByte, SByte::typeid);
 
         //boolean
         Serializable::RegisterWrapperGeneric(
@@ -348,21 +210,6 @@ namespace Apache
           gcnew WrapperDelegateGeneric(CacheableString::Create),
           native::GeodeTypeIds::CacheableASCIIString, String::typeid);
 
-        //TODO:
-        ////ascii string huge
-        //Serializable::RegisterWrapperGeneric(
-        //  gcnew WrapperDelegateGeneric(CacheableString::Create),
-        //  native::GeodeTypeIds::CacheableASCIIStringHuge, String::typeid);
-        ////string
-        //Serializable::RegisterWrapperGeneric(
-        //  gcnew WrapperDelegateGeneric(CacheableString::Create),
-        //  native::GeodeTypeIds::CacheableString, String::typeid);
-        ////string huge
-        //Serializable::RegisterWrapperGeneric(
-        //  gcnew WrapperDelegateGeneric(CacheableString::Create),
-        //  native::GeodeTypeIds::CacheableStringHuge, String::typeid);
-        //float
-
         Serializable::RegisterWrapperGeneric(
           gcnew WrapperDelegateGeneric(CacheableFloat::Create),
           native::GeodeTypeIds::CacheableFloat, float::typeid);
@@ -379,136 +226,83 @@ namespace Apache
           gcnew WrapperDelegateGeneric(CacheableInt64::Create),
           native::GeodeTypeIds::CacheableInt64, Int64::typeid);
 
-        ////uint16
-        //Serializable::RegisterWrapperGeneric(
-        //  gcnew WrapperDelegateGeneric(CacheableInt16::Create),
-        //  native::GeodeTypeIds::CacheableInt16, UInt16::typeid);
-        ////uint32
-        //Serializable::RegisterWrapperGeneric(
-        //  gcnew WrapperDelegateGeneric(CacheableInt32::Create),
-        //  native::GeodeTypeIds::CacheableInt32, UInt32::typeid);
-        ////uint64
-        //Serializable::RegisterWrapperGeneric(
-        //  gcnew WrapperDelegateGeneric(CacheableInt64::Create),
-        //  native::GeodeTypeIds::CacheableInt64, UInt64::typeid);
-        
//=======================================================================
-
         //Now onwards all will be wrap in managed cacheable key..
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableBytes,
           gcnew TypeFactoryMethodGeneric(CacheableBytes::CreateDeserializable),
-          Type::GetType("System.Byte[]"));
-
-        /* Serializable::RegisterTypeGeneric(
-           native::GeodeTypeIds::CacheableBytes,
-           gcnew 
TypeFactoryMethodGeneric(CacheableBytes::CreateDeserializable),
-           Type::GetType("System.SByte[]"));*/
+          Type::GetType("System.Byte[]"), cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableDoubleArray,
           gcnew 
TypeFactoryMethodGeneric(CacheableDoubleArray::CreateDeserializable),
-          Type::GetType("System.Double[]"));
+          Type::GetType("System.Double[]"), cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableFloatArray,
           gcnew 
TypeFactoryMethodGeneric(CacheableFloatArray::CreateDeserializable),
-          Type::GetType("System.Single[]"));
+          Type::GetType("System.Single[]"), cache);
 
         //TODO:
         //as it is
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableHashSet,
           gcnew 
TypeFactoryMethodGeneric(CacheableHashSet::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //as it is
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableLinkedHashSet,
           gcnew 
TypeFactoryMethodGeneric(CacheableLinkedHashSet::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableInt16Array,
           gcnew 
TypeFactoryMethodGeneric(CacheableInt16Array::CreateDeserializable),
-          Type::GetType("System.Int16[]"));
-
-        /*  Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::CacheableInt16Array,
-            gcnew 
TypeFactoryMethodGeneric(CacheableInt16Array::CreateDeserializable),
-            Type::GetType("System.UInt16[]"));*/
-
+          Type::GetType("System.Int16[]"), cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableInt32Array,
           gcnew 
TypeFactoryMethodGeneric(CacheableInt32Array::CreateDeserializable),
-          Type::GetType("System.Int32[]"));
-
-        /* Serializable::RegisterTypeGeneric(
-           native::GeodeTypeIds::CacheableInt32Array,
-           gcnew 
TypeFactoryMethodGeneric(CacheableInt32Array::CreateDeserializable),
-           Type::GetType("System.UInt32[]"));*/
+          Type::GetType("System.Int32[]"), cache);
 
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableInt64Array,
           gcnew 
TypeFactoryMethodGeneric(CacheableInt64Array::CreateDeserializable),
-          Type::GetType("System.Int64[]"));
-
-        /* Serializable::RegisterTypeGeneric(
-           native::GeodeTypeIds::CacheableInt64Array,
-           gcnew 
TypeFactoryMethodGeneric(CacheableInt64Array::CreateDeserializable),
-           Type::GetType("System.UInt64[]"));*/
-        //TODO:;split
+          Type::GetType("System.Int64[]"), cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::BooleanArray,
           gcnew TypeFactoryMethodGeneric(BooleanArray::CreateDeserializable),
-          Type::GetType("System.Boolean[]"));
+          Type::GetType("System.Boolean[]"), cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CharArray,
           gcnew TypeFactoryMethodGeneric(CharArray::CreateDeserializable),
-          Type::GetType("System.Char[]"));
-
-        //TODO::
-
-        //Serializable::RegisterTypeGeneric(
-        //  native::GeodeTypeIds::CacheableNullString,
-        //  gcnew 
TypeFactoryMethodNew(Apache::Geode::Client::CacheableString::CreateDeserializable));
+          Type::GetType("System.Char[]"), cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableStringArray,
           gcnew 
TypeFactoryMethodGeneric(CacheableStringArray::CreateDeserializable),
-          Type::GetType("System.String[]"));
+          Type::GetType("System.String[]"), cache);
 
         //as it is
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::Struct,
           gcnew TypeFactoryMethodGeneric(Struct::CreateDeserializable),
-          nullptr);
-
-        //as it is
-        Serializable::RegisterTypeGeneric(
-          native::GeodeTypeIds::Properties,
-          gcnew TypeFactoryMethodGeneric(Properties<String^, 
String^>::CreateDeserializable),
-          nullptr);
-
-        /*  Serializable::RegisterTypeGeneric(
-            native::GeodeTypeIds::PdxType,
-            gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::Internal::PdxType::CreateDeserializable),
-            nullptr);*/
+          nullptr, cache);
 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::EnumInfo,
           gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::Internal::EnumInfo::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         // End register generic wrapper types for built-in types
 
-        if (!native::DistributedSystem::isConnected())
-        {
+        //if (!native::DistributedSystem::isConnected())
+        //{
           // Set the Generic ManagedAuthInitialize factory function
           native::SystemProperties::managedAuthInitializeFn =
             native::ManagedAuthInitializeGeneric::create;
@@ -528,57 +322,18 @@ namespace Apache
           // Set the Generic ManagedPersistanceManager factory function
           native::CacheXmlParser::managedPersistenceManagerFn =
             native::ManagedPersistenceManagerGeneric::create;
-        }
+        //}
 
         _GF_MG_EXCEPTION_CATCH_ALL2
       }
 
-      void DistributedSystem::ManagedPostConnect()
+      void DistributedSystem::ManagedPostConnect(Cache^ cache)
       {
         //  The registration into the native map should be after
         // native connect since it can be invoked only once
 
         // Register other built-in types
-        /*
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableDate,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableDate::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableFileName,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableFileName::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableHashMap,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableHashMap::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableHashTable,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableHashTable::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableIdentityHashMap,
-        gcnew TypeFactoryMethodGeneric(
-        
Apache::Geode::Client::CacheableIdentityHashMap::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableUndefined,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableUndefined::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableVector,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableVector::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableObjectArray,
-        gcnew TypeFactoryMethodGeneric(
-        Apache::Geode::Client::CacheableObjectArray::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableArrayList,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableArrayList::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        native::GeodeTypeIds::CacheableStack,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableStack::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        GeodeClassIds::CacheableManagedObject - 0x80000000,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableObject::CreateDeserializable));
-        Serializable::RegisterTypeGeneric(
-        GeodeClassIds::CacheableManagedObjectXml - 0x80000000,
-        gcnew 
TypeFactoryMethodGeneric(Apache::Geode::Client::CacheableObjectXml::CreateDeserializable));
-        */
+      
         // End register other built-in types
 
         // Register other built-in types for generics
@@ -587,75 +342,75 @@ namespace Apache
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableDate,
           gcnew TypeFactoryMethodGeneric(CacheableDate::CreateDeserializable),
-          Type::GetType("System.DateTime"));
+          Type::GetType("System.DateTime"), cache);
 
         //as it is
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableFileName,
           gcnew 
TypeFactoryMethodGeneric(CacheableFileName::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //for generic dictionary define its type in static constructor of 
Serializable.hpp
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableHashMap,
           gcnew 
TypeFactoryMethodGeneric(CacheableHashMap::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //c# hashtable
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableHashTable,
           gcnew 
TypeFactoryMethodGeneric(CacheableHashTable::CreateDeserializable),
-          Type::GetType("System.Collections.Hashtable"));
+          Type::GetType("System.Collections.Hashtable"), cache);
 
         //Need to keep public as no counterpart in c#
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableIdentityHashMap,
           gcnew TypeFactoryMethodGeneric(
           CacheableIdentityHashMap::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //keep as it is
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableUndefined,
           gcnew 
TypeFactoryMethodGeneric(CacheableUndefined::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //c# arraylist
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableVector,
           gcnew 
TypeFactoryMethodGeneric(CacheableVector::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //as it is
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableObjectArray,
           gcnew TypeFactoryMethodGeneric(
           CacheableObjectArray::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //Generic::List
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableArrayList,
           gcnew 
TypeFactoryMethodGeneric(CacheableArrayList::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //c# generic stack 
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableStack,
           gcnew TypeFactoryMethodGeneric(CacheableStack::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //as it is
         Serializable::RegisterTypeGeneric(
           GeodeClassIds::CacheableManagedObject - 0x80000000,
           gcnew 
TypeFactoryMethodGeneric(CacheableObject::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         //as it is
         Serializable::RegisterTypeGeneric(
           GeodeClassIds::CacheableManagedObjectXml - 0x80000000,
           gcnew 
TypeFactoryMethodGeneric(CacheableObjectXml::CreateDeserializable),
-          nullptr);
+          nullptr, cache);
 
         // End register other built-in types
 
@@ -675,11 +430,12 @@ namespace Apache
 
       void DistributedSystem::AppDomainInstancePostInitialization()
       {
+        // TODO global - Is this necessary?
         //to create .net memory pressure handler 
-        Create(native::DistributedSystem::getInstance());
+        //Create(native::DistributedSystem::getInstance());
       }
 
-      void DistributedSystem::UnregisterBuiltinManagedTypes()
+      void DistributedSystem::UnregisterBuiltinManagedTypes(Cache^ cache)
       {
         _GF_MG_EXCEPTION_TRY2
 
@@ -694,27 +450,27 @@ namespace Apache
 
 
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableDate);
+            native::GeodeTypeIds::CacheableDate, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableFileName);
+            native::GeodeTypeIds::CacheableFileName, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableHashMap);
+            native::GeodeTypeIds::CacheableHashMap, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableHashTable);
+            native::GeodeTypeIds::CacheableHashTable, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableIdentityHashMap);
+            native::GeodeTypeIds::CacheableIdentityHashMap, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableVector);
+            native::GeodeTypeIds::CacheableVector, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableObjectArray);
+            native::GeodeTypeIds::CacheableObjectArray, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableArrayList);
+            native::GeodeTypeIds::CacheableArrayList, cache);
           Serializable::UnregisterTypeGeneric(
-            native::GeodeTypeIds::CacheableStack);
+            native::GeodeTypeIds::CacheableStack, cache);
           Serializable::UnregisterTypeGeneric(
-            GeodeClassIds::CacheableManagedObject - 0x80000000);
+            GeodeClassIds::CacheableManagedObject - 0x80000000, cache);
           Serializable::UnregisterTypeGeneric(
-            GeodeClassIds::CacheableManagedObjectXml - 0x80000000);
+            GeodeClassIds::CacheableManagedObjectXml - 0x80000000, cache);
 
         }
 
@@ -730,7 +486,7 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2
 
           return Apache::Geode::Client::SystemProperties::Create(
-          native::DistributedSystem::getSystemProperties());
+          &(m_nativeptr->get()->getSystemProperties()));
 
         _GF_MG_EXCEPTION_CATCH_ALL2
       }
@@ -739,50 +495,36 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get(m_nativeptr->get()->getName());
+          return ManagedString::Get(m_nativeptr->get()->getName().c_str());
         }
         finally
         {
           GC::KeepAlive(m_nativeptr);
         }
       }
-
-      bool DistributedSystem::IsConnected::get()
-      {
-        return native::DistributedSystem::isConnected();
-      }
-
-      DistributedSystem^ DistributedSystem::GetInstance()
-      {
-        return Create(native::DistributedSystem::getInstance());
-      }
-
+  
       void DistributedSystem::HandleMemoryPressure(System::Object^ state)
       {
+        // TODO global - Need single memory pressue event running?
         ACE_Time_Value dummy(1);
         MemoryPressureHandler handler;
         handler.handle_timeout(dummy, nullptr);
       }
 
-      DistributedSystem^ 
DistributedSystem::Create(native::DistributedSystemPtr nativeptr)
+      DistributedSystem^ DistributedSystem::Create(native::DistributedSystem* 
nativeptr)
       {
-        if (m_instance == nullptr) {
-          msclr::lock lockInstance(m_singletonSync);
-          if (m_instance == nullptr) {
-            m_instance = __nullptr == nativeptr ? nullptr :
-              gcnew DistributedSystem(nativeptr);
-          }
-        }
-        auto instance = (DistributedSystem^)m_instance;
+        auto instance = gcnew DistributedSystem(nativeptr);
         return instance;
       }
+      
+      
DistributedSystem::DistributedSystem(std::unique_ptr<native::DistributedSystem> 
nativeptr)
+      {
+        m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DistributedSystem>(std::move(nativeptr));
+      }
 
-      DistributedSystem::DistributedSystem(native::DistributedSystemPtr 
nativeptr)
+      DistributedSystem::DistributedSystem(native::DistributedSystem* 
nativeptr)
       {
-        m_nativeptr = gcnew 
native_shared_ptr<native::DistributedSystem>(nativeptr);
-        auto timerCallback = gcnew 
System::Threading::TimerCallback(&DistributedSystem::HandleMemoryPressure);
-        m_memoryPressureHandler = gcnew System::Threading::Timer(
-          timerCallback, "MemoryPressureHandler", 3 * 60000, 3 * 60000);
+        m_nativeptr = gcnew 
native_conditional_unique_ptr<native::DistributedSystem>(nativeptr);
       }
 
       DistributedSystem::~DistributedSystem()

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/DistributedSystem.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/DistributedSystem.hpp 
b/src/clicache/src/DistributedSystem.hpp
index 65e8be8..48c2723 100644
--- a/src/clicache/src/DistributedSystem.hpp
+++ b/src/clicache/src/DistributedSystem.hpp
@@ -22,7 +22,7 @@
 #include <geode/DistributedSystem.hpp>
 #include "end_native.hpp"
 
-#include "native_shared_ptr.hpp"
+#include "native_conditional_unique_ptr.hpp"
 #include "SystemProperties.hpp"
 #include "Properties.hpp"
 #include "impl/CliCallbackDelgate.hpp"
@@ -64,7 +64,7 @@ namespace Apache
         /// An application can have one only one connection to a 
DistributedSystem.
         /// </exception>
         /// <exception cref="UnknownException">otherwise</exception>
-        static DistributedSystem^ Connect(String^ name);
+        DistributedSystem^ Connect(String^ name, Cache^ cache);
 
         /// <summary>
         /// Initializes the Native Client system to be able to connect to the
@@ -81,22 +81,22 @@ namespace Apache
         /// An application can have one only one connection to a 
DistributedSystem.
         /// </exception>
         /// <exception cref="UnknownException">otherwise</exception>
-        static DistributedSystem^ Connect(String^ name, Properties<String^, 
String^>^ config);
+        static DistributedSystem^ Connect(String^ name, Properties<String^, 
String^>^ config, Cache^ cache);
 
         /// <summary>
         /// Disconnect from the distributed system.
         /// </summary>
         /// <exception cref="IllegalStateException">if not 
connected</exception>
-        static void Disconnect();
+        void Disconnect(Cache^ cache);
 
         /// <summary>
         /// Returns the SystemProperties used to create this instance of a
         /// <c>DistributedSystem</c>.
         /// </summary>
         /// <returns>the SystemProperties</returns>
-        static property Apache::Geode::Client::SystemProperties^ 
SystemProperties
+        property Apache::Geode::Client::SystemProperties^ SystemProperties
         {
-          static Apache::Geode::Client::SystemProperties^ get();
+          Apache::Geode::Client::SystemProperties^ get();
         }
 
         /// <summary>
@@ -108,21 +108,6 @@ namespace Apache
           String^ get();
         }
 
-        /// <summary>
-        /// The current connection status of this client to the 
<c>DistributedSystem</c>.
-        /// </summary>
-        /// <returns>true if connected, false otherwise</returns>
-        static property bool IsConnected
-        {
-          static bool get();
-        }
-
-        /// <summary>
-        /// Returns a reference to this DistributedSystem instance.
-        /// </summary>
-        /// <returns>the DistributedSystem instance</returns>
-        static DistributedSystem^ GetInstance();
-
 
       internal:
 
@@ -134,7 +119,9 @@ namespace Apache
         /// <returns>
         /// The managed wrapper object; null if the native pointer is null.
         /// </returns>
-        static DistributedSystem^ Create(native::DistributedSystemPtr 
nativeptr);
+        static DistributedSystem^ Create(native::DistributedSystem* nativeptr);
+
+        DistributedSystem(std::unique_ptr<native::DistributedSystem> 
nativeptr);
 
         static void acquireDisconnectLock();
 
@@ -144,7 +131,7 @@ namespace Apache
 
         static void connectInstance();
 
-        delegate void cliCallback();
+        delegate void cliCallback(apache::geode::client::Cache& cache);
 
         static void registerCliCallback();
 
@@ -152,14 +139,13 @@ namespace Apache
         /// <summary>
         /// Stuff that needs to be done for Connect in each AppDomain.
         /// </summary>
-        static void AppDomainInstanceInitialization(
-          const native::PropertiesPtr& nativepropsptr);
+        static void AppDomainInstanceInitialization(Cache^ cache);
 
         /// <summary>
         /// Managed registrations and other stuff to be done for the manage
         /// layer after the first connect.
         /// </summary>
-        static void ManagedPostConnect();
+        static void ManagedPostConnect(Cache^ cache);
 
         /// <summary>
         /// Stuff that needs to be done for Connect in each AppDomain but
@@ -170,11 +156,11 @@ namespace Apache
         /// <summary>
         /// Unregister the builtin managed types like CacheableObject.
         /// </summary>
-        static void UnregisterBuiltinManagedTypes();
+        static void UnregisterBuiltinManagedTypes(Cache^ cache);
 
-        std::shared_ptr<native::DistributedSystem> GetNative()
+        native::DistributedSystem& GetNative()
         {
-          return m_nativeptr->get_shared_ptr();
+          return *(m_nativeptr->get());
         }
 
       private:
@@ -189,14 +175,14 @@ namespace Apache
         /// Private constructor to wrap a native object pointer
         /// </summary>
         /// <param name="nativeptr">The native object pointer</param>
-        DistributedSystem(native::DistributedSystemPtr nativeptr);
+        DistributedSystem(native::DistributedSystem* nativeptr);
 
         /// <summary>
         /// Finalizer for the singleton instance of this class.
         /// </summary>
         ~DistributedSystem();
 
-        native_shared_ptr<native::DistributedSystem>^ m_nativeptr;
+        native_conditional_unique_ptr<native::DistributedSystem>^ m_nativeptr;
 
 
         /// <summary>

Reply via email to