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

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

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/TransactionEventM.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/TransactionEventM.cpp b/geode-client-native/src/clicache/TransactionEventM.cpp
new file mode 100644
index 0000000..bf32506
--- /dev/null
+++ b/geode-client-native/src/clicache/TransactionEventM.cpp
@@ -0,0 +1,54 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+#ifdef CSTX_COMMENTED
+#include "gf_includes.hpp"
+#include "TransactionEventM.hpp"
+#include "impl/SafeConvert.hpp"
+#include "CacheM.hpp"
+
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache
+    {
+
+      GemStone::GemFire::Cache::Cache^ TransactionEvent::Cache::get( )
+      {
+        gemfire::CachePtr& cacheptr( NativePtr->getCache( ) );
+        return GemStone::GemFire::Cache::Cache::Create( cacheptr.ptr( ) );
+      }
+
+      TransactionId^ TransactionEvent::TransactionId::get( )
+      {
+        gemfire::TransactionIdPtr& tidptr( NativePtr->getTransactionId( ) );
+        return GemStone::GemFire::Cache::TransactionId::Create( tidptr.ptr( ) );
+      }
+
+      array<EntryEvent^>^ TransactionEvent::Events::get( )
+      {
+        gemfire::VectorOfEntryEvent vee;
+        vee = NativePtr->getEvents();
+        array<EntryEvent^>^ events =
+          gcnew array<EntryEvent^>( vee.size( ) );
+        // Loop through the unmanaged event objects to convert them to the managed objects. 
+        for( int32_t index = 0; index < vee.size( ); index++ )
+        {
+          gemfire::EntryEventPtr& nativeptr( vee[ index ] );
+          EntryEvent entryEvent( nativeptr.ptr( ) );
+          events[ index ] = (%entryEvent);
+        }
+        return events;
+      }
+    }
+  }
+}
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/TransactionEventM.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/TransactionEventM.hpp b/geode-client-native/src/clicache/TransactionEventM.hpp
new file mode 100644
index 0000000..abc82db
--- /dev/null
+++ b/geode-client-native/src/clicache/TransactionEventM.hpp
@@ -0,0 +1,73 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+#ifdef CSTX_COMMENTED
+#pragma once
+
+#include "gf_defs.hpp"
+#include "EntryEventM.hpp"
+#include "cppcache/TransactionEvent.hpp"
+#include "impl/NativeWrapper.hpp"
+#include "TransactionIdM.hpp"
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache
+    {
+      ref class Cache;
+
+      /// <summary>
+      /// This class encapsulates events that occur for an transaction in a cache.
+      /// </summary>
+      public ref class TransactionEvent sealed
+        : public Internal::SBWrap<gemfire::TransactionEvent>
+      {
+      public:
+
+        /// <summary>
+        /// Gets the transaction id for this transaction.
+        /// </summary>
+        property GemStone::GemFire::Cache::TransactionId^ TransactionId
+        {
+          GemStone::GemFire::Cache::TransactionId^ get( );
+        }
+
+     		/// <summary>
+        /// Returns an ordered list of every event for this transaction.
+        /// The event order is consistent with the order in which the operations were
+        /// performed during the transaction.
+        /// </summary>
+        property array<EntryEvent^>^ Events
+        {
+          array<EntryEvent^>^ get( );
+        }
+
+        /// <summary>
+        /// Gets the Cache for this transaction event
+        /// </summary>
+        property GemStone::GemFire::Cache::Cache^ Cache
+        {
+          GemStone::GemFire::Cache::Cache^ get( );
+        }
+      
+     internal:
+        /// <summary>
+        /// Internal constructor to wrap a native object pointer
+        /// </summary>
+        /// <param name="nativeptr">The native object pointer</param>
+        inline TransactionEvent( const gemfire::TransactionEvent* nativeptr )
+          : SBWrap( const_cast<gemfire::TransactionEvent*>( nativeptr )) { }
+      };
+
+    }
+  }
+}
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/TransactionListenerAdapter.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/TransactionListenerAdapter.hpp b/geode-client-native/src/clicache/TransactionListenerAdapter.hpp
new file mode 100644
index 0000000..d36f40c
--- /dev/null
+++ b/geode-client-native/src/clicache/TransactionListenerAdapter.hpp
@@ -0,0 +1,49 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+#ifdef CSTX_COMMENTED
+#pragma once
+
+#include "gf_defs.hpp"
+#include "ITransactionListener.hpp"
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache
+    {
+      /// <summary>
+      /// Utility class that implements all methods in <c>ITransactionListener</c>
+      /// with empty implementations. Applications can subclass this class
+      /// and only override the methods for the events of interest.
+      /// </summary>
+      public ref class TransactionListenerAdapter
+        : public ITransactionListener
+      {
+      public:
+        virtual void AfterCommit(TransactionEvent^ te)
+        {
+        }
+
+	      virtual void AfterFailedCommit(TransactionEvent^ te)
+        {
+        }
+
+	      virtual void AfterRollback(TransactionEvent^ te)
+        {
+        }
+    
+        virtual void Close()
+        {
+        }
+      };
+
+    }
+  }
+}
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/TransactionWriterAdapter.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/TransactionWriterAdapter.hpp b/geode-client-native/src/clicache/TransactionWriterAdapter.hpp
new file mode 100644
index 0000000..e515cd0
--- /dev/null
+++ b/geode-client-native/src/clicache/TransactionWriterAdapter.hpp
@@ -0,0 +1,38 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+#ifdef CSTX_COMMENTED
+#pragma once
+
+#include "gf_defs.hpp"
+#include "ITransactionWriter.hpp"
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache
+    {
+
+      /// <summary>
+      /// Utility class that implements all methods in <c>ITransactionWriter</c>
+      /// with empty implementations. Applications can subclass this class
+      /// and only override the methods for the events of interest.
+      /// </summary>
+      public ref class TransactionWriterAdapter
+        : public ITransactionWriter
+      {
+      public:
+        virtual void BeforeCommit(TransactionEvent^ te)
+        {
+        }
+      };
+
+    }
+  }
+}
+#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.cpp b/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.cpp
new file mode 100644
index 0000000..dbcd87d
--- /dev/null
+++ b/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.cpp
@@ -0,0 +1,63 @@
+/*=========================================================================
+* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+*=========================================================================
+*/
+
+#include "UserFunctionExecutionExceptionM.hpp"
+#include "CacheableStringM.hpp"
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache
+    {
+      // IGFSerializable methods
+      void UserFunctionExecutionException::ToData( DataOutput^ output )
+      {
+        throw gcnew IllegalStateException("UserFunctionExecutionException::ToData is not intended for use.");
+      }
+
+      IGFSerializable^ UserFunctionExecutionException::FromData( DataInput^ input )
+      {
+        throw gcnew IllegalStateException("UserFunctionExecutionException::FromData is not intended for use.");
+        return this;
+      } 
+
+      uint32_t UserFunctionExecutionException::ObjectSize::get( )
+      {        
+        _GF_MG_EXCEPTION_TRY
+          throw gcnew IllegalStateException("UserFunctionExecutionException::ObjectSize is not intended for use.");
+          return NativePtr->objectSize( );
+
+        _GF_MG_EXCEPTION_CATCH_ALL
+      }
+
+      String^ UserFunctionExecutionException::Message::get() 
+      {
+        _GF_MG_EXCEPTION_TRY
+
+          gemfire::CacheableStringPtr value = NativePtr->getMessage(  );
+          return CacheableString::GetString( value.ptr( ) );          
+
+        _GF_MG_EXCEPTION_CATCH_ALL
+      }
+
+      String^ UserFunctionExecutionException::Name::get() 
+      {
+        _GF_MG_EXCEPTION_TRY
+
+          gemfire::CacheableStringPtr value = NativePtr->getName(  );
+          return CacheableString::GetString( value.ptr( ) );          
+
+        _GF_MG_EXCEPTION_CATCH_ALL
+      }
+    }
+  }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.hpp b/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.hpp
new file mode 100644
index 0000000..e98a02c
--- /dev/null
+++ b/geode-client-native/src/clicache/UserFunctionExecutionExceptionM.hpp
@@ -0,0 +1,124 @@
+/*=========================================================================
+* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+*=========================================================================
+*/
+
+#pragma once
+
+#include "gf_defs.hpp"
+#include "cppcache/UserFunctionExecutionException.hpp"
+#include "IGFSerializable.hpp"
+#include "DataInputM.hpp"
+#include "DataOutputM.hpp"
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache
+    {
+
+      /// <summary>
+      /// UserFunctionExecutionException class is used to encapsulate gemfire sendException in case of Function execution.
+      /// </summary>
+      [Obsolete("Use classes and APIs from the GemStone.GemFire.Cache.Generic namespace")]
+      public ref class UserFunctionExecutionException sealed
+        : public Internal::SBWrap<gemfire::UserFunctionExecutionException>, public IGFSerializable
+      {
+      public:
+
+        // IGFSerializable members
+
+        /// <summary>
+        /// Serializes this object.
+        /// Users should not implement/call this api as it is only intended for internal use.
+        /// </summary>
+        /// <param name="output">
+        /// the DataOutput stream to use for serialization
+        /// </param>
+        /// <exception cref="IllegalStateException">
+        /// If this api is called from User code.
+        /// </exception>
+        virtual void ToData( DataOutput^ output );
+
+        /// <summary>
+        /// Deserializes this object.
+        /// Users should not implement/call this api as it is only intended for internal use.
+        /// </summary>
+        /// <param name="input">
+        /// the DataInput stream to use for reading data
+        /// </param>
+        /// <exception cref="IllegalStateException">
+        /// If this api is called from User code.
+        /// </exception>
+        /// <returns>the deserialized object</returns>
+        virtual IGFSerializable^ FromData( DataInput^ input );        
+
+        /// <summary>
+        /// Returns the classId of this class for serialization.
+        /// Users should not implement/call this api as it is only intended for internal use.
+        /// </summary>
+        /// <exception cref="IllegalStateException">
+        /// If this api is called from User code.
+        /// </exception>
+        /// <returns>classId of this class</returns>
+        /// <seealso cref="IGFSerializable.ClassId" />
+        virtual property uint32_t ClassId
+        {
+          inline virtual uint32_t get( )
+          {
+            throw gcnew IllegalStateException("UserFunctionExecutionException::ClassId is not intended for use.");
+            return 0;
+          }
+        }
+
+        /// <summary>
+        /// return the size of this object in bytes
+        /// Users should not implement/call this api as it is only intended for internal use.
+        /// </summary>
+        /// <exception cref="IllegalStateException">
+        /// If this api is called from User code.
+        /// </exception>
+        virtual property uint32_t ObjectSize
+        {
+          virtual uint32_t get( ); 
+        }
+
+        // End: IGFSerializable members   
+
+        /// <summary>
+        /// return as String the Exception message returned from gemfire sendException api.          
+        /// </summary>
+        /// <returns>the String Exception Message</returns>
+        property String^ Message
+        {
+          String^ get();          
+        }
+
+        /// <summary>
+        /// return as String the Exception name returned from gemfire sendException api.          
+        /// </summary>
+        /// <returns>the String Exception Name</returns>
+        property String^ Name
+        {
+          String^ get();          
+        }
+
+      internal:
+
+        /// <summary>
+        /// Private constructor to wrap a native object pointer.
+        /// </summary>
+        /// <param name="nativeptr">The native object pointer</param>
+        inline UserFunctionExecutionException( gemfire::UserFunctionExecutionException* nativeptr )
+          : SBWrap( nativeptr ) { }
+      };
+
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/Utils.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/Utils.cpp b/geode-client-native/src/clicache/Utils.cpp
new file mode 100644
index 0000000..725a4ae
--- /dev/null
+++ b/geode-client-native/src/clicache/Utils.cpp
@@ -0,0 +1,63 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+#include "gf_includes.hpp"
+#include "Utils.hpp"
+#include "cppcache/impl/Utils.hpp"
+
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+
+    MethodInfo^ Utils::LoadMethod( String^ assemblyName,
+      String^ typeName, String^ methodName)
+    {
+      Type^ loadType;
+
+      loadType = Type::GetType( typeName + ',' + assemblyName, false, true );
+      if (loadType != nullptr)
+      {
+        return loadType->GetMethod( methodName, BindingFlags::Public |
+          BindingFlags::Static | BindingFlags::IgnoreCase );
+      }
+      return nullptr;
+    }
+
+    MethodInfo^ Utils::LoadMethodFrom( String^ assemblyPath,
+      String^ typeName, String^ methodName)
+    {
+      String^ assemblyName;
+      Type^ loadType;
+
+      assemblyName = System::IO::Path::GetFileNameWithoutExtension(
+        assemblyPath );
+      loadType = Type::GetType( typeName + ',' + assemblyName, false, true );
+      if (loadType == nullptr)
+      {
+        Assembly^ assmb = Assembly::LoadFrom( assemblyPath );
+        if (assmb != nullptr)
+        {
+          loadType = assmb->GetType(typeName, false, true);
+        }
+      }
+      if (loadType != nullptr)
+      {
+        return loadType->GetMethod( methodName, BindingFlags::Public |
+          BindingFlags::Static | BindingFlags::IgnoreCase );
+      }
+      return nullptr;
+    }
+
+    int32_t Utils::LastError::get( )
+    {
+      return gemfire::Utils::getLastError( );
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/Utils.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/Utils.hpp b/geode-client-native/src/clicache/Utils.hpp
new file mode 100644
index 0000000..8154b21
--- /dev/null
+++ b/geode-client-native/src/clicache/Utils.hpp
@@ -0,0 +1,75 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+#pragma once
+
+#include "gf_defs.hpp"
+//#include "cppcache/SystemProperties.hpp"
+#include "impl/NativeWrapper.hpp"
+#include "LogM.hpp"
+
+
+using namespace System;
+using namespace System::Reflection;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+
+    /// <summary>
+    /// Some static utility methods.
+    /// </summary>
+      [Obsolete("Use classes and APIs from the GemStone.GemFire.Cache.Generic namespace")]
+    public ref class Utils STATICCLASS
+    {
+    public:
+
+      /// <summary>
+      /// Load a method from the given assembly path using the default
+      /// constructor (if not a static method) of the given type.
+      /// </summary>
+      /// <param name="assemblyPath">The path of the assembly.</param>
+      /// <param name="typeName">
+      /// The name of the class containing the method.
+      /// </param>
+      /// <param name="methodName">The name of the method.</param>
+      /// <returns>
+      /// The <c>System.Reflection.MethodInfo</c> for the given method,
+      /// or null if the method is not found.
+      /// </returns>
+      static MethodInfo^ LoadMethod( String^ assemblyPath,
+        String^ typeName, String^ methodName);
+
+      /// <summary>
+      /// Load a method from the given assembly name using the default
+      /// constructor (if not a static method) of the given type.
+      /// </summary>
+      /// <param name="assemblyName">The name of the assembly.</param>
+      /// <param name="typeName">
+      /// The name of the class containing the method.
+      /// </param>
+      /// <param name="methodName">The name of the method.</param>
+      /// <returns>
+      /// The <c>System.Reflection.MethodInfo</c> for the given method,
+      /// or null if the method is not found.
+      /// </returns>
+      static MethodInfo^ LoadMethodFrom( String^ assemblyName,
+        String^ typeName, String^ methodName);
+
+      /// <summary>
+      /// Utility method to get the calling thread's last system error code.
+      /// </summary>
+      static property int32_t LastError
+      {
+        int32_t get( );
+      }
+    };
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.cpp b/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.cpp
new file mode 100644
index 0000000..d642f53
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.cpp
@@ -0,0 +1,345 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+//#include "gf_includesN.hpp"
+#include "AttributesFactoryMN.hpp"
+#include "RegionMN.hpp"
+#include "impl/ManagedCacheLoaderN.hpp"
+#include "impl/ManagedPersistenceManagerN.hpp"
+#include "impl/ManagedCacheWriterN.hpp"
+#include "impl/ManagedCacheListenerN.hpp"
+#include "impl/ManagedPartitionResolverN.hpp"
+#include "impl/ManagedFixedPartitionResolverN.hpp"
+#include "impl/CacheLoaderMN.hpp"
+#include "impl/CacheWriterMN.hpp"
+#include "impl/CacheListenerMN.hpp"
+#include "impl/PartitionResolverMN.hpp"
+#include "impl/PersistenceManagerProxyMN.hpp"
+#include "RegionAttributesMN.hpp"
+#include "ICacheLoaderN.hpp"
+#include "IPersistenceManagerN.hpp"
+#include "ICacheWriterN.hpp"
+#include "IPartitionResolverN.hpp"
+#include "IFixedPartitionResolverN.hpp"
+#include "impl/SafeConvertN.hpp"
+
+using namespace System;
+using namespace System::Collections::Generic;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+      generic<class TKey, class TValue>
+      AttributesFactory<TKey, TValue>::AttributesFactory( RegionAttributes<TKey, TValue>^ regionAttributes )
+        : UMWrap( )
+      {
+        gemfire::RegionAttributesPtr attribptr(
+          GetNativePtrFromSBWrapGeneric<gemfire::RegionAttributes>( regionAttributes ) );
+        SetPtr( new gemfire::AttributesFactory( attribptr ), true );
+      }
+
+      // CALLBACKS
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCacheLoader( ICacheLoader<TKey, TValue>^ cacheLoader )
+      {
+        gemfire::CacheLoaderPtr loaderptr;
+        if ( cacheLoader != nullptr ) {
+          CacheLoaderGeneric<TKey, TValue>^ clg = gcnew CacheLoaderGeneric<TKey, TValue>();
+          clg->SetCacheLoader(cacheLoader);
+          loaderptr = new gemfire::ManagedCacheLoaderGeneric( /*clg,*/ cacheLoader );
+          ((gemfire::ManagedCacheLoaderGeneric*)loaderptr.ptr())->setptr(clg);
+        }
+        NativePtr->setCacheLoader( loaderptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCacheWriter( ICacheWriter<TKey, TValue>^ cacheWriter )
+      {
+        gemfire::CacheWriterPtr writerptr;
+        if ( cacheWriter != nullptr ) {
+          CacheWriterGeneric<TKey, TValue>^ cwg = gcnew CacheWriterGeneric<TKey, TValue>();
+          cwg->SetCacheWriter(cacheWriter);
+          writerptr = new gemfire::ManagedCacheWriterGeneric( /*cwg,*/ cacheWriter );
+          ((gemfire::ManagedCacheWriterGeneric*)writerptr.ptr())->setptr(cwg);
+        }
+        NativePtr->setCacheWriter( writerptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCacheListener( ICacheListener<TKey, TValue>^ cacheListener )
+      {
+        gemfire::CacheListenerPtr listenerptr;
+        if ( cacheListener != nullptr ) {
+          CacheListenerGeneric<TKey, TValue>^ clg = gcnew CacheListenerGeneric<TKey, TValue>();
+          clg->SetCacheListener(cacheListener);
+          //listenerptr = new gemfire::ManagedCacheListenerGeneric( (ICacheListener<Object^, Object^>^)cacheListener );
+          listenerptr = new gemfire::ManagedCacheListenerGeneric( /*clg,*/ cacheListener );
+          ((gemfire::ManagedCacheListenerGeneric*)listenerptr.ptr())->setptr(clg);
+        }
+        NativePtr->setCacheListener( listenerptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPartitionResolver( IPartitionResolver<TKey, TValue>^ partitionresolver )
+      {
+        gemfire::PartitionResolverPtr resolverptr;
+        if ( partitionresolver != nullptr ) {
+          Generic::IFixedPartitionResolver<TKey, TValue>^ resolver = 
+            dynamic_cast<Generic::IFixedPartitionResolver<TKey, TValue>^>(partitionresolver);
+          if (resolver != nullptr) {            
+            FixedPartitionResolverGeneric<TKey, TValue>^ prg = gcnew FixedPartitionResolverGeneric<TKey, TValue>();
+            prg->SetPartitionResolver(partitionresolver);
+            resolverptr = new gemfire::ManagedFixedPartitionResolverGeneric( partitionresolver ); 
+            ((gemfire::ManagedFixedPartitionResolverGeneric*)resolverptr.ptr())->setptr(prg);
+          }
+          else {            
+            PartitionResolverGeneric<TKey, TValue>^ prg = gcnew PartitionResolverGeneric<TKey, TValue>();
+            prg->SetPartitionResolver(partitionresolver);
+            resolverptr = new gemfire::ManagedPartitionResolverGeneric( partitionresolver );
+            ((gemfire::ManagedPartitionResolverGeneric*)resolverptr.ptr())->setptr(prg);            
+          }         
+        }
+        NativePtr->setPartitionResolver( resolverptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCacheLoader( String^ libPath, String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setCacheLoader( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCacheWriter( String^ libPath, String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setCacheWriter( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCacheListener( String^ libPath, String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setCacheListener( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPartitionResolver( String^ libPath, String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setPartitionResolver( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+      // EXPIRATION ATTRIBUTES
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetEntryIdleTimeout( ExpirationAction action, uint32_t idleTimeout )
+      {
+        NativePtr->setEntryIdleTimeout(
+          static_cast<gemfire::ExpirationAction::Action>( action ), idleTimeout );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetEntryTimeToLive( ExpirationAction action, uint32_t timeToLive )
+      {
+        NativePtr->setEntryTimeToLive(
+          static_cast<gemfire::ExpirationAction::Action>( action ), timeToLive );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetRegionIdleTimeout( ExpirationAction action, uint32_t idleTimeout )
+      {
+        NativePtr->setRegionIdleTimeout(
+          static_cast<gemfire::ExpirationAction::Action>( action ), idleTimeout );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetRegionTimeToLive( ExpirationAction action, uint32_t timeToLive )
+      {
+        NativePtr->setRegionTimeToLive(
+          static_cast<gemfire::ExpirationAction::Action>( action ), timeToLive );
+      }
+
+      // PERSISTENCE
+       generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPersistenceManager(IPersistenceManager<TKey, TValue>^ persistenceManager, Properties<String^, String^>^ config )
+      {
+        gemfire::PersistenceManagerPtr persistenceManagerptr;
+        if ( persistenceManager != nullptr ) {
+          PersistenceManagerGeneric<TKey, TValue>^ clg = gcnew PersistenceManagerGeneric<TKey, TValue>();
+          clg->SetPersistenceManager(persistenceManager);
+          persistenceManagerptr = new gemfire::ManagedPersistenceManagerGeneric( /*clg,*/ persistenceManager );
+          ((gemfire::ManagedPersistenceManagerGeneric*)persistenceManagerptr.ptr())->setptr(clg);
+        }
+         gemfire::PropertiesPtr configptr(GetNativePtr<gemfire::Properties>( config ) );
+         NativePtr->setPersistenceManager( persistenceManagerptr, configptr );
+      }
+      
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPersistenceManager(IPersistenceManager<TKey, TValue>^ persistenceManager )
+      {
+        SetPersistenceManager(persistenceManager, nullptr);
+      }
+        
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPersistenceManager( String^ libPath,
+        String^ factoryFunctionName )
+      {        
+        SetPersistenceManager( libPath, factoryFunctionName, nullptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPersistenceManager( String^ libPath,
+        String^ factoryFunctionName, Properties<String^, String^>^ config )
+      {        
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+        // VJR: TODO:
+				//TODO::split
+        gemfire::PropertiesPtr configptr(
+          GetNativePtr<gemfire::Properties>( config ) );
+
+        NativePtr->setPersistenceManager( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr, configptr );
+          
+      }
+
+      // DISTRIBUTION ATTRIBUTES
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetScope( ScopeType scopeType )
+      {
+        NativePtr->setScope(
+          static_cast<gemfire::ScopeType::Scope>( scopeType ) );
+      }
+
+      // STORAGE ATTRIBUTES
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetClientNotificationEnabled(
+        bool clientNotificationEnabled )
+      {
+        NativePtr->setClientNotificationEnabled( clientNotificationEnabled );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetEndpoints( String^ endpoints )
+      {
+        ManagedString mg_endpoints( endpoints );
+
+        NativePtr->setEndpoints( mg_endpoints.CharPtr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetPoolName( String^ poolName )
+      {
+        ManagedString mg_poolName( poolName );
+
+        NativePtr->setPoolName( mg_poolName.CharPtr );
+      }
+
+      // MAP ATTRIBUTES
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetInitialCapacity( int32_t initialCapacity )
+      {
+        _GF_MG_EXCEPTION_TRY/* due to auto replace */
+
+          NativePtr->setInitialCapacity( initialCapacity );
+
+        _GF_MG_EXCEPTION_CATCH_ALL/* due to auto replace */
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetLoadFactor( Single loadFactor )
+      {
+        _GF_MG_EXCEPTION_TRY/* due to auto replace */
+
+          NativePtr->setLoadFactor( loadFactor );
+
+        _GF_MG_EXCEPTION_CATCH_ALL/* due to auto replace */
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetConcurrencyLevel( int32_t concurrencyLevel )
+      {
+        _GF_MG_EXCEPTION_TRY/* due to auto replace */
+
+          NativePtr->setConcurrencyLevel( concurrencyLevel );
+
+        _GF_MG_EXCEPTION_CATCH_ALL/* due to auto replace */
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetLruEntriesLimit( uint32_t entriesLimit )
+      {
+        NativePtr->setLruEntriesLimit( entriesLimit );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetDiskPolicy( DiskPolicyType diskPolicy )
+      {
+        NativePtr->setDiskPolicy(
+          static_cast<gemfire::DiskPolicyType::PolicyType>( diskPolicy ) );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCachingEnabled( bool cachingEnabled )
+      {
+        NativePtr->setCachingEnabled( cachingEnabled );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesFactory<TKey, TValue>::SetCloningEnabled( bool cloningEnabled )
+      {
+        NativePtr->setCloningEnabled( cloningEnabled );
+      }
+
+      generic<class TKey, class TValue>
+      void  AttributesFactory<TKey, TValue>::SetConcurrencyChecksEnabled( bool concurrencyChecksEnabled )
+      {
+        NativePtr->setConcurrencyChecksEnabled( concurrencyChecksEnabled );
+      }
+      // FACTORY METHOD
+
+      generic<class TKey, class TValue>
+      RegionAttributes<TKey, TValue>^ AttributesFactory<TKey, TValue>::CreateRegionAttributes( )
+      {
+        _GF_MG_EXCEPTION_TRY/* due to auto replace */
+
+          gemfire::RegionAttributesPtr& nativeptr (
+            NativePtr->createRegionAttributes( ) );
+          return RegionAttributes<TKey, TValue>::Create( nativeptr.ptr( ) );
+
+        _GF_MG_EXCEPTION_CATCH_ALL/* due to auto replace */
+      }
+
+    }
+  }
+}
+} //namespace 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.hpp b/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.hpp
new file mode 100644
index 0000000..f5cbf55
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/AttributesFactoryMN.hpp
@@ -0,0 +1,553 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+#pragma once
+
+#include "../../gf_defs.hpp"
+#include <cppcache/AttributesFactory.hpp>
+//#include "impl/NativeWrapperN.hpp"
+#include "ExpirationActionMN.hpp"
+#include "DiskPolicyTypeMN.hpp"
+#include "ScopeTypeMN.hpp"
+
+#include "ICacheLoaderN.hpp"
+#include "ICacheWriterN.hpp"
+#include "ICacheListenerN.hpp"
+#include "IPartitionResolverN.hpp"
+#include "IFixedPartitionResolverN.hpp"
+#include "IPersistenceManagerN.hpp"
+#include "RegionAttributesMN.hpp"
+
+using namespace System;
+using namespace System::Collections::Generic;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache {
+    
+    namespace Generic 
+    {
+
+      //ref class RegionAttributes;
+      //interface class ICacheLoader;
+      //interface class ICacheWriter;
+      //interface class ICacheListener;
+      //interface class IPartitionResolver;
+      //interface class IFixedPartitionResolver;
+
+
+      /// <summary>
+      /// Factory class to create instances of <see cref="RegionAttributes" />.
+      /// </summary>
+      /// <remarks>
+      /// An <see cref="AttributesFactory" />
+      /// instance maintains state for creating <see cref="RegionAttributes" /> instances.
+      /// The setter methods are used to change the settings that will be used for
+      /// creating the next attributes instance with the <see cref="CreateRegionAttributes" />
+      /// method. If you create a factory with the default constructor, then the
+      /// factory is set up to create attributes with all default settings. You can
+      /// also create a factory by providing a preset <see cref="RegionAttributes" />.
+      /// <para>
+      /// Once a <see cref="RegionAttributes" /> is created, it can only be modified
+      /// after it has been used to create a <see cref="Region" />, and then only by
+      /// using an <see cref="AttributesMutator" /> obtained from the region.
+      /// </para><para>
+      /// <h3>Attributes</h3>
+      /// <h4>Callbacks</h4>
+      /// <dl>
+      /// <dt><see cref="ICacheLoader" /> [<em>default:</em> null]</dt>
+      ///     <dd>User-implemented plug-in for loading data on cache misses.<br />
+      ///        see <see cref="SetCacheLoader" />,
+      ///            <see cref="RegionAttributes.CacheLoader" /></dd>
+      ///
+      /// <dt><see cref="ICacheWriter" /> [<em>default:</em> null]</dt>
+      ///     <dd>User-implemented plug-in for intercepting cache modifications, e.g.
+      ///         for writing to an external data source.<br />
+      ///         see <see cref="SetCacheWriter" />,
+      ///             <see cref="RegionAttributes.CacheWriter" /></dd>
+      ///
+      /// <dt><see cref="ICacheListener" /> [<em>default:</em> null]</dt>
+      ///     <dd>User-implemented plug-in for receiving and handling cache-related events.<br />
+      ///         see <see cref="SetCacheListener" />,
+      ///             <see cref="RegionAttributes.CacheListener" /></dd>
+      ///
+      /// <dt><see cref="IPartitionResolver" /> [<em>default:</em> null]</dt>
+      ///     <dd>User-implemented plug-in for custom partitioning.<br />
+      ///         see <see cref="SetPartitionResolver" />,
+      ///             <see cref="RegionAttributes.PartitionResolver" /></dd>
+      /// </dl>
+      /// <h4>Expiration</h4>
+      /// <dl>
+      /// <dt>RegionTimeToLive [<em>default:</em> no expiration]</dt>
+      ///     <dd>Expiration configuration for the entire region based on the
+      ///     lastModifiedTime ( <see cref="CacheStatistics.LastModifiedTime" /> ).<br />
+      ///         see <see cref="SetRegionTimeToLive" />,
+      ///             <see cref="RegionAttributes.RegionTimeToLive" />,
+      ///             <see cref="AttributesMutator.SetRegionTimeToLive" /></dd>
+      ///
+      /// <dt>RegionIdleTimeout [<em>default:</em> no expiration]</dt>
+      ///     <dd>Expiration configuration for the entire region based on the
+      ///         lastAccessedTime ( <see cref="CacheStatistics.LastAccessedTime" /> ).<br />
+      ///         see <see cref="SetRegionIdleTimeout" />,
+      ///             <see cref="RegionAttributes.RegionIdleTimeout" />,
+      ///             <see cref="AttributesMutator.SetRegionIdleTimeout" /></dd>
+      ///
+      /// <dt>EntryTimeToLive [<em>default:</em> no expiration]</dt>
+      ///     <dd>Expiration configuration for individual entries based on the
+      ///     lastModifiedTime ( <see cref="CacheStatistics.LastModifiedTime" /> ).<br />
+      ///         see <see cref="SetEntryTimeToLive" />,
+      ///             <see cref="RegionAttributes.EntryTimeToLive" />,
+      ///             <see cref="AttributesMutator.SetEntryTimeToLive" /></dd>
+      ///
+      /// <dt>EntryIdleTimeout [<em>default:</em> no expiration]</dt>
+      ///     <dd>Expiration configuration for individual entries based on the
+      ///         lastAccessedTime ( <see cref="CacheStatistics.LastAccessedTime" /> ).<br />
+      ///         see <see cref="SetEntryIdleTimeout" />,
+      ///             <see cref="RegionAttributes.EntryIdleTimeout" />,
+      ///             <see cref="AttributesMutator.SetEntryIdleTimeout" /></dd>
+      /// </dl>
+      /// <h4>Distribution</h4>
+      /// <dl>
+      /// <dt><see cref="ScopeType" /> [<em>default:</em> <tt>ScopeType.DistributedNoAck</tt>]</dt>
+      ///     <dd>The C++ cache can contain either local regions or distributed regions. 
+      ///         Distributed regions are configured with servers that they distribute 
+      ///         their operations to upto. Locally scoped regions do not have any 
+      ///         distribution behavior. GFE native client regions scoped as 
+      ///         ScopeType.DistributedNoAck and ScopeType.DistributedAck have identical
+      ///         distribution behavior.<br />
+      ///         see <see cref="SetScope" />,
+      ///             <see cref="RegionAttributes.Scope" /></dd>
+      /// </dl>
+      /// <h4>Storage</h4>
+      /// <dl>
+      /// <dt>InitialCapacity [<em>default:</em> <tt>16</tt>]</dt>
+      ///     <dd>The initial capacity of the map used for storing the entries.<br />
+      ///         see <see cref="SetInitialCapacity" />,
+      ///             <see cref="RegionAttributes.InitialCapacity" /></dd>
+      ///
+      /// <dt>LoadFactor [<em>default:</em> <tt>0.75</tt>]</dt>
+      ///     <dd>The load factor of the map used for storing the entries.<br />
+      ///         see <see cref="SetLoadFactor" />,
+      ///             <see cref="RegionAttributes.LoadFactor" /></dd>
+      ///
+      /// <dt>ConcurrencyLevel [<em>default:</em> <tt>16</tt>]</dt>
+      ///     <dd>The allowed concurrency among updates to values in the region
+      ///         is guided by the <tt>concurrencyLevel</tt>, which is used as a hint
+      ///         for internal sizing. The actual concurrency will vary.
+      ///         Ideally, you should choose a value to accommodate as many
+      ///         threads as will ever concurrently modify values in the region. Using a
+      ///         significantly higher value than you need can waste space and time,
+      ///         and a significantly lower value can lead to thread contention. But
+      ///         overestimates and underestimates within an order of magnitude do
+      ///         not usually have much noticeable impact. A value of one is
+      ///         appropriate when it is known that only one thread will modify
+      ///         and all others will only read.<br />
+      ///         see <see cref="SetConcurrencyLevel" />,
+      ///             <see cref="RegionAttributes.ConcurrencyLevel" /></dd>
+      ///
+      /// </dl>
+      /// </para>
+      /// </remarks>
+      /// <seealso cref="RegionAttributes" />
+      /// <seealso cref="AttributesMutator" />
+      /// <seealso cref="Region.CreateSubRegion" />
+      generic<class TKey, class TValue>
+      public ref class AttributesFactory sealed
+        : public Internal::UMWrap<gemfire::AttributesFactory>
+      {
+      public:
+
+        /// <summary>
+        /// Creates a new <c>AttributesFactory</c> ready to create
+        /// a <c>RegionAttributes</c> with default settings.
+        /// </summary>
+        inline AttributesFactory<TKey, TValue>( )
+          : UMWrap( new gemfire::AttributesFactory( ), true ) { }
+
+        /// <summary>
+        /// Creates a new instance of <c>AttributesFactory</c> ready to create
+        /// a <c>RegionAttributes</c> with the same settings as those in the
+        /// specified <c>RegionAttributes</c>.
+        /// </summary>
+        /// <param name="regionAttributes">
+        /// attributes used to initialize this AttributesFactory
+        /// </param>
+        AttributesFactory<TKey, TValue>(RegionAttributes<TKey, TValue>^ regionAttributes);
+
+        // CALLBACKS
+
+        /// <summary>
+        /// Sets the cache loader for the <c>RegionAttributes</c> being created.
+        /// </summary>
+        /// <param name="cacheLoader">
+        /// a user-defined cache loader, or null for no cache loader
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetCacheLoader( ICacheLoader<TKey, TValue>^ cacheLoader );
+
+        /// <summary>
+        /// Sets the cache writer for the <c>RegionAttributes</c> being created.
+        /// </summary>
+        /// <param name="cacheWriter">
+        /// user-defined cache writer, or null for no cache writer
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetCacheWriter( ICacheWriter<TKey, TValue>^ cacheWriter );
+
+        /// <summary>
+        /// Sets the CacheListener for the <c>RegionAttributes</c> being created.
+        /// </summary>
+        /// <param name="cacheListener">
+        /// user-defined cache listener, or null for no cache listener
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetCacheListener( ICacheListener<TKey, TValue>^ cacheListener );
+
+        /// <summary>
+        /// Sets the PartitionResolver for the <c>RegionAttributes</c> being created.
+        /// </summary>
+        /// <param name="partitionresolver">
+        /// user-defined partition resolver, or null for no partition resolver
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetPartitionResolver( IPartitionResolver<TKey, TValue>^ partitionresolver );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the loader of the region.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>CacheLoader</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>ICacheLoader</c> for a managed library.
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetCacheLoader( String^ libPath, String^ factoryFunctionName );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the writer of the region.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>CacheWriter</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>ICacheWriter</c> for a managed library.
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetCacheWriter( String^ libPath, String^ factoryFunctionName );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the listener of the region.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>CacheListener</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>ICacheListener</c> for a managed library.
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetCacheListener( String^ libPath, String^ factoryFunctionName );
+
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the partition resolver of the region.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>PartitionResolver</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>IPartitionResolver</c> for a managed library.
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetPartitionResolver( String^ libPath, String^ factoryFunctionName );
+
+
+        // EXPIRATION ATTRIBUTES
+
+        /// <summary>
+        /// Sets the idleTimeout expiration attributes for region entries for the next
+        /// <c>RegionAttributes</c> created.
+        /// </summary>
+        /// <param name="action">
+        /// The expiration action for which to set the timeout.
+        /// </param>
+        /// <param name="idleTimeout">
+        /// the idleTimeout in seconds for entries in this region.
+        /// </param>
+        void SetEntryIdleTimeout( ExpirationAction action, uint32_t idleTimeout );
+
+        /// <summary>
+        /// Sets the timeToLive expiration attributes for region entries for the next
+        /// <c>RegionAttributes</c> created.
+        /// </summary>
+        /// <param name="action">
+        /// The expiration action for which to set the timeout.
+        /// </param>
+        /// <param name="timeToLive">
+        /// the timeToLive in seconds for entries in this region.
+        /// </param>
+        void SetEntryTimeToLive( ExpirationAction action, uint32_t timeToLive );
+
+        /// <summary>
+        /// Sets the idleTimeout expiration attributes for the region itself for the
+        /// next <c>RegionAttributes</c> created.
+        /// </summary>
+        /// <param name="action">
+        /// The expiration action for which to set the timeout.
+        /// </param>
+        /// <param name="idleTimeout">
+        /// the idleTimeout in seconds for the region as a whole.
+        /// </param>
+        void SetRegionIdleTimeout( ExpirationAction action, uint32_t idleTimeout );
+
+        /// <summary>
+        /// Sets the timeToLive expiration attributes for the region itself for the
+        /// next <c>RegionAttributes</c> created.
+        /// </summary>
+        /// <param name="action">
+        /// The expiration action for which to set the timeout.
+        /// </param>
+        /// <param name="timeToLive">
+        /// the timeToLive in seconds for the region as a whole.
+        /// </param>
+        void SetRegionTimeToLive( ExpirationAction action, uint32_t timeToLive );
+
+
+        // PERSISTENCE
+
+        /// <summary>
+        /// Sets the PersistenceManager object that will be invoked for the persistence of the region.
+        /// </summary>
+        /// <param name="persistenceManager">
+        /// Persistence Manager object
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetPersistenceManager(IPersistenceManager<TKey, TValue>^ persistenceManager);
+
+        /// <summary>
+        /// Sets the PersistenceManager object that will be invoked for the persistence of the region.
+        /// </summary>
+        /// <param name="persistenceManager">
+        /// Persistence Manager object
+        /// </param>
+        /// <param name="config">
+        /// The configuration properties to use for the PersistenceManager.
+        /// </param>
+        //generic<class TKey, class TValue>
+        void SetPersistenceManager(IPersistenceManager<TKey, TValue>^ persistenceManager, Properties<String^, String^>^ config);
+        
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the persistence of the region.
+        /// If the region is being created from a client on a server, or on a server directly, then
+        /// This must be used to set the PersistenceManager.
+        /// </summary>
+        /// <param name="libPath">The path of the PersistenceManager shared library.</param>
+        /// <param name="factoryFunctionName">
+        /// The name of the factory function to create an instance of PersistenceManager object.
+        /// </param>
+        void SetPersistenceManager( String^ libPath, String^ factoryFunctionName );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the persistence of the region.
+        /// If the region is being created from a client on a server, or on a server directly, then
+        /// This must be used to set the PersistenceManager.
+        /// </summary>
+        /// <param name="libPath">The path of the PersistenceManager shared library.</param>
+        /// <param name="factoryFunctionName">
+        /// The name of the factory function to create an instance of PersistenceManager object.
+        /// </param>
+        /// <param name="config">
+        /// The configuration properties to use for the PersistenceManager.
+        /// </param>
+        void SetPersistenceManager( String^ libPath, String^ factoryFunctionName,
+          /*Dictionary<Object^, Object^>*/Properties<String^, String^>^ config );
+
+
+        // DISTRIBUTION ATTRIBUTES
+
+        /// <summary>
+        /// Sets the scope for the next <c>RegionAttributes</c> created.
+        /// </summary>
+        /// <param name="scopeType">
+        /// the type of scope to use for the region
+        /// </param>
+        [Obsolete("This method is obsolete since 3.5")]
+        void SetScope( ScopeType scopeType );
+
+
+        // STORAGE ATTRIBUTES
+
+        /// <summary>
+        /// Enables/disables client noficiations for a Thin client region.
+        /// </summary>
+        /// <param name="clientNotificationEnabled">
+        /// true if client notifications have to be enabled; false otherwise
+        /// </param>        
+        [Obsolete("This method is obsolete since 3.5; use PoolFactory.SetSubscriptionEnabled instead.")]
+        void SetClientNotificationEnabled(
+          bool clientNotificationEnabled );
+
+        /// <summary>
+        /// Set the endpoints for a Thin Client region.
+        /// </summary>
+        /// <remarks>
+        /// If the endpoints are set then the region is taken to be a Thin-client
+        /// region that interacts with the GemFire Java cacheserver.
+        /// </remarks>
+        /// <param name="endpoints">
+        /// The list of host:port pairs separated by commas.
+        /// </param>
+        [Obsolete("This method is obsolete since 3.5; use PoolFactory.AddServer or PoolFactory.AddLocator instead.")]
+        void SetEndpoints( String^ endpoints );
+
+        /// <summary>
+        /// Set the pool name for a Thin Client region.
+        /// </summary>
+        /// <remarks>
+        /// The pool with the name specified must be already created.
+        /// </remarks>
+        /// <param name="poolName">
+        /// The name of the pool to attach to this region.
+        /// </param>
+        void SetPoolName( String^ poolName );
+
+        // MAP ATTRIBUTES
+
+        /// <summary>
+        /// Sets the entry initial capacity for the <c>RegionAttributes</c>
+        /// being created. This value is used in initializing the map that
+        /// holds the entries.
+        /// </summary>
+        /// <param name="initialCapacity">the initial capacity of the entry map</param>
+        /// <exception cref="IllegalArgumentException">
+        /// if initialCapacity is nonpositive
+        /// </exception>
+        void SetInitialCapacity( int32_t initialCapacity );
+
+        /// <summary>
+        /// Sets the entry load factor for the next <c>RegionAttributes</c>
+        /// created. This value is
+        /// used in initializing the map that holds the entries.
+        /// </summary>
+        /// <param name="loadFactor">the load factor of the entry map</param>
+        /// <exception cref="IllegalArgumentException">
+        /// if loadFactor is nonpositive
+        /// </exception>
+        void SetLoadFactor( Single loadFactor );
+
+        /// <summary>
+        /// Sets the concurrency level of the next <c>RegionAttributes</c>
+        /// created. This value is used in initializing the map that holds the entries.
+        /// </summary>
+        /// <param name="concurrencyLevel">
+        /// the concurrency level of the entry map
+        /// </param>
+        /// <exception cref="IllegalArgumentException">
+        /// if concurrencyLevel is nonpositive
+        /// </exception>
+        void SetConcurrencyLevel( int32_t concurrencyLevel );
+
+        /// <summary>
+        /// Sets a limit on the number of entries that will be held in the cache.
+        /// If a new entry is added while at the limit, the cache will evict the
+        /// least recently used entry.
+        /// </summary>
+        /// <param name="entriesLimit">
+        /// The limit of the number of entries before eviction starts.
+        /// Defaults to 0, meaning no LRU actions will used.
+        /// </param>
+        void SetLruEntriesLimit( uint32_t entriesLimit );
+
+        /// <summary>
+        /// Sets the disk policy type for the next <c>RegionAttributes</c> created.
+        /// </summary>
+        /// <param name="diskPolicy">
+        /// the disk policy to use for the region
+        /// </param>
+        void SetDiskPolicy( DiskPolicyType diskPolicy );
+
+        /// <summary>
+        /// Set caching enabled flag for this region.
+        /// </summary>
+        /// <remarks>
+        /// <para>
+        /// If set to false, then no data is stored in the local process,
+        /// but events and distributions will still occur, and the region
+        /// can still be used to put and remove, etc...
+        /// </para><para>
+        /// The default if not set is 'true', 'false' is illegal for regions
+        /// of <c>ScopeType.Local</c> scope. 
+        /// </para>
+        /// </remarks>
+        /// <param name="cachingEnabled">
+        /// if true, cache data for this region in this process.
+        /// </param>
+        void SetCachingEnabled( bool cachingEnabled );
+        /// <summary>
+        /// Set cloning enabled flag for this region.
+        /// </summary>
+        /// <remarks>
+        /// <para>
+        /// If set to false, then there is no cloning will take place in case of delta.
+        /// Delta will be applied on the old value which will change old value in-place.
+        /// </para><para>
+        /// The default if not set is 'false'
+        /// of <c>ScopeType.Local</c> scope. 
+        /// </para>
+        /// </remarks>
+        /// <param name="cloningEnabled">
+        /// if true, clone old value before applying delta so that in-place change would not occour..
+        /// </param>
+        void SetCloningEnabled( bool cloningEnabled );
+
+        /// <summary>
+        /// Sets concurrency checks enabled flag for this region.
+        /// </summary>
+        /// <remarks>
+        /// <para>
+        /// If set to false, then the version checks will not occur.
+        /// </para><para>
+        /// The default if not set is 'true'
+        /// </para>
+        /// </remarks>
+        /// <param name="concurrencyChecksEnabled">
+        /// if true, version checks for region entries will occur.
+        /// </param>
+        void SetConcurrencyChecksEnabled( bool concurrencyChecksEnabled );
+        // FACTORY METHOD
+
+        /// <summary>
+        /// Creates a <c>RegionAttributes</c> with the current settings.
+        /// </summary>
+        /// <returns>the newly created <c>RegionAttributes</c></returns>
+        /// <exception cref="IllegalStateException">
+        /// if the current settings violate the <a href="compability.html">
+        /// compatibility</a> rules.
+        /// </exception>
+        RegionAttributes<TKey, TValue>^ CreateRegionAttributes( );
+      };
+
+    }
+  }
+}
+ } //namespace 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.cpp b/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.cpp
new file mode 100644
index 0000000..ee9ef4d
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.cpp
@@ -0,0 +1,175 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+//#include "gf_includesN.hpp"
+#include "AttributesMutatorMN.hpp"
+//#include "RegionMN.hpp"
+#include "impl/ManagedCacheListenerN.hpp"
+#include "impl/ManagedCacheLoaderN.hpp"
+#include "impl/ManagedCacheWriterN.hpp"
+#include "impl/CacheLoaderMN.hpp"
+#include "impl/CacheWriterMN.hpp"
+#include "impl/CacheListenerMN.hpp"
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+
+      generic<class TKey, class TValue>
+      int32_t AttributesMutator<TKey, TValue>::SetEntryIdleTimeout( int32_t idleTimeout )
+      {
+        return NativePtr->setEntryIdleTimeout( idleTimeout );
+      }
+
+      generic<class TKey, class TValue>
+      ExpirationAction AttributesMutator<TKey, TValue>::SetEntryIdleTimeoutAction(
+        ExpirationAction action )
+      {
+        return static_cast<ExpirationAction>(
+          NativePtr->setEntryIdleTimeoutAction(
+          static_cast<gemfire::ExpirationAction::Action>( action ) ) );
+      }
+
+      generic<class TKey, class TValue>
+      int32_t AttributesMutator<TKey, TValue>::SetEntryTimeToLive( int32_t timeToLive )
+      {
+        return NativePtr->setEntryTimeToLive( timeToLive );
+      }
+
+      generic<class TKey, class TValue>
+      ExpirationAction AttributesMutator<TKey, TValue>::SetEntryTimeToLiveAction(
+        ExpirationAction action )
+      {
+        return static_cast<ExpirationAction>(
+          NativePtr->setEntryTimeToLiveAction(
+          static_cast<gemfire::ExpirationAction::Action>( action ) ) );
+      }
+
+      generic<class TKey, class TValue>
+      int32_t AttributesMutator<TKey, TValue>::SetRegionIdleTimeout( int32_t idleTimeout )
+      {
+        return NativePtr->setRegionIdleTimeout( idleTimeout );
+      }
+
+      generic<class TKey, class TValue>
+      ExpirationAction AttributesMutator<TKey, TValue>::SetRegionIdleTimeoutAction(
+        ExpirationAction action )
+      {
+        return static_cast<ExpirationAction>(
+          NativePtr->setRegionIdleTimeoutAction(
+          static_cast<gemfire::ExpirationAction::Action>( action ) ) );
+      }
+
+      generic<class TKey, class TValue>
+      int32_t AttributesMutator<TKey, TValue>::SetRegionTimeToLive( int32_t timeToLive )
+      {
+        return NativePtr->setRegionTimeToLive( timeToLive );
+      }
+
+      generic<class TKey, class TValue>
+      ExpirationAction AttributesMutator<TKey, TValue>::SetRegionTimeToLiveAction(
+        ExpirationAction action )
+      {
+        return static_cast<ExpirationAction>(
+          NativePtr->setRegionTimeToLiveAction(
+          static_cast<gemfire::ExpirationAction::Action>( action ) ) );
+      }
+
+      generic<class TKey, class TValue>
+      uint32_t AttributesMutator<TKey, TValue>::SetLruEntriesLimit( uint32_t entriesLimit )
+      {
+        return NativePtr->setLruEntriesLimit( entriesLimit );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesMutator<TKey, TValue>::SetCacheListener( ICacheListener<TKey, TValue>^ cacheListener )
+      {
+        gemfire::CacheListenerPtr listenerptr;
+        if (cacheListener != nullptr)
+        {
+          CacheListenerGeneric<TKey, TValue>^ clg = gcnew CacheListenerGeneric<TKey, TValue>();
+          clg->SetCacheListener(cacheListener);
+          listenerptr = new gemfire::ManagedCacheListenerGeneric( /*clg,*/ cacheListener );
+          ((gemfire::ManagedCacheListenerGeneric*)listenerptr.ptr())->setptr(clg);
+        }
+        NativePtr->setCacheListener( listenerptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesMutator<TKey, TValue>::SetCacheListener( String^ libPath,
+        String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setCacheListener( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesMutator<TKey, TValue>::SetCacheLoader( ICacheLoader<TKey, TValue>^ cacheLoader )
+      {
+        gemfire::CacheLoaderPtr loaderptr;
+        if (cacheLoader != nullptr)
+        {
+          CacheLoaderGeneric<TKey, TValue>^ clg = gcnew CacheLoaderGeneric<TKey, TValue>();
+          clg->SetCacheLoader(cacheLoader);
+          loaderptr = new gemfire::ManagedCacheLoaderGeneric( /*clg,*/ cacheLoader );
+          ((gemfire::ManagedCacheLoaderGeneric*)loaderptr.ptr())->setptr(clg);
+        }
+        NativePtr->setCacheLoader( loaderptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesMutator<TKey, TValue>::SetCacheLoader( String^ libPath,
+        String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setCacheLoader( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesMutator<TKey, TValue>::SetCacheWriter( ICacheWriter<TKey, TValue>^ cacheWriter )
+      {
+        gemfire::CacheWriterPtr writerptr;
+        if (cacheWriter != nullptr)
+        {
+          CacheWriterGeneric<TKey, TValue>^ cwg = gcnew CacheWriterGeneric<TKey, TValue>();
+          cwg->SetCacheWriter(cacheWriter);
+          writerptr = new gemfire::ManagedCacheWriterGeneric( /*cwg,*/ cacheWriter );
+          ((gemfire::ManagedCacheWriterGeneric*)writerptr.ptr())->setptr(cwg);
+        }
+        NativePtr->setCacheWriter( writerptr );
+      }
+
+      generic<class TKey, class TValue>
+      void AttributesMutator<TKey, TValue>::SetCacheWriter( String^ libPath,
+        String^ factoryFunctionName )
+      {
+        throw gcnew System::NotSupportedException;
+        ManagedString mg_libpath( libPath );
+        ManagedString mg_factoryFunctionName( factoryFunctionName );
+
+        NativePtr->setCacheWriter( mg_libpath.CharPtr,
+          mg_factoryFunctionName.CharPtr );
+      }
+
+    }
+  }
+}
+ } //namespace 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.hpp b/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.hpp
new file mode 100644
index 0000000..e535a7a
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/AttributesMutatorMN.hpp
@@ -0,0 +1,256 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+#pragma once
+
+#include "../../gf_defs.hpp"
+#include <cppcache/AttributesMutator.hpp>
+//#include "impl/NativeWrapperN.hpp"
+#include "ExpirationActionMN.hpp"
+#include "ICacheListenerN.hpp"
+#include "ICacheLoaderN.hpp"
+#include "ICacheWriterN.hpp"
+
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+
+      /// <summary>
+      /// Supports modification of certain region attributes after the region
+      /// has been created.
+      /// </summary>
+      /// <remarks>
+      /// <para>
+      /// It is required that the attributes be completely initialized using an
+      /// <see cref="AttributesFactory" /> before creating the region.
+      /// AttributesMutator can be applied to adjusting and tuning a subset of
+      /// attributes that are modifiable at runtime.
+      /// </para><para>
+      /// The setter methods all return the previous value of the attribute.
+      /// </para>
+      /// </remarks>
+      /// <seealso cref="Region.AttributesMutator" />
+      /// <seealso cref="RegionAttributes" />
+      /// <seealso cref="AttributesFactory" />
+      generic<class TKey, class TValue>
+      public ref class AttributesMutator sealed
+        : public Internal::SBWrap<gemfire::AttributesMutator>
+      {
+      public:
+
+        /// <summary>
+        /// Sets the idleTimeout duration for region entries.
+        /// </summary>
+        /// <param name="idleTimeout">
+        /// the idleTimeout in seconds for entries in this region, or 0 for no idle timeout
+        /// </param>
+        /// <returns>the previous value</returns>
+        /// <exception cref="IllegalStateException">
+        /// if the new idleTimeout changes entry expiration from
+        /// disabled to enabled or enabled to disabled.
+        /// </exception>
+        int32_t SetEntryIdleTimeout( int32_t idleTimeout );
+
+        /// <summary>
+        /// Sets the idleTimeout action for region entries.
+        /// </summary>
+        /// <param name="action">
+        /// the idleTimeout action for entries in this region
+        /// </param>
+        /// <returns>the previous action</returns>
+        ExpirationAction SetEntryIdleTimeoutAction( ExpirationAction action );
+
+        /// <summary>
+        /// Sets the timeToLive duration for region entries.
+        /// </summary>
+        /// <param name="timeToLive">
+        /// the timeToLive in seconds for entries in this region, or 0 to disable time-to-live
+        /// </param>
+        /// <returns>the previous value</returns>
+        /// <exception cref="IllegalStateException">
+        /// if the new timeToLive changes entry expiration from
+        /// disabled to enabled or enabled to disabled
+        /// </exception>
+        int32_t SetEntryTimeToLive( int32_t timeToLive );
+
+        /// <summary>
+        /// Set the timeToLive action for region entries.
+        /// </summary>
+        /// <param name="action">
+        /// the timeToLive action for entries in this region
+        /// </param>
+        /// <returns>the previous action</returns>
+        ExpirationAction SetEntryTimeToLiveAction( ExpirationAction action );
+
+        /// <summary>
+        /// Sets the idleTimeout duration for the region itself.
+        /// </summary>
+        /// <param name="idleTimeout">
+        /// the idleTimeout for this region, in seconds, or 0 to disable idle timeout
+        /// </param>
+        /// <returns>the previous value</returns>
+        /// <exception cref="IllegalStateException">
+        /// if the new idleTimeout changes region expiration from
+        /// disabled to enabled or enabled to disabled.
+        /// </exception>
+        int32_t SetRegionIdleTimeout( int32_t idleTimeout );
+
+        /// <summary>
+        /// Sets the idleTimeout action for the region itself.
+        /// </summary>
+        /// <param name="action">
+        /// the idleTimeout action for this region
+        /// </param>
+        /// <returns>the previous action</returns>
+        ExpirationAction SetRegionIdleTimeoutAction( ExpirationAction action );
+
+        /// <summary>
+        /// Sets the timeToLive duration for the region itself.
+        /// </summary>
+        /// <param name="timeToLive">
+        /// the timeToLive for this region, in seconds, or 0 to disable time-to-live
+        /// </param>
+        /// <returns>the previous value</returns>
+        /// <exception cref="IllegalStateException">
+        /// if the new timeToLive changes region expiration from
+        /// disabled to enabled or enabled to disabled.
+        /// </exception>
+        int32_t SetRegionTimeToLive( int32_t timeToLive );
+
+        /// <summary>
+        /// Sets the timeToLive action for the region itself.
+        /// </summary>
+        /// <param name="action">
+        /// the timeToLiv eaction for this region
+        /// </param>
+        /// <returns>the previous action</returns>
+        ExpirationAction SetRegionTimeToLiveAction( ExpirationAction action );
+
+        /// <summary>
+        /// Sets the maximum entry count in the region before LRU eviction.
+        /// </summary>
+        /// <param name="entriesLimit">the number of entries to allow, or 0 to disable LRU</param>
+        /// <returns>the previous value</returns>
+        /// <exception cref="IllegalStateException">
+        /// if the new entriesLimit changes LRU from
+        /// disabled to enabled or enabled to disabled.
+        /// </exception>
+        uint32_t SetLruEntriesLimit( uint32_t entriesLimit );
+
+        /// <summary>
+        /// Sets the CacheListener for the region.
+        /// The previous cache listener (if any) will be replaced with the given <c>cacheListener</c>.
+        /// </summary>
+        /// <param name="cacheListener">
+        /// user-defined cache listener, or null for no cache listener
+        /// </param>
+        void SetCacheListener( ICacheListener<TKey, TValue>^ cacheListener );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the listener of the region.
+        /// The previous cache listener will be replaced with a listener created
+        /// using the factory function provided in the given library.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>CacheListener</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>ICacheListener</c> for a managed library.
+        /// </param>
+        void SetCacheListener( String^ libPath, String^ factoryFunctionName );
+
+        /// <summary>
+        /// Sets the CacheLoader for the region.
+        /// The previous cache loader (if any) will be replaced with the given <c>cacheLoader</c>.
+        /// </summary>
+        /// <param name="cacheLoader">
+        /// user-defined cache loader, or null for no cache loader
+        /// </param>
+        void SetCacheLoader( ICacheLoader<TKey, TValue>^ cacheLoader );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the loader of the region.
+        /// The previous cache loader will be replaced with a loader created
+        /// using the factory function provided in the given library.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>CacheLoader</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>ICacheLoader</c> for a managed library.
+        /// </param>
+        void SetCacheLoader( String^ libPath, String^ factoryFunctionName );
+
+        /// <summary>
+        /// Sets the CacheListener for the region.
+        /// The previous cache writer (if any) will be replaced with the given <c>cacheWriter</c>.
+        /// </summary>
+        /// <param name="cacheWriter">
+        /// user-defined cache writer, or null for no cache writer
+        /// </param>
+        void SetCacheWriter( ICacheWriter<TKey, TValue>^ cacheWriter );
+
+        /// <summary>
+        /// Sets the library path for the library that will be invoked for the writer of the region.
+        /// The previous cache writer will be replaced with a writer created
+        /// using the factory function provided in the given library.
+        /// </summary>
+        /// <param name="libPath">
+        /// library pathname containing the factory function.
+        /// </param>
+        /// <param name="factoryFunctionName">
+        /// Name of factory function that creates a <c>CacheWriter</c>
+        /// for a native library, or the name of the method in the form
+        /// {Namespace}.{Class Name}.{Method Name} that creates an
+        /// <c>ICacheWriter</c> for a managed library.
+        /// </param>
+        void SetCacheWriter( String^ libPath, String^ factoryFunctionName );
+
+
+      internal:
+        /// <summary>
+        /// Internal factory function to wrap a native object pointer inside
+        /// this managed class with null pointer check.
+        /// </summary>
+        /// <param name="nativeptr">The native object pointer</param>
+        /// <returns>
+        /// The managed wrapper object; null if the native pointer is null.
+        /// </returns>
+        inline static AttributesMutator<TKey, TValue>^ Create( gemfire::AttributesMutator* nativeptr )
+        {
+          return ( nativeptr != nullptr ?
+            gcnew AttributesMutator<TKey, TValue>( nativeptr ) : nullptr );
+        }
+
+
+      private:
+
+        /// <summary>
+        /// Private constructor to wrap a native object pointer
+        /// </summary>
+        /// <param name="nativeptr">The native object pointer</param>
+        inline AttributesMutator<TKey, TValue>( gemfire::AttributesMutator* nativeptr )
+          : SBWrap( nativeptr ) { }
+      };
+
+    }
+  }
+}
+ } //namespace 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.cpp b/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.cpp
new file mode 100644
index 0000000..ae6f59c
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.cpp
@@ -0,0 +1,53 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+
+
+//#include "gf_includesN.hpp"
+#include "CacheAttributesFactoryMN.hpp"
+#include "CacheAttributesMN.hpp"
+#include "../../ExceptionTypesM.hpp"
+
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+
+      void CacheAttributesFactory::SetRedundancyLevel( int32_t redundancyLevel )
+      {
+        NativePtr->setRedundancyLevel( redundancyLevel );
+      }
+
+      void CacheAttributesFactory::SetEndpoints( String^ endpoints )
+      {
+        ManagedString mg_endpoints( endpoints );
+        NativePtr->setEndpoints( mg_endpoints.CharPtr );
+      }
+
+      CacheAttributes^ CacheAttributesFactory::CreateCacheAttributes( )
+      {
+        _GF_MG_EXCEPTION_TRY/* due to auto replace */
+
+          gemfire::CacheAttributesPtr& nativeptr =
+            NativePtr->createCacheAttributes();
+
+          return CacheAttributes::Create(nativeptr.ptr());
+
+        _GF_MG_EXCEPTION_CATCH_ALL/* due to auto replace */
+      }
+
+    }
+  }
+}
+ } //namespace 
+

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.hpp b/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.hpp
new file mode 100644
index 0000000..35c3fb2
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/CacheAttributesFactoryMN.hpp
@@ -0,0 +1,76 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+
+
+#pragma once
+
+#include "../../gf_defs.hpp"
+#include <cppcache/CacheAttributesFactory.hpp>
+#include "impl/NativeWrapperN.hpp"
+
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+
+      ref class CacheAttributes;
+
+      /// <summary>
+      /// Creates instances of <c>CacheAttributes</c>.
+      /// </summary>
+      /// <seealso cref="CacheAttributes" />
+      public ref class CacheAttributesFactory sealed
+        : public Internal::UMWrap<gemfire::CacheAttributesFactory>
+      {
+      public:
+
+        /// <summary>
+        /// Creates a new instance of <c>CacheAttributesFactory</c> ready
+        /// to create a <c>CacheAttributes</c> with default settings.
+        /// </summary>
+        inline CacheAttributesFactory( )
+          : UMWrap( new gemfire::CacheAttributesFactory( ), true )
+        { }
+
+        // ATTRIBUTES
+
+        /// <summary>
+        /// Sets redundancy level to use for regions in the cache.
+        /// </summary>
+        [Obsolete("This method is obsolete since 3.5; use PoolFactory.SetSubscriptionRedundancy instead.")]
+        void SetRedundancyLevel( int32_t redundancyLevel );
+
+        /// <summary>
+        /// Sets endpoints list to be used at the cache-level.
+        /// </summary>
+        [Obsolete("This method is obsolete since 3.5; use PoolFactory.AddServer or PoolFactory.AddLocator instead.")]
+        void SetEndpoints( String^ endpoints );
+
+        // FACTORY METHOD
+
+        /// <summary>
+        /// Creates a <c>CacheAttributes</c> with the current settings.
+        /// </summary>
+        /// <returns>The newly created <c>CacheAttributes</c></returns>
+        /// <exception cref="IllegalStateException">
+        /// if the current settings violate the <a href="compability.html">
+        /// compatibility</a> rules.
+        /// </exception>
+        CacheAttributes^ CreateCacheAttributes( );
+      };
+
+    }
+  }
+}
+ } //namespace 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.cpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.cpp b/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.cpp
new file mode 100644
index 0000000..402b527
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.cpp
@@ -0,0 +1,38 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+
+
+//#include "gf_includesN.hpp"
+#include "CacheAttributesMN.hpp"
+#include "impl/ManagedStringN.hpp"
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+
+      int32_t CacheAttributes::RedundancyLevel::get( )
+      {
+        return NativePtr->getRedundancyLevel( );
+      }
+
+      String^ CacheAttributes::Endpoints::get( )
+      {
+        return ManagedString::Get( NativePtr->getEndpoints( ) );
+      }
+
+    }
+  }
+}
+ } //namespace 
+

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ac967000/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.hpp
----------------------------------------------------------------------
diff --git a/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.hpp b/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.hpp
new file mode 100644
index 0000000..b399f89
--- /dev/null
+++ b/geode-client-native/src/clicache/com/vmware/CacheAttributesMN.hpp
@@ -0,0 +1,98 @@
+/*=========================================================================
+ * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
+ * This product is protected by U.S. and international copyright
+ * and intellectual property laws. Pivotal products are covered by
+ * more patents listed at http://www.pivotal.io/patents.
+ *=========================================================================
+ */
+
+
+
+#pragma once
+
+#include "../../gf_defs.hpp"
+#include <cppcache/CacheAttributes.hpp>
+#include "impl/NativeWrapperN.hpp"
+
+
+using namespace System;
+
+namespace GemStone
+{
+  namespace GemFire
+  {
+    namespace Cache { namespace Generic
+    {
+
+      /// <summary>
+      /// Defines attributes for configuring a cache.
+      /// </summary>
+      /// <remarks>
+      /// Currently the following attributes are defined:
+      /// <c>redundancyLevel</c>: Redundancy for HA client queues.
+      /// <c>endpoints</c>: Cache level endpoints list.
+      /// To create an instance of this interface, use
+      /// <see cref="CacheAttributesFactory.CreateCacheAttributes" />.
+      ///
+      /// For compatibility rules and default values, see
+      /// <see cref="CacheAttributesFactory" />.
+      ///
+      /// Note that the <c>CacheAttributes</c> are not distributed with
+      /// the region.
+      /// </remarks>
+      /// <seealso cref="CacheAttributesFactory" />
+      public ref class CacheAttributes sealed
+        : public Internal::SBWrap<gemfire::CacheAttributes>
+      {
+      public:
+
+        /// <summary>
+        /// Gets redundancy level for regions in the cache.
+        /// </summary>
+        property int32_t RedundancyLevel
+        {
+          int32_t get( );
+        }
+
+        /// <summary>
+        /// Gets cache level endpoints list.
+        /// </summary>
+        property String^ Endpoints
+        {
+          String^ get( );
+        }
+
+
+      internal:
+
+        /// <summary>
+        /// Internal factory function to wrap a native object pointer inside
+        /// this managed class with null pointer check.
+        /// </summary>
+        /// <param name="nativeptr">The native object pointer</param>
+        /// <returns>
+        /// The managed wrapper object; null if the native pointer is null.
+        /// </returns>
+        inline static CacheAttributes^ Create(
+          gemfire::CacheAttributes* nativeptr )
+        {
+          return ( nativeptr != nullptr ?
+            gcnew CacheAttributes( nativeptr ) : nullptr );
+        }
+
+
+      private:
+
+        /// <summary>
+        /// Private constructor to wrap a native object pointer
+        /// </summary>
+        /// <param name="nativeptr">The native object pointer</param>
+        inline CacheAttributes( gemfire::CacheAttributes* nativeptr )
+          : SBWrap( nativeptr ) { }
+      };
+
+    }
+  }
+}
+ } //namespace 
+