http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/LocalRegion.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/LocalRegion.cpp b/src/clicache/src/LocalRegion.cpp
index 9fd618f..e1d6d2d 100644
--- a/src/clicache/src/LocalRegion.cpp
+++ b/src/clicache/src/LocalRegion.cpp
@@ -15,7 +15,6 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
 #include "LocalRegion.hpp"
 #include "Cache.hpp"
 #include "CacheStatistics.hpp"
@@ -23,8 +22,6 @@
 #include "RegionEntry.hpp"
 #include "impl/AuthenticatedCache.hpp"
 #include "impl/SafeConvert.hpp"
-//#include <geode/Serializable.hpp>
-//#include <cppcache/DataOutPut.hpp>
 
 using namespace System;
 
@@ -38,8 +35,8 @@ namespace Apache
       generic<class TKey, class TValue>
       TValue LocalRegion<TKey, TValue>::Get(TKey key, Object^ callbackArg)
       {
-        apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-        apache::geode::client::CacheablePtr 
nativeptr(this->getRegionEntryValue(keyptr));
+        native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        auto nativeptr= this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr)
         {
           throw gcnew KeyNotFoundException("The given key was not present in 
the region");
@@ -52,12 +49,18 @@ namespace Apache
       apache::geode::client::SerializablePtr LocalRegion<TKey, 
TValue>::getRegionEntryValue(apache::geode::client::CacheableKeyPtr& keyptr)
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          apache::geode::client::RegionEntryPtr entryPtr =  
NativePtr->getEntry( keyptr );
-          if (entryPtr != nullptr) {
-            return entryPtr->getValue() ;
+          try
+          {
+            if (auto entryPtr = m_nativeptr->get()->getEntry(keyptr)) {
+              return entryPtr->getValue();
+            }
+            else {
+              return nullptr;
+            }
           }
-          else {
-            return nullptr;
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
           }
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -67,11 +70,17 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-        apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( value ) );        
-        apache::geode::client::UserDataPtr callbackptr(
-          Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );
-        NativePtr->localPut( keyptr, valueptr, callbackptr );
+        try
+        {
+          native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );
+          native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>( value );        
+          native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+          m_nativeptr->get()->localPut( keyptr, valueptr, callbackptr );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -79,8 +88,8 @@ namespace Apache
       generic<class TKey, class TValue>
       TValue LocalRegion<TKey, TValue>::default::get(TKey key)
       { 
-        apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-        apache::geode::client::CacheablePtr 
nativeptr(this->getRegionEntryValue(keyptr));
+        native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        auto nativeptr = this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr)
         {
           throw gcnew KeyNotFoundException("The given key was not present in 
the region");
@@ -94,9 +103,16 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-        apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( value ) );
-        NativePtr->localPut( keyptr, valueptr );
+        try
+        {
+          native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );
+          native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>( value );
+          m_nativeptr->get()->localPut( keyptr, valueptr );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -105,20 +121,25 @@ namespace Apache
       System::Collections::Generic::IEnumerator<KeyValuePair<TKey,TValue>>^ 
         LocalRegion<TKey, TValue>::GetEnumerator()
       {
-        array<KeyValuePair<TKey,TValue>>^ toArray;
         apache::geode::client::VectorOfRegionEntry vc;
 
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          NativePtr->entries( vc, false );
+          try
+          {
+            m_nativeptr->get()->entries( vc, false );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */ 
 
-          toArray = gcnew array<KeyValuePair<TKey,TValue>>(vc.size());
-
+        auto toArray = gcnew array<KeyValuePair<TKey,TValue>>(vc.size());
         for( System::Int32 index = 0; index < vc.size( ); index++ )
         {
-          apache::geode::client::RegionEntryPtr nativeptr =  vc[ index ];  
+          auto nativeptr = vc[ index ];  
           TKey key = Serializable::GetManagedValueGeneric<TKey> 
(nativeptr->getKey());
           TValue val = Serializable::GetManagedValueGeneric<TValue> 
(nativeptr->getValue());
           toArray[ index ] = KeyValuePair<TKey,TValue>(key, val);           
@@ -130,20 +151,25 @@ namespace Apache
       System::Collections::IEnumerator^ 
         LocalRegion<TKey, TValue>::GetEnumeratorOld()
       {
-        array<Object^>^ toArray;
         apache::geode::client::VectorOfRegionEntry vc;
 
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          NativePtr->entries( vc, false );
+          try
+          {
+            m_nativeptr->get()->entries( vc, false );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
 
-          toArray = gcnew array<Object^>(vc.size());
-
+        auto toArray = gcnew array<Object^>(vc.size());
         for( System::Int32 index = 0; index < vc.size( ); index++ )
         {
-          apache::geode::client::RegionEntryPtr nativeptr =  vc[ index ];      
                 
+          auto nativeptr = vc[ index ];                       
           TKey key = Serializable::GetManagedValueGeneric<TKey> 
(nativeptr->getKey());
           TValue val = Serializable::GetManagedValueGeneric<TValue> 
(nativeptr->getValue());            
           toArray[ index ] = KeyValuePair<TKey,TValue>(key, val);           
@@ -189,8 +215,8 @@ namespace Apache
       generic<class TKey, class TValue> 
       bool LocalRegion<TKey, TValue>::Contains(KeyValuePair<TKey,TValue> 
keyValuePair) 
       { 
-        apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key ) ); 
-        apache::geode::client::CacheablePtr 
nativeptr(this->getRegionEntryValue(keyptr));
+        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( 
keyValuePair.Key ); 
+        auto nativeptr = this->getRegionEntryValue(keyptr);
         //This means that key is not present.
         if (nativeptr == nullptr) {
           return false;
@@ -204,9 +230,15 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );          
-
-          return NativePtr->containsKey( keyptr );
+        try
+        {
+          auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );   
       
+          return m_nativeptr->get()->containsKey(keyptr);
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -214,8 +246,8 @@ namespace Apache
       generic<class TKey, class TValue>
       bool LocalRegion<TKey, TValue>::TryGetValue(TKey key, TValue %val)
       {        
-        apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-        apache::geode::client::CacheablePtr 
nativeptr(this->getRegionEntryValue(keyptr));
+        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        auto nativeptr = this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr) {            
           val = TValue();
           return false;
@@ -232,17 +264,22 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
         apache::geode::client::VectorOfCacheableKey vc;
-        NativePtr->keys( vc );
-        //List<TKey>^ collectionlist = gcnew List<TKey>(vc.size());
-        array<TKey>^ keyarr =
-          gcnew array<TKey>( vc.size( ) );
+        try
+        {
+          m_nativeptr->get()->keys(vc);
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
+        auto keyarr =  gcnew array<TKey>( vc.size( ) );
         for( System::Int32 index = 0; index < vc.size( ); index++ )
         {            
-          apache::geode::client::CacheableKeyPtr& nativeptr( vc[ index ] );
+          auto& nativeptr = vc[ index ];
           keyarr[ index ] = 
Serializable::GetManagedValueGeneric<TKey>(nativeptr);
-          //collectionlist[ index ] = 
Serializable::GetManagedValue<TKey>(nativeptr);
         }
-        System::Collections::Generic::ICollection<TKey>^ collectionlist = 
(System::Collections::Generic::ICollection<TKey>^)keyarr;
+        auto collectionlist = 
(System::Collections::Generic::ICollection<TKey>^)keyarr;
         return collectionlist;
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
@@ -254,17 +291,23 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
           apache::geode::client::VectorOfCacheable vc;
-          NativePtr->values( vc );
+          try
+          {
+            m_nativeptr->get()->values( vc );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
+
           //List<TValue>^ collectionlist = gcnew List<TValue>(vc.size());
-          array<TValue>^ valarr =
-            gcnew array<TValue>( vc.size( ) );
+          auto valarr = gcnew array<TValue>( vc.size( ) );
           for( System::Int32 index = 0; index < vc.size( ); index++ )
           {
-            apache::geode::client::CacheablePtr& nativeptr( vc[ index ] );     
       
+            auto& nativeptr = vc[ index ];            
             valarr[ index ] = 
Serializable::GetManagedValueGeneric<TValue>(nativeptr);
-            //collectionlist[ index ] = 
Serializable::GetManagedValueGeneric<TValue>(nativeptr);
           }
-          System::Collections::Generic::ICollection<TValue>^ collectionlist = 
(System::Collections::Generic::ICollection<TValue>^)valarr;
+          auto collectionlist = 
(System::Collections::Generic::ICollection<TValue>^)valarr;
           return collectionlist;
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
@@ -275,9 +318,16 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-          apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( value ) );
-          NativePtr->localCreate( keyptr, valueptr );
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );
+            native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>( value );
+            m_nativeptr->get()->localCreate( keyptr, valueptr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -287,9 +337,16 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key ) );
-          apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value ) );
-          NativePtr->localCreate( keyptr, valueptr );
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key );
+            native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value );
+            m_nativeptr->get()->localCreate( keyptr, valueptr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
        _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -299,11 +356,17 @@ namespace Apache
       {
           _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-          apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( value ) );          
-          apache::geode::client::UserDataPtr callbackptr(
-            Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );
-          NativePtr->localCreate( keyptr, valueptr, callbackptr );
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );
+            native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>( value );          
+            native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+            m_nativeptr->get()->localCreate( keyptr, valueptr, callbackptr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -315,14 +378,18 @@ namespace Apache
     
           try
           {
-            apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );          
-            NativePtr->localDestroy( keyptr );
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>(key);
+            m_nativeptr->get()->localDestroy(keyptr);
             return true;
           }
-          catch(apache::geode::client::EntryNotFoundException /*ex*/)
+          catch (apache::geode::client::EntryNotFoundException /*ex*/)
           {
             return false;
           }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
         
@@ -332,20 +399,22 @@ namespace Apache
       bool LocalRegion<TKey, TValue>::Remove( TKey key, Object^ callbackArg )
       {
          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          try
-          {
-            apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );                    
-            apache::geode::client::UserDataPtr callbackptr(
-            Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );
-            NativePtr->localDestroy( keyptr, callbackptr );
-            return true;
-          }
-          catch(apache::geode::client::EntryNotFoundException /*ex*/)
-          {
-            return false;
-          }
-
-          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
+           try
+           {
+             native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>(key);
+             native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+             m_nativeptr->get()->localDestroy(keyptr, callbackptr);
+             return true;
+           }
+           catch (apache::geode::client::EntryNotFoundException /*ex*/)
+           {
+             return false;
+           }
+           finally
+           {
+             GC::KeepAlive(m_nativeptr);
+           }
+        _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
       generic<class TKey, class TValue>
@@ -353,32 +422,18 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key ) );
-          apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value ) );
-          return NativePtr->localRemove(keyptr, valueptr);
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key );
+            native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value );
+            return m_nativeptr->get()->localRemove(keyptr, valueptr);
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
-
-        //_GF_MG_EXCEPTION_TRY2/* due to auto replace */
-
-        //apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key ) );
-        //if (NativePtr->containsKey( keyptr )) {
-        //  apache::geode::client::CacheablePtr 
nativeptr(this->getRegionEntryValue(keyptr));
-        //  TValue returnVal = Serializable::GetManagedValueGeneric<TValue>( 
nativeptr );
-        //  apache::geode::client::CacheablePtr valueptr( 
Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value ) );
-        //  TValue actualVal = Serializable::GetManagedValueGeneric<TValue>( 
valueptr );
-        //  if (actualVal->Equals(returnVal)) {
-        //    NativePtr->localDestroy( keyptr );
-        //    return true;
-        //  }
-        //  else {
-        //    return false;
-        //  }
-        //}
-        //else {
-        //  return false;
-        //} 
-        //_GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
       generic<class TKey, class TValue>
