In case you missed the big commit recently, the Geode Native components has
removed all globals.*

The biggest win here is that we can more easily unit test sections of the
code that before was nearly impossible due to reliance on initialized
global instances of Cache, DistributedSystem, PoolManager, etc. All long
lived instances are children of Cache and have access to their "container"
Cache for accessing other components like PoolManager, DistributedSystem,
etc. The refactor probably isn't perfect but it is a step in the right
direction. Look for more unit tests to come.

The next big win is that you can truly have more than a single Cache
instance in our process space. While this isn't a common intentional use
case, it is common in the .NET client implementation since a single
process, AppPool, could have several AppDomains each with their own
instance of Cache. In the old model all managed Cache instances shared the
singleton unmanaged Cache instance. This lead to confusion around
configuring multiple Caches in the same AppPool, think session state
provider and application lookaside caching in IIS, and restricted
configuration to share the same cluster and configuration.

Obviously this is a HUGE breaking change. Almost all source using the C++
or .NET clients will need to be refactored. While many should be pretty
obvious, look for updates coming to the examples soon to show you the light.

This change follows the major change where we switch from the home grown
SharedPtr/SharedBase refcounting memory management model to
std::shared_ptr. The next major refactoring coming is aligning the public
API with C++11 standards, like std::string, range-based for loops, etc. We
also plan to make the API more consistent between factories, getters,
setters, refs, pointers, etc.

-Jake

* Some lingering globals have been identified for removal.

Reply via email to