| #ifndef __IMPL_DISTRIBUTEDSYSTEM_H__ |
| #define __IMPL_DISTRIBUTEDSYSTEM_H__ |
| /*========================================================================= |
| * 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. |
| *======================================================================== |
| */ |
| |
| /** |
| * @file |
| */ |
| |
| #include "../gfcpp_globals.hpp" |
| #include "../SharedPtr.hpp" |
| #include "../gf_types.hpp" |
| #include "ace/Recursive_Thread_Mutex.h" |
| #include "ace/Guard_T.h" |
| #include "ace/OS.h" |
| #include "../DistributedSystem.hpp" |
| #include "DiffieHellman.hpp" |
| #include <string> |
| #include <map> |
| |
| #ifdef __linux |
| #include <sys/prctl.h> |
| #endif |
| |
| namespace gemfire { |
| class SystemProperties; |
| |
| /** |
| * @class DistributedSystemImpl DistributedSystemImpl.hpp |
| * A "connection" to a GemFire distributed system. |
| * The connection will be through a (host, port) pair. |
| */ |
| |
| class DistributedSystemImpl; |
| typedef SharedPtr< DistributedSystemImpl > DistributedSystemImplPtr; |
| |
| class CPPCACHE_EXPORT DistributedSystemImpl: public SharedBase { |
| |
| /** |
| * @brief public methods |
| */ |
| public: |
| |
| /* |
| * threadname should have less than 16 bytes |
| */ |
| static void setThreadName(const char* tn) { |
| #ifdef __linux |
| int idx = 0; |
| while(idx < 16) { |
| if(tn[idx++] != '\0') { |
| continue; |
| }else |
| break; |
| } |
| if(tn[idx -1] != '\0') { |
| //throw exception |
| throw IllegalArgumentException("Thread name has more than 15 character."); |
| } |
| prctl(PR_SET_NAME , tn ,0,0,0); |
| #endif |
| } |
| /** |
| * @brief destructor |
| */ |
| virtual ~DistributedSystemImpl(); |
| |
| /** |
| */ |
| virtual AuthInitializePtr getAuthLoader( ); |
| |
| /** Retrieve the MemberId used to create this Cache. */ |
| virtual void disconnect(); |
| virtual void connect(); |
| std::string m_name; |
| DistributedSystem* m_implementee; |
| |
| DiffieHellman m_dh; |
| |
| /** |
| * @brief constructors |
| */ |
| DistributedSystemImpl(const char* name, DistributedSystem* implementee); |
| |
| // acquire/release locks |
| |
| static void acquireDisconnectLock(); |
| |
| static void releaseDisconnectLock(); |
| |
| /** |
| * To connect new appdomain instance |
| */ |
| static void connectInstance(); |
| |
| /** |
| * To disconnect appdomain instance |
| */ |
| static void disconnectInstance(); |
| |
| /** |
| * The current number of connection instances created using |
| * connectionOrGetInstance(). |
| */ |
| static int currentInstances(); |
| |
| static void registerCliCallback(int appdomainId, CliCallbackMethod clicallback); |
| |
| static void unregisterCliCallback(int appdomainId); |
| |
| static void CallCliCallBack(); |
| |
| private: |
| /** |
| * Guard for getAuthLoader() |
| */ |
| ACE_Recursive_Thread_Mutex m_authLock; |
| static ACE_Recursive_Thread_Mutex m_cliCallbackLock; |
| static volatile bool m_isCliCallbackSet ; |
| static std::map<int, CliCallbackMethod> m_cliCallbackMap; |
| }; |
| } // namespace gemfire |
| |
| #endif //ifndef __IMPL_DISTRIBUTEDSYSTEM_H__ |