@@ -386,10 +441,17 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );                   
-          apache::geode::client::CacheablePtr valueptr ( 
Serializable::GetUnmanagedValueGeneric<TValue>( value ));                 
-          apache::geode::client::UserDataPtr callbackptr( 
Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );          
-          return NativePtr->localRemove(keyptr, valueptr, callbackptr);
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>(key);
+            native::CacheablePtr valueptr = 
Serializable::GetUnmanagedValueGeneric<TValue>(value);
+            native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+            return m_nativeptr->get()->localRemove(keyptr, valueptr, 
callbackptr);
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -409,9 +471,15 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
                     
-          apache::geode::client::UserDataPtr callbackptr(
-            Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );
-          NativePtr->localInvalidateRegion( callbackptr );
+          try
+          {
+            native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+            m_nativeptr->get()->localInvalidateRegion( callbackptr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
       
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -430,9 +498,15 @@ namespace Apache
       void LocalRegion<TKey, TValue>::DestroyRegion(Object^ callbackArg)
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */          
-          apache::geode::client::UserDataPtr callbackptr(
-            Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );
-          NativePtr->localDestroyRegion( callbackptr );
+          try
+          {
+            native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+            m_nativeptr->get()->localDestroyRegion( callbackptr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -452,10 +526,16 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );          
-          apache::geode::client::UserDataPtr callbackptr(
-            Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );  
          
-          NativePtr->localInvalidate( keyptr, callbackptr );
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>( key );          
+            native::UserDataPtr callbackptr = 
Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );            
+            m_nativeptr->get()->localInvalidate( keyptr, callbackptr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -520,13 +600,27 @@ namespace Apache
       generic<class TKey, class TValue>
       String^ LocalRegion<TKey, TValue>::Name::get()
       { 
-        return ManagedString::Get( NativePtr->getName( ) ); 
+        try
+        {
+          return ManagedString::Get( m_nativeptr->get()->getName( ) );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        } 
       } 
 
       generic<class TKey, class TValue>
       String^ LocalRegion<TKey, TValue>::FullPath::get()
       { 
-        return ManagedString::Get( NativePtr->getFullPath( ) ); 
+        try
+        {
+          return ManagedString::Get( m_nativeptr->get()->getFullPath( ) );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        } 
       } 
 
       generic<class TKey, class TValue>
@@ -534,14 +628,19 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::RegionPtr& nativeptr( 
NativePtr->getParentRegion( ) );
-
-         IRegion<TKey, TValue>^ region = Region<TKey, TValue>::Create( 
nativeptr.ptr( ) );
-         if (region == nullptr) {
-           return nullptr;
-         }
-         return region->GetLocalView();
-
+          try
+          {
+            auto parentRegion = m_nativeptr->get()->getParentRegion( );
+            auto region = Region<TKey, TValue>::Create( parentRegion );
+            if (region == nullptr) {
+              return nullptr;
+            }
+            return region->GetLocalView();
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -550,9 +649,14 @@ namespace Apache
       { 
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        apache::geode::client::RegionAttributesPtr& nativeptr( 
NativePtr->getAttributes( ) );
-
-        return Apache::Geode::Client::RegionAttributes<TKey, 
TValue>::Create(nativeptr.get());
+        try
+        {
+          return Apache::Geode::Client::RegionAttributes<TKey, 
TValue>::Create(m_nativeptr->get()->getAttributes());
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       } 
@@ -562,10 +666,14 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::AttributesMutatorPtr& nativeptr(
-            NativePtr->getAttributesMutator( ) );
-
-        return Apache::Geode::Client::AttributesMutator<TKey, TValue>::Create( 
nativeptr.ptr( ) );
+          try
+          {
+            return Apache::Geode::Client::AttributesMutator<TKey, 
TValue>::Create(m_nativeptr->get()->getAttributesMutator());
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -575,8 +683,14 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        apache::geode::client::CacheStatisticsPtr& nativeptr( 
NativePtr->getStatistics( ) );
-        return Apache::Geode::Client::CacheStatistics::Create( nativeptr.ptr( 
) );
+          try
+          {
+            return 
Apache::Geode::Client::CacheStatistics::Create(m_nativeptr->get()->getStatistics());
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -586,14 +700,20 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          ManagedString mg_path( path );
-          apache::geode::client::RegionPtr& nativeptr(
-            NativePtr->getSubregion( mg_path.CharPtr ) );
-          IRegion<TKey, TValue>^ region = Region<TKey, TValue>::Create( 
nativeptr.ptr( ) );
-          if (region == nullptr) {
-            return nullptr;
+          try
+          {
+            ManagedString mg_path(path);
+            auto nativeptr = m_nativeptr->get()->getSubregion(mg_path.CharPtr);
+            auto region = Region<TKey, TValue>::Create(nativeptr);
+            if (region == nullptr) {
+              return nullptr;
+            }
+            return region->GetLocalView();
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
           }
-          return region->GetLocalView();          
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -604,14 +724,16 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          ManagedString mg_subregionName( subRegionName );
-                               //TODO::split
-        /*  apache::geode::client::RegionAttributesPtr p_attrs(
-            GetNativePtrFromSBWrap<apache::geode::client::RegionAttributes>( 
attributes ) );*/
-
-          apache::geode::client::RegionPtr& nativeptr( 
NativePtr->createSubregion(
-            mg_subregionName.CharPtr, /*p_attrs*/nullptr ) );
-          return Region<TKey, TValue>::Create( nativeptr.ptr( ) 
)->GetLocalView();
+          try
+          {
+            ManagedString mg_subregionName(subRegionName);
+            return Region<TKey, 
TValue>::Create(m_nativeptr->get()->createSubregion(
+              mg_subregionName.CharPtr, __nullptr))->GetLocalView();
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
 
@@ -623,17 +745,23 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
           apache::geode::client::VectorOfRegion vsr;
-          NativePtr->subregions( recursive, vsr );
+          try
+          {
+            m_nativeptr->get()->subregions( recursive, vsr );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
           array<IRegion<TKey, TValue>^>^ subRegions =
             gcnew array<IRegion<TKey, TValue>^>( vsr.size( ) );
 
           for( System::Int32 index = 0; index < vsr.size( ); index++ )
           {
-            apache::geode::client::RegionPtr& nativeptr( vsr[ index ] );
-            subRegions[ index ] = Region<TKey, TValue>::Create( nativeptr.ptr( 
) )->GetLocalView();
+            auto nativeptr = vsr[ index ];
+            subRegions[ index ] = Region<TKey, TValue>::Create( nativeptr 
)->GetLocalView();
           }
-          System::Collections::Generic::ICollection<IRegion<TKey, TValue>^>^ 
collection =
-            (System::Collections::Generic::ICollection<IRegion<TKey, 
TValue>^>^)subRegions;
+          auto collection = 
(System::Collections::Generic::ICollection<IRegion<TKey, TValue>^>^)subRegions;
           return collection;
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
@@ -644,10 +772,17 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-          apache::geode::client::RegionEntryPtr& nativeptr( 
NativePtr->getEntry( keyptr ) );
-          return RegionEntry<TKey, TValue>::Create( nativeptr.ptr( ) );
-
+          try
+          {
+            native::CacheableKeyPtr keyptr = 
Serializable::GetUnmanagedValueGeneric<TKey>(key);
+            auto nativeptr = m_nativeptr->get()->getEntry(keyptr);
+            return RegionEntry<TKey, TValue>::Create(nativeptr);
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
+ 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -657,18 +792,23 @@ namespace Apache
          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
           apache::geode::client::VectorOfRegionEntry vc;
-          NativePtr->entries( vc, recursive );          
-          array<RegionEntry<TKey, TValue>^>^ entryarr = gcnew 
array<RegionEntry<TKey, TValue>^>( vc.size( ) );
+          try
+          {
+            m_nativeptr->get()->entries( vc, recursive );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }          
+          auto entryarr = gcnew array<RegionEntry<TKey, TValue>^>( vc.size( ) 
);
 
           for( System::Int32 index = 0; index < vc.size( ); index++ )
           {
-            apache::geode::client::RegionEntryPtr& nativeptr( vc[ index ] );
-            entryarr[ index ] = RegionEntry<TKey, TValue>::Create( 
nativeptr.ptr( ) );
+            auto nativeptr = vc[ index ] ;
+            entryarr[ index ] = RegionEntry<TKey, TValue>::Create( nativeptr );
           }
-          System::Collections::Generic::ICollection<RegionEntry<TKey, 
TValue>^>^ collection =
-            (System::Collections::Generic::ICollection<RegionEntry<TKey, 
TValue>^>^)entryarr;
-
-          return collection;          
+          auto collection = 
(System::Collections::Generic::ICollection<RegionEntry<TKey, 
TValue>^>^)entryarr;
+          return collection;
 
          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
         
@@ -679,17 +819,21 @@ namespace Apache
       {        
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          apache::geode::client::RegionServicePtr& nativeptr( 
NativePtr->getRegionService( ) );
-
-          apache::geode::client::Cache* realCache = 
dynamic_cast<apache::geode::client::Cache*>(nativeptr.get());
-
-          if(realCache != NULL)
+          try
           {
-                                               return 
Apache::Geode::Client::Cache::Create( 
((apache::geode::client::CachePtr)nativeptr).ptr( ) );
+            auto regionService = m_nativeptr->get()->getRegionService();
+            if (auto realCache = 
std::dynamic_pointer_cast<apache::geode::client::Cache>(regionService))
+            {
+              return Apache::Geode::Client::Cache::Create(realCache);
+            }
+            else
+            {
+              return 
Apache::Geode::Client::AuthenticatedCache::Create(regionService);
+            }
           }
-          else
+          finally
           {
-            return Apache::Geode::Client::AuthenticatedCache::Create( 
nativeptr.ptr( ) );
+            GC::KeepAlive(m_nativeptr);
           }
           
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
@@ -700,8 +844,14 @@ namespace Apache
       {
          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-           apache::geode::client::CacheableKeyPtr keyptr( 
Serializable::GetUnmanagedValueGeneric<TKey>( key ) );
-           return NativePtr->containsValueForKey( keyptr );
+           try
+           {
+             return 
m_nativeptr->get()->containsValueForKey(Serializable::GetUnmanagedValueGeneric<TKey>(key));
+           }
+           finally
+           {
+             GC::KeepAlive(m_nativeptr);
+           }
 
          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -709,7 +859,14 @@ namespace Apache
       generic<class TKey, class TValue>
       int LocalRegion<TKey, TValue>::Count::get()
       {
-        return NativePtr->size();
+        try
+        {
+          return m_nativeptr->get()->size();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
       }
 
       generic<class TKey, class TValue>
@@ -721,10 +878,15 @@ namespace Apache
       generic<class TKey, class TValue>
       void LocalRegion<TKey, TValue>::Clear(Object^ callbackArg)
       {
-        _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          apache::geode::client::UserDataPtr callbackptr(
-              Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) 
);          
-          NativePtr->localClear(callbackptr );
+        _GF_MG_EXCEPTION_TRY2/* due to auto replace */        
+          try
+          {
+            
m_nativeptr->get()->localClear(Serializable::GetUnmanagedValueGeneric<Object^>( 
callbackArg ) );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -745,7 +907,14 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
         apache::geode::client::VectorOfRegionEntry vc;
-        NativePtr->entries( vc, false );        
+        try
+        {
+          m_nativeptr->get()->entries( vc, false );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }        
 
         if (toArray->Rank > 1 || (vc.size() > (toArray->Length - startIdx)))
         {
@@ -767,7 +936,14 @@ namespace Apache
       generic<class TKey, class TValue>
       bool LocalRegion<TKey, TValue>::IsDestroyed::get()
       {
-        return NativePtr->isDestroyed();
+        try
+        {
+          return m_nativeptr->get()->isDestroyed();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
       }
       
       generic<class TKey, class TValue>
@@ -817,8 +993,8 @@ namespace Apache
       generic<class TKey, class TValue>
       IRegion<TKey, TValue>^ LocalRegion<TKey, TValue>::GetLocalView()
       {
-        throw gcnew System::NotSupportedException;   
+        throw gcnew System::NotSupportedException;
+      }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
- } //namespace 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/LocalRegion.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/LocalRegion.hpp b/src/clicache/src/LocalRegion.hpp
index 2954a99..aa9679d 100644
--- a/src/clicache/src/LocalRegion.hpp
+++ b/src/clicache/src/LocalRegion.hpp
@@ -18,8 +18,11 @@
 #pragma once
 
 #include "geode_defs.hpp"
+#include "begin_native.hpp"
 #include <geode/Cache.hpp>
-//#include "impl/NativeWrapper.hpp"
+#include "end_native.hpp"
+
+#include "native_shared_ptr.hpp"
 #include "IRegion.hpp"
 #include "Log.hpp"
 #include "ExceptionTypes.hpp"
@@ -35,6 +38,8 @@ namespace Apache
     namespace Client
     {
 
+      namespace native = apache::geode::client;
+
       generic<class TKey, class TValue>
       ref class RegionEntry;
 
@@ -42,7 +47,7 @@ namespace Apache
       ref class AttributesMutator;
 
       generic<class TKey, class TValue>
-                       public ref class LocalRegion : public 
Client::Internal::SBWrap<apache::geode::client::Region>, public IRegion<TKey, 
TValue>  
+                       public ref class LocalRegion : public IRegion<TKey, 
TValue>  
       {
       public:
 
@@ -226,22 +231,31 @@ namespace Apache
         /// The managed wrapper object; null if the native pointer is null.
         /// </returns>
         //generic<class TKey, class TValue>
-        inline static IRegion<TKey, TValue>^ Create( 
apache::geode::client::Region* nativeptr )
+        inline static IRegion<TKey, TValue>^ Create( native::RegionPtr 
nativeptr )
         {
-          return ( nativeptr != nullptr ?
-            gcnew LocalRegion<TKey, TValue>( nativeptr ) : nullptr );
+          return __nullptr == nativeptr ? nullptr :
+            gcnew LocalRegion<TKey, TValue>( nativeptr );
+        }
+
+        std::shared_ptr<native::Region> GetNative()
+        {
+          return m_nativeptr->get_shared_ptr();
         }
 
         /// <summary>
         /// Private constructor to wrap a native object pointer
         /// </summary>
         /// <param name="nativeptr">The native object pointer</param>
-        inline LocalRegion( apache::geode::client::Region* nativeptr )
-          : SBWrap( nativeptr ) { }
+        inline LocalRegion( native::RegionPtr nativeptr )
+                               {
+          m_nativeptr = gcnew native_shared_ptr<native::Region>(nativeptr);
+        }
 
         private:        
         inline apache::geode::client::SerializablePtr 
getRegionEntryValue(apache::geode::client::CacheableKeyPtr& key);
         bool AreValuesEqual(apache::geode::client::CacheablePtr& val1, 
apache::geode::client::CacheablePtr& val2);
+
+        native_shared_ptr<native::Region>^ m_nativeptr;   
       };
     }  // namespace Client
   }  // namespace Geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/Log.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Log.hpp b/src/clicache/src/Log.hpp
index 9c13d0c..ed5dd28 100644
--- a/src/clicache/src/Log.hpp
+++ b/src/clicache/src/Log.hpp
@@ -18,7 +18,10 @@
 #pragma once
 
 #include "geode_defs.hpp"
+#include "begin_native.hpp"
 #include <geode/Log.hpp>
+#include "end_native.hpp"
+
 
 
 using namespace System;

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/Pool.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Pool.cpp b/src/clicache/src/Pool.cpp
index 3a3e68f..32921fb 100644
--- a/src/clicache/src/Pool.cpp
+++ b/src/clicache/src/Pool.cpp
@@ -35,195 +35,409 @@ namespace Apache
     namespace Client
     {
 
-      //generic<class TKey, class TValue>
-      String^ Pool/*<TKey, TValue>*/::Name::get( )
+
+      String^ Pool::Name::get( )
       {
-        return ManagedString::Get( NativePtr->getName( ) );
+        try
+        {
+          return ManagedString::Get( m_nativeptr->get()->getName( ) );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::FreeConnectionTimeout::get()
+
+      Int32 Pool::FreeConnectionTimeout::get()
       {
-        return NativePtr->getFreeConnectionTimeout();
+        try
+        {
+          return m_nativeptr->get()->getFreeConnectionTimeout();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::LoadConditioningInterval::get()
+
+      Int32 Pool::LoadConditioningInterval::get()
       {
-        return NativePtr->getLoadConditioningInterval();
+        try
+        {
+          return m_nativeptr->get()->getLoadConditioningInterval();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::SocketBufferSize::get()
+
+      Int32 Pool::SocketBufferSize::get()
       {
-        return NativePtr->getSocketBufferSize();
+        try
+        {
+          return m_nativeptr->get()->getSocketBufferSize();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::ReadTimeout::get()
+
+      Int32 Pool::ReadTimeout::get()
       {
-        return NativePtr->getReadTimeout();
+        try
+        {
+          return m_nativeptr->get()->getReadTimeout();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::MinConnections::get()
+
+      Int32 Pool::MinConnections::get()
       {
-        return NativePtr->getMinConnections();
+        try
+        {
+          return m_nativeptr->get()->getMinConnections();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::MaxConnections::get()
+
+      Int32 Pool::MaxConnections::get()
       {
-        return NativePtr->getMaxConnections();
+        try
+        {
+          return m_nativeptr->get()->getMaxConnections();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::IdleTimeout::get()
+
+      Int32 Pool::IdleTimeout::get()
       {
-        return NativePtr->getIdleTimeout();
+        try
+        {
+          return m_nativeptr->get()->getIdleTimeout();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::PingInterval::get()
+
+      Int32 Pool::PingInterval::get()
       {
-        return NativePtr->getPingInterval();
+        try
+        {
+          return m_nativeptr->get()->getPingInterval();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::UpdateLocatorListInterval::get()
+
+      Int32 Pool::UpdateLocatorListInterval::get()
       {
-        return NativePtr->getUpdateLocatorListInterval();
+        try
+        {
+          return m_nativeptr->get()->getUpdateLocatorListInterval();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::StatisticInterval::get()
+
+      Int32 Pool::StatisticInterval::get()
       {
-        return NativePtr->getStatisticInterval();
+        try
+        {
+          return m_nativeptr->get()->getStatisticInterval();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::RetryAttempts::get()
+
+      Int32 Pool::RetryAttempts::get()
       {
-        return NativePtr->getRetryAttempts();
+        try
+        {
+          return m_nativeptr->get()->getRetryAttempts();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Boolean Pool/*<TKey, TValue>*/::SubscriptionEnabled::get()
+
+      Boolean Pool::SubscriptionEnabled::get()
       {
-        return NativePtr->getSubscriptionEnabled();
+        try
+        {
+          return m_nativeptr->get()->getSubscriptionEnabled();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Boolean Pool/*<TKey, TValue>*/::PRSingleHopEnabled::get()
+
+      Boolean Pool::PRSingleHopEnabled::get()
       {
-        return NativePtr->getPRSingleHopEnabled();
+        try
+        {
+          return m_nativeptr->get()->getPRSingleHopEnabled();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::SubscriptionRedundancy::get()
+
+      Int32 Pool::SubscriptionRedundancy::get()
       {
-        return NativePtr->getSubscriptionRedundancy();
+        try
+        {
+          return m_nativeptr->get()->getSubscriptionRedundancy();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::SubscriptionMessageTrackingTimeout::get()
+
+      Int32 Pool::SubscriptionMessageTrackingTimeout::get()
       {
-        return NativePtr->getSubscriptionMessageTrackingTimeout();
+        try
+        {
+          return m_nativeptr->get()->getSubscriptionMessageTrackingTimeout();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Int32 Pool/*<TKey, TValue>*/::SubscriptionAckInterval::get()
+
+      Int32 Pool::SubscriptionAckInterval::get()
       {
-        return NativePtr->getSubscriptionAckInterval();
+        try
+        {
+          return m_nativeptr->get()->getSubscriptionAckInterval();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      String^ Pool/*<TKey, TValue>*/::ServerGroup::get( )
+
+      String^ Pool::ServerGroup::get( )
       {
-        return ManagedString::Get( NativePtr->getServerGroup( ) );
+        try
+        {
+          return ManagedString::Get( m_nativeptr->get()->getServerGroup( ) );
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      array<String^>^ Pool/*<TKey, TValue>*/::Locators::get()
+
+      array<String^>^ Pool::Locators::get()
       {
-        apache::geode::client::CacheableStringArrayPtr locators = 
NativePtr->getLocators();
-        int length = locators->length();
-        if (length > 0)
+        try
         {
-          array<String^>^ result = gcnew array<String^>(length);
-          for (int item = 0; item < length; item++)
+          auto locators = m_nativeptr->get()->getLocators();
+          int length = locators->length();
+          if (length > 0)
+          {
+            array<String^>^ result = gcnew array<String^>(length);
+            for (int item = 0; item < length; item++)
+            {
+              result[item] = 
CacheableString::GetString((*locators)[item].get());
+            }
+            return result;
+          }
+          else
           {
-            result[item] = CacheableString::GetString(locators[item].get());
+            return nullptr;
           }
-          return result;
         }
-        else
+        finally
         {
-          return nullptr;
+          GC::KeepAlive(m_nativeptr);
         }
       }
 
-      //generic<class TKey, class TValue>
-      array<String^>^ Pool/*<TKey, TValue>*/::Servers::get()
+
+      array<String^>^ Pool::Servers::get()
       {
-        apache::geode::client::CacheableStringArrayPtr servers = 
NativePtr->getServers();
-        int length = servers->length();
-        if (length > 0)
+        try
         {
-          array<String^>^ result = gcnew array<String^>(length);
-          for (int item = 0; item < length; item++)
+          auto servers = m_nativeptr->get()->getServers();
+          int length = servers->length();
+          if (length > 0)
           {
-            result[item] = CacheableString::GetString(servers[item].get());
+            array<String^>^ result = gcnew array<String^>(length);
+            for (int item = 0; item < length; item++)
+            {
+              result[item] = 
CacheableString::GetString((*servers)[item].get());
+            }
+            return result;
+          }
+          else
+          {
+            return nullptr;
           }
-          return result;
         }
-        else
+        finally
         {
-          return nullptr;
+          GC::KeepAlive(m_nativeptr);
         }
       }
 
          //generic<class TKey, class TValue>
-      Boolean Pool/*<TKey, TValue>*/::ThreadLocalConnections::get()
+      Boolean Pool::ThreadLocalConnections::get()
       {
-        return NativePtr->getThreadLocalConnections();
+        try
+        {
+          return m_nativeptr->get()->getThreadLocalConnections();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      bool Pool/*<TKey, TValue>*/::MultiuserAuthentication::get()
+
+      bool Pool::MultiuserAuthentication::get()
       {
-        return NativePtr->getMultiuserAuthentication();    
+        try
+        {
+          return m_nativeptr->get()->getMultiuserAuthentication();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+    
       }
       
-      //generic<class TKey, class TValue>
-      void Pool/*<TKey, TValue>*/::Destroy(Boolean KeepAlive)
+
+      void Pool::Destroy(Boolean KeepAlive)
       {
-        NativePtr->destroy(KeepAlive);
+        try
+        {
+          m_nativeptr->get()->destroy(KeepAlive);
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
       void Pool::ReleaseThreadLocalConnection()
       {
-        NativePtr->releaseThreadLocalConnection();
+        try
+        {
+          m_nativeptr->get()->releaseThreadLocalConnection();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      void Pool/*<TKey, TValue>*/::Destroy()
+
+      void Pool::Destroy()
       {
-        NativePtr->destroy();
+        try
+        {
+          m_nativeptr->get()->destroy();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
-      //generic<class TKey, class TValue>
-      Boolean Pool/*<TKey, TValue>*/::Destroyed::get()
+
+      Boolean Pool::Destroyed::get()
       {
-        return NativePtr->isDestroyed();
+        try
+        {
+          return m_nativeptr->get()->isDestroyed();
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+
       }
 
       generic<class TKey, class TResult>
-      QueryService<TKey, TResult>^ Pool/*<TKey, TValue>*/::GetQueryService()
+      QueryService<TKey, TResult>^ Pool::GetQueryService()
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return QueryService<TKey, TResult>::Create( 
NativePtr->getQueryService( ).ptr( ) );
+          try
+          {
+            return QueryService<TKey, 
TResult>::Create(m_nativeptr->get()->getQueryService());
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
+
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -232,11 +446,18 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2
 
-        return NativePtr->getPendingEventCount();
+          try
+          {
+            return m_nativeptr->get()->getPendingEventCount();
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
+
 
         _GF_MG_EXCEPTION_CATCH_ALL2
+      }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
-
- } //namespace 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/Pool.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Pool.hpp b/src/clicache/src/Pool.hpp
index b1af11c..5be1cd3 100644
--- a/src/clicache/src/Pool.hpp
+++ b/src/clicache/src/Pool.hpp
@@ -18,8 +18,11 @@
 #pragma once
 
 #include "geode_defs.hpp"
+#include "begin_native.hpp"
 #include <geode/Pool.hpp>
-#include "impl/NativeWrapper.hpp"
+#include "end_native.hpp"
+
+#include "native_shared_ptr.hpp"
 
 
 using namespace System;
@@ -30,9 +33,7 @@ namespace Apache
   {
     namespace Client
     {
-
-      //generic<class TKey, class TResult>
-      //ref class Properties;
+      namespace native = apache::geode::client;
 
       generic<class TKey, class TResult>
       ref class QueryService;
@@ -47,7 +48,6 @@ namespace Apache
       /// </remarks>
       // generic<class TKey, class TValue>
       public ref class Pool sealed
-        : public Client::Internal::SBWrap<apache::geode::client::Pool>
       {
       public:
 
@@ -323,10 +323,15 @@ namespace Apache
         /// <returns>
         /// The managed wrapper object; null if the native pointer is null.
         /// </returns>
-        inline static Pool^ Create(apache::geode::client::Pool* nativeptr)
+        inline static Pool^ Create(native::PoolPtr nativeptr)
+        {
+          return __nullptr == nativeptr ? nullptr :
+            gcnew Pool( nativeptr );
+        }
+
+        std::shared_ptr<native::Pool> GetNative()
         {
-          return (nativeptr != nullptr ?
-                  gcnew Pool(nativeptr) : nullptr);
+          return m_nativeptr->get_shared_ptr();
         }
 
       private:
@@ -335,8 +340,12 @@ namespace Apache
         /// Private constructor to wrap a native object pointer
         /// </summary>
         /// <param name="nativeptr">The native object pointer</param>
-        inline Pool(apache::geode::client::Pool* nativeptr)
-          : SBWrap(nativeptr) { }
+        inline Pool(native::PoolPtr nativeptr)
+        {
+          m_nativeptr = gcnew native_shared_ptr<native::Pool>(nativeptr);
+        }
+
+        native_shared_ptr<native::Pool>^ m_nativeptr;
       };
     }  // namespace Client
   }  // namespace Geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/PoolFactory.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolFactory.cpp b/src/clicache/src/PoolFactory.cpp
index 427453a..e17bdee 100644
--- a/src/clicache/src/PoolFactory.cpp
+++ b/src/clicache/src/PoolFactory.cpp
@@ -17,7 +17,6 @@
 
 #pragma once
 
-//#include "geode_includes.hpp"
 #include "Pool.hpp"
 #include "PoolFactory.hpp"
 
@@ -33,260 +32,419 @@ namespace Apache
     namespace Client
     {
 
-      //generic<class TKey, class TValue>
-      PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetFreeConnectionTimeout( 
Int32 connectionTimeout )
+
+      PoolFactory^ PoolFactory::SetFreeConnectionTimeout( Int32 
connectionTimeout )
                  {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setFreeConnectionTimeout( 
connectionTimeout );
+                         try
+                         {
+                           m_nativeptr->get()->setFreeConnectionTimeout( 
connectionTimeout );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetLoadConditioningInterval( Int32 loadConditioningInterval )
+
+                 PoolFactory^ PoolFactory::SetLoadConditioningInterval( Int32 
loadConditioningInterval )
                  {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setLoadConditioningInterval( 
loadConditioningInterval );
+                         try
+                         {
+                           m_nativeptr->get()->setLoadConditioningInterval( 
loadConditioningInterval );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetSocketBufferSize( Int32 bufferSize )
+
+                 PoolFactory^ PoolFactory::SetSocketBufferSize( Int32 
bufferSize )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setSocketBufferSize( bufferSize );
+                         try
+                         {
+                           m_nativeptr->get()->setSocketBufferSize( bufferSize 
);
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetReadTimeout( 
Int32 timeout )
+
+                 PoolFactory^ PoolFactory::SetReadTimeout( Int32 timeout )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setReadTimeout( timeout );
+                         try
+                         {
+                           m_nativeptr->get()->setReadTimeout( timeout );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetMinConnections( Int32 minConnections )
+
+                 PoolFactory^ PoolFactory::SetMinConnections( Int32 
minConnections )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setMinConnections( minConnections );
+                         try
+                         {
+                           m_nativeptr->get()->setMinConnections( 
minConnections );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetMaxConnections( Int32 maxConnections )
+
+                 PoolFactory^ PoolFactory::SetMaxConnections( Int32 
maxConnections )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setMaxConnections( maxConnections );
+                         try
+                         {
+                           m_nativeptr->get()->setMaxConnections( 
maxConnections );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetIdleTimeout( 
Int32 idleTimeout )
+
+                 PoolFactory^ PoolFactory::SetIdleTimeout( Int32 idleTimeout )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setIdleTimeout( idleTimeout );
+                         try
+                         {
+                           m_nativeptr->get()->setIdleTimeout( idleTimeout );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetRetryAttempts( 
Int32 retryAttempts )
+
+                 PoolFactory^ PoolFactory::SetRetryAttempts( Int32 
retryAttempts )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setRetryAttempts( retryAttempts );
+                         try
+                         {
+                           m_nativeptr->get()->setRetryAttempts( retryAttempts 
);
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetPingInterval( 
Int32 pingInterval )
+
+                 PoolFactory^ PoolFactory::SetPingInterval( Int32 pingInterval 
)
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setPingInterval( pingInterval );
+                         try
+                         {
+                           m_nativeptr->get()->setPingInterval( pingInterval );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetUpdateLocatorListInterval( Int32 updateLocatorListInterval )
+
+                 PoolFactory^ PoolFactory::SetUpdateLocatorListInterval( Int32 
updateLocatorListInterval )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setUpdateLocatorListInterval( 
updateLocatorListInterval );
+                         try
+                         {
+                           m_nativeptr->get()->setUpdateLocatorListInterval( 
updateLocatorListInterval );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-      PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetStatisticInterval( Int32 
statisticInterval )
+
+      PoolFactory^ PoolFactory::SetStatisticInterval( Int32 statisticInterval )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setStatisticInterval( statisticInterval );
+                         try
+                         {
+                           m_nativeptr->get()->setStatisticInterval( 
statisticInterval );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-      PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetServerGroup( String^ 
group )
+
+      PoolFactory^ PoolFactory::SetServerGroup( String^ group )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
         ManagedString mg_servergroup( group );
-                         NativePtr->setServerGroup( mg_servergroup.CharPtr );
+                         try
+                         {
+                           m_nativeptr->get()->setServerGroup( 
mg_servergroup.CharPtr );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, TValue>*/::AddLocator( 
String^ host, Int32 port )
+
+                 PoolFactory^ PoolFactory::AddLocator( String^ host, Int32 
port )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
         ManagedString mg_host( host );
-                         NativePtr->addLocator( mg_host.CharPtr, port );
+                         try
+                         {
+                           m_nativeptr->get()->addLocator( mg_host.CharPtr, 
port );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-      PoolFactory^ PoolFactory/*<TKey, TValue>*/::AddServer( String^ host, 
Int32 port )
+
+      PoolFactory^ PoolFactory::AddServer( String^ host, Int32 port )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
                          ManagedString mg_host( host );
-                         NativePtr->addServer( mg_host.CharPtr, port );
+                         try
+                         {
+                           m_nativeptr->get()->addServer( mg_host.CharPtr, 
port );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetSubscriptionEnabled( Boolean enabled )
+
+                 PoolFactory^ PoolFactory::SetSubscriptionEnabled( Boolean 
enabled )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setSubscriptionEnabled( enabled );
+                         try
+                         {
+                           m_nativeptr->get()->setSubscriptionEnabled( enabled 
);
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-          PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetPRSingleHopEnabled( 
Boolean enabled )
+
+          PoolFactory^ PoolFactory::SetPRSingleHopEnabled( Boolean enabled )
           {
             _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-              NativePtr->setPRSingleHopEnabled(enabled);
+              try
+              {
+                m_nativeptr->get()->setPRSingleHopEnabled(enabled);
+              }
+              finally
+              {
+                GC::KeepAlive(m_nativeptr);
+              }
 
              _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
                return this;
           }
 
-          //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetSubscriptionRedundancy( Int32 redundancy )
+    
+                 PoolFactory^ PoolFactory::SetSubscriptionRedundancy( Int32 
redundancy )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setSubscriptionRedundancy( redundancy );
+                         try
+                         {
+                           m_nativeptr->get()->setSubscriptionRedundancy( 
redundancy );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetSubscriptionMessageTrackingTimeout( Int32 messageTrackingTimeout )
+
+                 PoolFactory^ 
PoolFactory::SetSubscriptionMessageTrackingTimeout( Int32 
messageTrackingTimeout )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setSubscriptionMessageTrackingTimeout( 
messageTrackingTimeout );
+                         try
+                         {
+                           
m_nativeptr->get()->setSubscriptionMessageTrackingTimeout( 
messageTrackingTimeout );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, 
TValue>*/::SetSubscriptionAckInterval( Int32 ackInterval )
+
+                 PoolFactory^ PoolFactory::SetSubscriptionAckInterval( Int32 
ackInterval )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->setSubscriptionAckInterval( ackInterval );
+                         try
+                         {
+                           m_nativeptr->get()->setSubscriptionAckInterval( 
ackInterval );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
-      PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetThreadLocalConnections( 
Boolean enabled )
+      PoolFactory^ PoolFactory::SetThreadLocalConnections( Boolean enabled )
       {
                          _GF_MG_EXCEPTION_TRY2
 
-                         NativePtr->setThreadLocalConnections( enabled );
+                         try
+                         {
+                           m_nativeptr->get()->setThreadLocalConnections( 
enabled );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2
           return this;
          }
-      //generic<class TKey, class TValue>
-      PoolFactory^ PoolFactory/*<TKey, TValue>*/::SetMultiuserAuthentication( 
bool multiuserAuthentication )
+
+      PoolFactory^ PoolFactory::SetMultiuserAuthentication( bool 
multiuserAuthentication )
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          NativePtr->setMultiuserAuthentication( multiuserAuthentication );
+          try
+          {
+            m_nativeptr->get()->setMultiuserAuthentication( 
multiuserAuthentication );
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
           }
 
-      //generic<class TKey, class TValue>
-                 PoolFactory^ PoolFactory/*<TKey, TValue>*/::Reset()
+
+                 PoolFactory^ PoolFactory::Reset()
       {
                          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         NativePtr->reset( );
+                         try
+                         {
+                           m_nativeptr->get()->reset( );
+                         }
+                         finally
+                         {
+                           GC::KeepAlive(m_nativeptr);
+                         }
 
                          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
           return this;
                  }
 
-      //generic<class TKey, class TValue>
-                 Pool/*<TKey, TValue>*/^ PoolFactory/*<TKey, 
TValue>*/::Create( String^ name )
-      {
-                         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        ManagedString mg_name( name );
-        apache::geode::client::PoolPtr & pool = 
NativePtr->create(mg_name.CharPtr);
-        return Pool/*<TKey, TValue>*/::Create(pool.get());
+      Pool^ PoolFactory::Create(String^ name)
+      {
+        _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-                         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
+          ManagedString mg_name(name);
+          try
+          {
+            return Pool::Create(m_nativeptr->get()->create(mg_name.CharPtr));
+          }
+          finally
+          {
+            GC::KeepAlive(m_nativeptr);
+          }
+        
+        _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
+      }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
-
- } //namespace 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/PoolFactory.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolFactory.hpp b/src/clicache/src/PoolFactory.hpp
index 4f81e57..49665bb 100644
--- a/src/clicache/src/PoolFactory.hpp
+++ b/src/clicache/src/PoolFactory.hpp
@@ -18,8 +18,11 @@
 #pragma once
 
 #include "geode_defs.hpp"
+#include "begin_native.hpp"
 #include <geode/PoolFactory.hpp>
-//#include "impl/NativeWrapper.hpp"
+#include "end_native.hpp"
+
+#include "native_shared_ptr.hpp"
 
 using namespace System;
 
@@ -29,16 +32,16 @@ namespace Apache
   {
     namespace Client
     {
+      namespace native = apache::geode::client;
+
 
-      // generic<class TKey, class TValue>
       ref class Pool;
 
       /// <summary>
       /// This interface provides for the configuration and creation of 
instances of Pool.
       /// </summary>
-      // generic<class TKey, class TValue>
+
       public ref class PoolFactory sealed
-        : public Internal::SBWrap<apache::geode::client::PoolFactory>
       {
       public:
 
@@ -387,7 +390,7 @@ namespace Apache
         /// throws IllegalStateException if a pool with name already exists
         /// throws IllegalStateException if a locator or server has not been 
added.
         /// </exception>
-        Pool/*<TKey, TValue>*/^ Create(String^ name);
+        Pool^ Create(String^ name);
 
       internal:
 
@@ -399,10 +402,10 @@ namespace Apache
         /// <returns>
         /// The managed wrapper object; null if the native pointer is null.
         /// </returns>
-        inline static PoolFactory/*<TKey, TValue>*/^ 
Create(apache::geode::client::PoolFactory* nativeptr)
+        inline static PoolFactory^ Create(native::PoolFactoryPtr nativeptr)
         {
-          return (nativeptr != nullptr ?
-                  gcnew PoolFactory(nativeptr) : nullptr);
+          return __nullptr == nativeptr ? nullptr :
+            gcnew PoolFactory( nativeptr );
         }
 
       private:
@@ -411,8 +414,12 @@ namespace Apache
         /// Private constructor to wrap a native object pointer
         /// </summary>
         /// <param name="nativeptr">The native object pointer</param>
-        inline PoolFactory(apache::geode::client::PoolFactory* nativeptr)
-          : SBWrap(nativeptr) { }
+        inline PoolFactory(native::PoolFactoryPtr nativeptr)
+        {
+          m_nativeptr = gcnew 
native_shared_ptr<native::PoolFactory>(nativeptr);
+        }
+
+        native_shared_ptr<native::PoolFactory>^ m_nativeptr;
       };
     }  // namespace Client
   }  // namespace Geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/PoolManager.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolManager.cpp b/src/clicache/src/PoolManager.cpp
index d609860..d2aa28d 100644
--- a/src/clicache/src/PoolManager.cpp
+++ b/src/clicache/src/PoolManager.cpp
@@ -17,13 +17,11 @@
 
 #pragma once
 
-//#include "geode_includes.hpp"
 #include "Region.hpp"
 #include "Pool.hpp"
 #include "PoolManager.hpp"
 #include "PoolFactory.hpp"
 #include "CacheableString.hpp"
-#include "impl/SafeConvert.hpp"
 
 using namespace System;
 
@@ -33,55 +31,47 @@ namespace Apache
   {
     namespace Client
     {
+      namespace native = apache::geode::client;
 
-      //generic<class TKey, class TValue>
-      PoolFactory/*<TKey, TValue>*/^ PoolManager/*<TKey, 
TValue>*/::CreateFactory()
+      PoolFactory^ PoolManager::CreateFactory()
       {
-        return PoolFactory/*<TKey, 
TValue>*/::Create(apache::geode::client::PoolManager::createFactory().get());
+        return PoolFactory::Create(native::PoolManager::createFactory());
       }
 
-      //generic<class TKey, class TValue>
-      const Dictionary<String^, Pool/*<TKey, TValue>*/^>^ PoolManager/*<TKey, 
TValue>*/::GetAll()
+      const Dictionary<String^, Pool^>^ PoolManager::GetAll()
       {
-        apache::geode::client::HashMapOfPools pools = 
apache::geode::client::PoolManager::getAll();
-        Dictionary<String^, Pool/*<TKey, TValue>*/^>^ result = gcnew 
Dictionary<String^, Pool/*<TKey, TValue>*/^>();
-        for (apache::geode::client::HashMapOfPools::Iterator iter = 
pools.begin(); iter != pools.end(); ++iter)
+        auto pools = native::PoolManager::getAll();
+        auto result = gcnew Dictionary<String^, Pool^>();
+        for (native::HashMapOfPools::Iterator iter = pools.begin(); iter != 
pools.end(); ++iter)
         {
-          String^ key = CacheableString::GetString(iter.first().get());
-          Pool/*<TKey, TValue>*/^ val = Pool/*<TKey, 
TValue>*/::Create(iter.second().get());
+          auto key = CacheableString::GetString(iter.first().get());
+          auto val = Pool::Create(iter.second());
           result->Add(key, val);
         }
         return result;
       }
 
-      //generic<class TKey, class TValue>
-      Pool/*<TKey, TValue>*/^ PoolManager/*<TKey, TValue>*/::Find(String^ name)
+      Pool^ PoolManager::Find(String^ name)
       {
         ManagedString mg_name( name );
-        apache::geode::client::PoolPtr pool = 
apache::geode::client::PoolManager::find(mg_name.CharPtr);
-        return Pool/*<TKey, TValue>*/::Create(pool.get());
+        auto pool = native::PoolManager::find(mg_name.CharPtr);
+        return Pool::Create(pool);
       }
 
-      //generic <class TKey, class TValue>
-      Pool/*<TKey, TValue>*/^ PoolManager/*<TKey, 
TValue>*/::Find(Client::Region<Object^, Object^>^ region)
+      Pool^ PoolManager::Find(Client::Region<Object^, Object^>^ region)
       {
-        //return 
Pool::Create(apache::geode::client::PoolManager::find(apache::geode::client::RegionPtr(GetNativePtr<apache::geode::client::Region>(region))).get());
-        return Pool/*<TKey, 
TValue>*/::Create(apache::geode::client::PoolManager::find(apache::geode::client::RegionPtr(region->_NativePtr)).get());
+        return Pool::Create(native::PoolManager::find(region->GetNative()));
       }
 
-      //generic<class TKey, class TValue>
-      void PoolManager/*<TKey, TValue>*/::Close(Boolean KeepAlive)
+      void PoolManager::Close(Boolean KeepAlive)
       {
-        apache::geode::client::PoolManager::close(KeepAlive);
+        native::PoolManager::close(KeepAlive);
       }
 
-      //generic<class TKey, class TValue>
-      void PoolManager/*<TKey, TValue>*/::Close()
+      void PoolManager::Close()
       {
-        apache::geode::client::PoolManager::close();
+        native::PoolManager::close();
+      }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
-
-
- } //namespace 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/6027574a/src/clicache/src/PoolManager.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolManager.hpp b/src/clicache/src/PoolManager.hpp
index a04d1ac..f47d553 100644
--- a/src/clicache/src/PoolManager.hpp
+++ b/src/clicache/src/PoolManager.hpp
@@ -18,8 +18,11 @@
 #pragma once
 
 #include "geode_defs.hpp"
+#include "begin_native.hpp"
 #include <geode/PoolManager.hpp>
-//#include "impl/NativeWrapper.hpp"
+#include "end_native.hpp"
+
+
 
 using namespace System;
 

Reply via email to