Top Banner
VMware GemFire® C++ Client 10.1 Rev: 10.1.3 © Copyright 2020 VMware Inc. or its affiliates. All Rights Reserved.
89

VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Jul 19, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

VMwareGemFire®C++Client10.1

Rev:10.1.3

©Copyright2020VMwareInc.oritsaffiliates.AllRightsReserved.

Page 2: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

2346

111920232527313236394142444650535758606061636972777778

TableofContents

TableofContentsVMwareGemFire®NativeClient10.1DocumentationGemFireNativeClient10.1ReleaseNotesSystemRequirementsUpgradingaNativeClientApplicationFromVersion9toVersion10InstallingtheNativeLibraryGettingStartedwiththeNativeLibraryPut/Get/RemoveExampleConfiguringaClientApplicationSystemLevelConfigurationConfiguringtheClientCacheConfiguringRegionsRegisteringInterestforEntriesRegionAttributesSerializingDataVMwareGemFire®PDXSerializationUsingthePdxSerializableAbstractClassPdxSerializableExampleRemoteQueriesContinuousQueriesSecurity:AuthenticationandEncryptionAuthenticationTLS/SSLClient-ServerCommunicationEncryptionSetUpOpenSSLStartingandstoppingtheclientandserverwithSSLinplaceFunctionExecutionTransactionsSystemPropertiesClientCacheXMLReferenceCacheInitializationFile:XMLEssentialsCacheInitializationFileElementDescriptions

©CopyrightPivotalSoftwareInc,2013-2020 2 10.1

Page 3: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

VMwareGemFire®NativeClient10.1DocumentationPublishedJuly10,2020.

TheVMwareGemFire®NativeClientisalibrarythatprovidesaccessforC++andMicrosoft .NET™clientstoaVMwareGemFire®distributedsystem.

SeetheReleaseNotesfornewfeaturesandsupportinformationregardingthisrelease.

UpgradingaNativeClientApplicationFromVersion9toVersion10provideshelpwiththeupgradefromNativeClient9.xtoNativeClient10.x.

SeetheAPIdocsforAPIdetails:

C++APIdocs

.NETAPIdocs

TheApacheGeodecommunityhasahostofexamplesbasedonthelatestC++and.NETAPIs(https://github.com/apache/geode-native/tree/develop/examples ).

SeetheVMwareGemFire®UserGuide forinformationregardingtheserver.

®

©CopyrightPivotalSoftwareInc,2013-2020 3 10.1

Page 4: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

GemFireNativeClient10.1ReleaseNotes

What’sNewinGemFireNativeClient10.1VMwareGemFire®NativeClient10.1isbasedonApacheGeode1.11.

Version10.1includesanumberofimprovements:

SSLenhancement-supportforcertificatechaining,betterone-waySSLconsistency

CompatibilityissueswithvariousversionsofPCC

Performanceimprovements

Bugfixes.SeeIssuesResolvedinNativeClient10.1

TheApacheGeodecommunityhasahostofexamplesbasedonthelatestC++and.NETAPIs(https://github.com/apache/geode-native/tree/develop/examples ).

IssuesResolvedinNativeClient10.1ThissectiondescribesissuesresolvedinVMwareGemFire®NativeClientversion10.1anditspatchreleases,beginningwiththemostrecentrelease.

IssuesResolvedinNativeClient10.1.3

GEODE-8297,GEMNC-472:Increaseddefaulttimeoutvalueforauthorizationtoaccommodatenetworkswithhigherlatency.

IssuesResolvedinNativeClient10.1.2

GEODE-7930:Endpointnamesarenolongertruncatedto99characters.TheNativeClientnowsupportsendpointnamesthatmeettheRFC2181standardof255charactersforfully-qualifieddomainnames.Thissolutionalsocorrectsaspurious“Failedtoaddendpoint”errorthatwasissuedwhen,infact,noerrorhadoccurred.

IssuesResolvedinNativeClient10.1.1

GEODE-8015,GEMNC-470:Addeddebuggingsymbolstothereleasedlibraries.TheNativeClientrelease

©CopyrightPivotalSoftwareInc,2013-2020 4 10.1

Page 5: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

forWindowsnowincludesa.pdbsymbolfile.OnLinux,thesymbolsarenowembeddedinthesharedlibrary(.sofile).

IssuesResolvedinNativeClient10.1.0

GEODE-3415:AddedsupportforcertificatechainfilesinSSLconfiguration.

GEODE-7437:Enforcedrecognitionoftruststoreinone-waySSL.

GEODE-5708,GEMNC-465:Fixedanissuewithanoverly-aggressivememoryfree-upoperationinpartitionedregionsthatcausedtheputAll()operationtofailwhencalledasecondtimeduetoaclosedserverconnection.

GEODE-6576:Improvedhandlingofstaleconnectionstopartitionedregions.

GEODE-6624,GEMNC-438:Improvedhandlingofdataserializationerrorreportingbyfixingaproblemcausedbynestedexceptions.

GEODE-6800,GEMNC-448:FixedagcccompilationerrorrelatedtoCacheableFileNameobjects.

GEODE-6835,GEMNC-442:Addedretrylogictopreventspuriousserver-sideSecurityManagererrors.

GEODE-7019:Fixclosingofidleconnectionsinnativeclient.

GEODE-7061:Reducedthenumberofconnectionscreatedduringhighloadconditionswithmanythreads.

GEODE-7299:FixedamemoryleakassociatedwithPDXdataserialization.

GEODE-7316:Fixedaraceconditionthatcouldcauseaclientapptocrashonshutdown.

GEODE-7418,GEMNC-464:FixedanissuewithPDXserialization/deserializationofJSONobjects.

GEODE-7476,GEODE-7509,GEMNC-436:Fixedamemoryleakthatappearedduringrepeatedqueries.

GEODE-7783:Optimizedconnectionhandlingtoimproveperformance.

©CopyrightPivotalSoftwareInc,2013-2020 5 10.1

Page 6: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

SystemRequirementsInthistopic

GemFireCompatibility

ApplicationCompatibility

.NETCompatibility

HostMachineRequirements

WindowsSupport

LinuxSupport

PCFSupport

SoftwareRequirementsforUsingSSL

TheVMwareGemFire®nativeclientprovidesaccessforC++andMicrosoft®.NET™clientstotheVMwareGemFire®distributedsystem.ItoperatesonplatformsrunningMicrosoftWindows,Linux(Intel),andPivotalCloudFoundry.

GemFireCompatibilityTheGemFireNativeClientsupportsapplicationsthatcommunicatewithGemFireservers.NativeClientversion10.1workswithPivotalGemFireversions9.0.0andlater.

ThefollowingtableshowswhichversionsoftheNativeClientarecompatiblewiththevariousversionsoftheGemFireserver.

GemFireNativeClientVersion GemFireServerVersion

GemFireNativeClient10 GemFireServer10

GemFireNativeClient10GemFireNativeClient9.1,9.2

GemFireServer9.x

GemFireNativeClient9.1GemFireNativeClient8.2

GemFireServer8.2

ApplicationCompatibilityGemFireNativeClientiscompiledusing64-bitarchitecturesforalloperatingsystems.Linkingwith32-bit

©CopyrightPivotalSoftwareInc,2013-2020 6 10.1

Page 7: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

applicationsisnotsupported.

SupportedPlatforms:C++ClientTheGemFireNativeClientsupportsapplicationsthatruninthefollowingclientenvironments:

Platform Version

Linux RedHatEnterpriseLinux(RHEL)7

Linux Ubuntu16(Xenial)

WindowsDesktop 10

WindowsServer 2016

PivotalCloudFoundry PCF2.3.2+

SupportedPlatforms:.NETClient

Platform Version

WindowsDesktop 10

WindowsServer 2016

PivotalCloudFoundry PCF2.3.2+

.NETCompatibilityForWindowsapplications,aMicrosoft.NETFrameworkmustbeinstalledtosupporttheC++/CLI(CommonLanguageInfrastructure)libraryforthenativeclient.

Theclientsupports.NET4.5.2(andnewer)andVisualStudio2017(andnewer)forcompiling.NETapplicationsonWindows.Itdoesnotsupport.NETCore.Formoreinformationonthefeaturesof.NETandVisualStudioCommunityEdition2017,seetheVisualStudio2017webpage .

HostMachineRequirementsEachmachinethatrunsanativeclientmustmeetthefollowingrequirements:

AsystemclocksettothecorrecttimeandatimesynchronizationservicesuchasNetworkTimeProtocol(NTP).Correcttimestampspermitthefollowingactivities:

©CopyrightPivotalSoftwareInc,2013-2020 7 10.1

Page 8: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Logsthatareusefulfortroubleshooting.Synchronizedtimestampsensurethatlogmessagesfromdifferenthostscanbemergedtoreproduceanaccuratechronologicalhistoryofadistributedrun.Aggregateproduct-levelandapplication-leveltimestatistics.Accuratemonitoringofthesystemwithscriptsandothertoolsthatreadthesystemstatisticsandlogfiles.

Thehostnameandhostfilesareproperlyconfiguredforthemachine.

WindowsSupportForWindowsC++applications,theGemFireNativeClientlibrary, pivotal-gemfire.dll ,requirestheMicrosoftVisualC++2017RedistributablePackage,whichyoucanfindontheVisualStudio2017webpage .Scrolldownto“RedistributablesandBuildTools”andselect“MicrosoftVisualC++RedistributableforVisualStudio2017”,andbesuretoselectthe“x64”version.InstallitonallmachinesthatwillrunyourC++application.

LinuxSupportForLinux,youcanverifythatyoumeetthenativeclientdependenciesatthelibrarylevelbyusingtheldd toolandenteringthiscommand:

$ldd$client-installdir/lib/libpivotal-gemfire.so

whereclient-installdiristhelocationinwhichyouhaveinstalledtheclient.

Thefollowinglibrariesareexternaldependenciesofthenativelibrary, libpivotal-gemfire.so .Verifythattheldd tooloutputincludesallofthese:

libdl.so.2

libm.so.6

libpthread.so.0

libc.so.6

libz.so.1

DisablingSynCookiesonLinux

ManydefaultLinuxinstallationsuseSYNcookiestoprotectthesystemagainstmaliciousattacksthat

©CopyrightPivotalSoftwareInc,2013-2020 8 10.1

Page 9: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

floodTCPSYNpackets.TheuseofSYNcookiesdramaticallyreducesnetworkbandwidth,andcanbetriggeredbyarunningVMwareGemFire®distributedsystem.

TodisableSYNcookiespermanently:

1. Editthe /etc/sysctl.conf filetoincludethefollowingline:

net.ipv4.tcp_syncookies=0

SettingthisvaluetozerodisablesSYNcookies.

2. Reload sysctl.conf :

$sysctl-p

PCFSupportPivotalCloudFoundrysupports.NETandC++nativeclientapplications.

PCFversions2.3.2andhigherincludetheMicrosoftVS2017C++RedistributableDLLs.

PCF.NETRequirements

PCF2.3.2ornewer

WindowsServer2016

.NET4.5.2ornewer

Torunyourcloudnative.NETapplicationonPCF:

1. The Pivotal.GemFire.dll mustbeinthe output folderofyour.NETproject.

2. Rebuildyourapplication.

3. FromVisualStudio,publishyourapplicationtoafilesystem.

4. Fromwithinthepublishedfilesystem,use cf push todeployyourapplicationtoPCFasyouwouldother.NETapplications.

PCFC++Requirements

©CopyrightPivotalSoftwareInc,2013-2020 9 10.1

Page 10: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

PCF2.3.2ornewer

UbuntuorWindows2017stemcells

TorunyourcloudnativeC++applicationonPCF:

1. Theruntimelibraries pivotal-gemfire.dll and cryptoImpl.dll mustbeinthepathofyourC++application.

2. Use cf push todeployyourapplicationtoPCFasyouwouldotherC++applications.

SoftwareRequirementsforUsingSSLIfyouplanonusingSSLinyourVMwareGemFire®nativeclientandserverdeployment,youwillneedtodownloadandinstallOpenSSL.TheVMwareGemFire®nativeclientrequiresOpenSSLversion1.1.1.

ForWindowsplatforms,youcanuseeithertheregularortheOpenSSL“Light”version.

Inaddition,makesurethatyoursystemenvironmentvariableshavebeenconfiguredtoincludeOpenSSL.

©CopyrightPivotalSoftwareInc,2013-2020 10 10.1

Page 11: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

UpgradingaNativeClientApplicationFromVersion9toVersion10GemFireNativeClientVersion10introducesbreakingchangesforVersion9applications.Updatingyourclientapplicationswillrequiremoreinterventionthanmerelyrecompiling.

Ingeneral,youwillhavebestperformanceandreliabilityifclientsandserversbothrunthelatestversionsoftheirrespectivesoftware.

GemFireserverandclientsoftwarereleasesfollowsimilarnumberingschemes,buttheyarenotreleasedinlockstep.ThefollowingdiagramillustratestheinteroperabilitybetweenrecentversionsofGemFireserversoftwareandGemFireNativeClientsoftware.

OverviewofChangesVMwareGemFire®NativeClientimprovementsandnewfeaturesinclude:

AmodernizedC++APIthatconstitutesabigstepforwardtofullysupportingC++11.

Localmemorymanagementhasbeengreatlyimproved,aswellastheadoptionofanewcachemodelthatallowsformultiplecacheobjectstoexistinagivenprocessspace.

The.NETinterfacebenefitsfromalltheenhancementsmadeintheC++interface.

TheNativeClientnowsupportsIISapplicationdomainsandPivotalCloudFoundry.

Anewarchitecturethatallowsformoreflexibleclient-sidedatamodels

Improvementstothereflection-basedAutoSerializer

TheApacheGeodecommunityhasahostofexamplesbasedonthelatestC++and.NETAPIs(https://github.com/apache/geode-native/tree/develop/examples ).

ForexamplesofsourcechangesseetheNativeClient9toNativeClient10UpgradeSample .

©CopyrightPivotalSoftwareInc,2013-2020 11 10.1

Page 12: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

TheseexamplesshowboththeoriginalandnewAPIusage,andmaybehelpfulasstartingpointsforupgradingyourapplicationtoNativeClient10.ToseedetailsforupgradingyourparticularAPIusagerefertotheNativeClient10APIdocumentation:

C++APIdocs

.NETAPIdocs

CompilerUpgradeUsingVersion10oftheNativeClientwithyourapplicationrequiresaC++11-compatiblecompiler.

RemovalofCacheSingletonAmajorchangeinNativeClient10isthechangefromasingleton-baseddesigntoaninstance-baseddesign.Thisgivesdevelopersgreaterprogrammingflexibility,asclientcacheinstancescanhavecompletelyindependentaccesstotheGemFiredatagrid.

Multipleclient-sideinstancesofCachedonotautomaticallyshareobjectswithoneanother.

ThecachecreationprocessinNativeClient10followsadifferentpatternandnowreturnsanobject(seeexamples).Eachalsorequiresapool.NativeClient10furthersimplifiesthecachecreationandsystemarchitecturewiththeremovalof DistributedSystem .Aninstanceof DistributedSystem isnolongerneededtomanageanapplication’s“connecting”intotheVMwareGemFire®Javaserver.ThisisnowmanagedthroughaCacheinstance.

Anoteto.NETusersoftheNativeClient:userscanpassinaninstanceoftheirauthorizationclassintotheCacheFactory( CacheFactory.SetAuthInitialize(app_auth); ).

©CopyrightPivotalSoftwareInc,2013-2020 12 10.1

Page 13: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

SerializationInterfaceChangesTheNativeClientserializationAPIsforbothC++and.NEThavebeenchangedtomorecloselyresemblethebehavioroftheGemFireJavaclient.TheserializableAPIhasbeenrefactoredintodataserializableandPDXserializableinterfaces.Inaddition,tobeconsistentwiththeJavaServer,thenewdataserializableinterfacedoesnothavefixed ClassId properties. ClassId isnowaparameterpassedintoregisteragiventype.

C++StandardizationInNativeClient10,manyversion9utilityclasses,suchassharedpointers,havebeenreplacedbytheirequivalentsfromtheC++11standardlibrary.

OneofthebiggestchangesmadeinNativeClient10isthereplacementofcustomapache::geode::client::SharedPtr with std::shared_ptr .Thecustombaseobject apache::geode::client::SharedBase hasbeenremovedandisnolongerarequiredderivationtomakelibraryobjectsreferencecounted;insteadobjectsmaysimplybewrappedbya std::shared_ptr<> .UpgradingtoNativeClient10requiresreplacingall*PtrtypeswiththeirC++11replacements.

Forexample,replace

RegionPtrregionPtr;

with

std::shared_ptr<Region>regionPtr;

OtheradoptedC++11standardsinclude:

Alltimevaluesnowusestd::chrono.Forexample, std::chrono replaces CacheableDate

Longsandintsarenowreplacedwithlanguageprimitivesofexplicitsize,suchas int32_t andint16_t .

std:string replaces char *

stdcontainerclasses

PDXSerializable::objectSize() and DataSerializable::objectSize() return size_t

Propertiesuse std::unordered map

©CopyrightPivotalSoftwareInc,2013-2020 13 10.1

Page 14: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

EnumClassesThefollowingVersion9EnumsarenowdefinedasC++11EnumclassesintheVersion10client:

CqOperation

CqState

ExpirationAction

PdxFieldTypes

ExceptionsGemFireNativeClientExceptions,whichwereimplementedasmacrosinv9,arenowclassesthatinheritfrom std::exception .

ObjectOrientedDesignPatternsNativeClient10hasadoptedmanymoreobjectorienteddesignpatterns.Forexample,the CacheFactorynowusesabuilderpatternandreturnsavalueratherthanapointer.

Otherexamplesofpattern-orientedchanges:

Replace apache::geode::client::PoolPtr withstd::shared_ptr<apache::geode::client::Pool>

Replace apache::geode::client::RegionPtr withstd::shared_ptr<apache::geode::client::Region>

Replace apache::geode::client::EntryEventPtr withstd::shared_ptr<apache::geode::client::EntryEvent>

Replace apache::geode::client::CachePtr withstd::unique_ptr<apache::geode::client::Cache>

PdxSerializabletoData/fromDataarenowpassedtoPdxWriter/PdxReaderasreferences

Executionfactoryreturnsvaluetype

Cache::createPdxInstanceFactory returnsobject

CqQuery::getCqAttributesMutator returnsvalue

Cache::createDataInput/Output returnsvalue

©CopyrightPivotalSoftwareInc,2013-2020 14 10.1

Page 15: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

InitializationFilesThebestpracticeformostapplicationsistosetpropertiesandparametersprogrammatically.Forclientsthatusetheolder,file-basedscheme,thefollowingchangesapplytothesysteminitializationfiles,geode.properties and cache.xml :

Inbothfiles,parametersspecifyingtimesshouldincludeunits( s , m , h ,etc.).

Forthe cache.xml file,theschemanamespaceandlocationhavechanged.Use

<client-cachexmlns="http://geode.apache.org/schema/cpp-cache"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://geode.apache.org/schema/cpp-cachehttp://geode.apache.org/schema/cpp-cache/cpp-cache-1.0.xsd"version="1.0">

OtherChangesThe $GFCPP environmentvariableisnolongerneeded

enable-chunk-handler-thread nowdefaultsto false andreplacesdisable-chunk-handler-thread

NativeClient10nowsupportsOpenSSL

StatisticsandStatisticsFactoryarenolongeravailable

.NETAPIChangesThese.NETAPIclasseshavechangedasfollows:

CacheFactory

Creationwasviastaticmethod CreateCacheFactory ,nowcreatedvia new

Authorizationimplementationnowisasetteronfactorycalled SetAuthInitialize

Appdomain propertyisnolongerasupportedproperty

GetAnyInstance() isnolongersupported(thereisnomoreglobalsingleton).Makemethodcallsonthespecificinstanceyouareworkingwith

PoolFactory

©CopyrightPivotalSoftwareInc,2013-2020 15 10.1

Page 16: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Creationwasobtainedviastaticmethod PoolManager.CreateFactory ,nowvia GetPoolFactorymethodon Cache

SetEntryTimeToLive -was int ,nowuses TimeSpan

SetEntryIdleTimeout-was int ,nowuses TimeSpan

SetRegionTimeToLive-was int ,nowuses TimeSpan

SetRegionIdleTimeout-was int ,nowuses TimeSpan

RegionFactory

SetEntryTimeToLive -was int ,nowuses TimeSpan .

IGeodeSerializable

The IGeodeSerializable interfacehasbeenrenamedto IDataSerializable .

.NETSessionStateProviderTheNativeClient10versionoftheSessionStateProvider(SSP)onlyrequiresconfigurationtobesetinWeb.Config andthedeploymentofserver-sidefunctions.

C++APIChangesThefollowingclasseshavechangedorarenolongerpresentinthecurrentrelease.

Version9:RemovedClass Version10:RecommendedAction

Assert N/A

AttributesFactory ReplacewithRegionAttributesFactory

CacheableArrayType,CacheableContainerType,CacheableKeyType

Convertedtotemplates.SeeINSTALL_DIR/include/geode/CacheableBuiltins.hpp

DistributedSystem Usedinternally

EqualToSB Nolongerneeded;usestdtypes

GeodeTypeIds RemovedfrompublicAPI

HashMapOfCacheable Replacewithstd::hash

HashMapOfSharedBase Replacewithstd::hash

©CopyrightPivotalSoftwareInc,2013-2020 16 10.1

Page 17: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

HashSB Replacewithstd::hash

HashSetOfCacheableKey Replacewithstd::hash

HashSetOfSharedBase Replacewithstd::shared_ptr<T>

HashSetT Replacewithstd::hash

InternalCacheTransactionManager2PC RemovedfrompublicAPI

Log UseLogLevelatcachecreation

LogFn UseLogLevelatcachecreation

LogVarargs UseLogLevelatcachecreation

NullSharedBase Replacewithnullptr

SelectResultsIterator ReplacewithResultsCollector

SharedArrayPtr Replacewithstd::shared_ptr<T>

SharedBaseAbstractbaseclassnolongerneeded.Replacewithstd::shared_ptr<T>

SharedPtr Replacewithstd::shared_ptr<T>

SPEHelperExceptionhelpernolongerneededaftermovefromSharedPtrtostd::shared_ptr

VectorOfCacheable std::vector<std::shared_ptr<T>>

VectorOfCacheableKey std::vector<std::shared_ptr<T>>

VectorOfSharedBase std::vector<std::shared_ptr<T>>

VectorT std::vector<T>

Version9:RemovedClass Version10:RecommendedAction

Thefollowingclasseshavechangedornewinthecurrentrelease.

NeworRenamedClass SummaryofChanges

AuthenticatedView ReplacesAuthenticatedCacheinv9API.Usedformulti-userauthentication.

DataSerializableAninterfaceforobjectswhosestatecanbewritten/readasprimitivetypes.SupersedesSerializable,whichisnowthesuperclassofalluserobjectsinthecachethatcanbeserialized.

DefaultResultCollectorDefaultclassthatgathersresultsfromfunctionexecution.TheResultCollectorinterfacealsochanged.

LogLevel Methodreturnsloglevel.

RegionAttributesFactory ReplacesAttributesFactory

©CopyrightPivotalSoftwareInc,2013-2020 17 10.1

Page 18: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

RegionShortcut Enumclassholdingallregiontypes(PROXY,CACHING_PROXY,CACHING_PROXY_ENTRY_LRU,LOCAL_ENTRY_LRU)

TypeRegistry Classforregisteringacustomserializabletype.

NeworRenamedClass SummaryofChanges

©CopyrightPivotalSoftwareInc,2013-2020 18 10.1

Page 19: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

InstallingtheNativeLibraryInstallthenativeclientbyextractingthecontentsofthedistributionarchiveandsettinguptheenvironment.

InstallationPrerequisites

BeforeinstallingtheGemFirenativeclient,confirmthatyoursystemmeetsthehardwareandsoftwarerequirementsdescribedinGemFireNativeClientSystemRequirements.

CopyandUncompresstheDistributionArchive

1. Inabrowser,navigatetothePivotalGemFiredownloadpage .

2. FromtheReleases:pull-downmenu,selectthemostrecentversionofVMwareGemFire®NativeClient.

3. ExpandtheentryintheReleaseDownloadFilesdialogbox,selecttheversionthatbestsuitsyourdevelopmentplatform,anddownloadit.

4. MovethedownloadedarchivetothelocaldirectoryorfolderinwhichyouwishtoinstalltheNativeClientlibraries.Foreaseofuse,chooseawell-knownlocation:

OnLinux,/usr/localOnWindows,C:\ProgramFiles

5. Uncompressthedistributionarchive,whichmaybeaZIParchiveoracompressedtarfile(.tar.gzor.tgz).Forexample:

$unzippivotal-gemfire-nativeclient-windows-64bit-10.x.y.zip

or

$tarxvzfpivotal-gemfire-nativeclient-linux-64bit-10.x.y.tar.gz

6. Foreaseofuse,renametheresultingdirectoryto nativeclient .

©CopyrightPivotalSoftwareInc,2013-2020 19 10.1

Page 20: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

GettingStartedwiththeNativeLibraryInthistopic

SetUpYourDevelopmentEnvironment

EstablishAccesstoaVMwareGemFire®ClusterConnectingtotheServer

ApplicationDevelopmentWalkthrough

ProgrammingExamples

TousetheVMwareGemFire®NativeLibraryfordevelopingVMwareGemFire®clientapplications:

ObtainadistributionoftheNativelibraryandinstallitonyourdevelopmentplatform.

Setupyourdevelopmentenvironmentwiththetoolsyouneed,suchasacompilerandanOpenSSLsecuritylibrary.

EstablishaccesstoaneworexistingVMwareGemFire®cluster.

WriteyourclientapplicationusingtheVMwareGemFire®nativelibrarytointeractwiththeVMwareGemFire®server.

SetUpYourDevelopmentEnvironmentYouwillneedsomeessentialtools,suchasacompilerandalinker.YourcompilermusthaveaccesstotheNativeClientheaderfiles,andthelinkermusthaveaccesstotheNativeClientlibraries.TheheaderfilesandlibrariesarelocatedintheNativeClientinstallationdirectory.

EstablishAccesstoaVMwareGemFire®ClusterAsyoudevelopyourapplication,youwillneedaccesstoaVMwareGemFire®cluster.YourclientapplicationconnectstoaVMwareGemFire®clusterbyspecifyingtheaddress(hostnameorIPaddress)andportnumberofoneormorelocators,andthenameofaregionthatalsoexistsonthecluster.TheclientAPIestablishesapoolofthesenetworkconnectionsforyourclientapplicationtouse.

Youcanchoosewhethertousealarge,remote,production-qualitycluster;asmall,local,developmentcluster;orsomethingin-between,suchasatestingorexperimentallabinstallation.

IntheVMwareGemFire®User’sGuide,seeConfiguringandRunningaCluster andClient/ServerConfiguration forinstructionsonsettingupandstartingtheclusterforaclient/serverconfiguration.

ConnectingtotheServer

Toconnecttoaserver,yourapplicationmustfollowthesesteps:

1. Instantiatea CacheFactory ,settingcharacteristicsofinterest(forexample, log-level ).

©CopyrightPivotalSoftwareInc,2013-2020 20 10.1

Page 21: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

2. Createacacheanduseittoinstantiatea PoolFactory ,specifyingthehostnameandportfortheserverlocator.

3. Createanamedpoolofnetworkconnections.

4. Instantiatearegionofthedesiredtype(usuallyCACHING_PROXYorPROXY)andconnectitbynametoitscounterpartontheserver.

Oncetheconnectionpoolandthesharedregionareinplace,yourclientapplicationisreadytosharedatawiththeserver.

ServerConnection:C++Example

ThisexampleofconnectingtotheserveristakenfromtheC++ put-get-remove example.

Instantiatea CacheFactory andsetitscharacteristics:

autocacheFactory=CacheFactory();//instantiatecachefactorycacheFactory.set("log-level","none");//setcachelog-levelcharacteristics

Createacacheanduseittoinstantiatea PoolFactory :

autocache=cacheFactory.create();//createcacheautopoolFactory=cache.getPoolManager().createFactory();//instantiatepoolfactory

poolFactory.addLocator("localhost",10334);//addlocatortopoolfactory

Createanamedpoolofnetworkconnections,andinstantiatearegionofthedesiredtype:

autopool=poolFactory.create("pool");//createapoolcalled"pool"thatknowswheretheserverisautoregionFactory=cache.createRegionFactory(RegionShortcut::PROXY);//instantiateregionfactorywithPROXYcharacteristicsautoregion=regionFactory.setPoolName("pool").create("example_userinfo");//createaconnectiontotheregion"example_userinfo"ontheserver

SeetheVMwareGemFire®UserGuidesectionConfiguringaClient/ServerSystem formoredetails.

ApplicationDevelopmentWalkthrough

TheC++AppDevelopmentWalkthrough describeshowtosetupanativeclientdevelopmentenvironmentusingCMake.

ProgrammingExamplesTheVMwareGemFire®ClientbuildprovidesasetofprogrammingexamplestohelpyouunderstandtheclientAPI.Theexamples directorycontainsCMakefilesanda cpp subdirectorycontainingC++examples.TheWindowsbuildalsoincludesa dotnet subdirectorycontainingC#examples.

CMakefilesarelocatedateachlevelofthedirectorystructuretoallowexamplestobebuiltindividuallyoringroups.

©CopyrightPivotalSoftwareInc,2013-2020 21 10.1

Page 22: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Thedirectorystructureresemblesthishierarchy(someentriesareomittedforclarity):

MyProject/cmake/CMakeLists.txtexamples/BUILD-EXAMPLES.mdCMakeLists.txtCMakeLists.txt.incmake/cpp/authinitialize/continuousquery/dataserializable/functionexecution/pdxserializable/pdxserializer/putgetremove/remotequery/sslputget/transaction/dotnet/authinitialize/continuousquery/dataserializable/functionexecution/pdxautoserializer/pdxserializable/putgetremove/remotequery/sslputget/transaction/

Seethe BUILD-EXAMPLES.md filefordetailedinstructionsonbuildingandexecutingtheexamples,andreadthesourcecodetounderstandhowtheexamplesareconstructed.

SeePut/Get/RemoveExampleforsamplecodeshowingthebasicsofhowaclientapplicationconnectstoaVMwareGemFire®clusterandperformsbasicoperationsonaremoteserver.

©CopyrightPivotalSoftwareInc,2013-2020 22 10.1

Page 23: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Put/Get/RemoveExampleInthistopic

Put/Get/RemoveExampleCode

ThenativeclientreleasecontainsanexamplewrittenforC++showinghowaclientapplicationcanestablishaconnectiontoaclusterandthenusethatconnectiontoperformbasicoperationsonaremoteserver.Theexamplesarelocatedin examples/cpp/putgetremove .

Theexampleperformsasequenceofoperations,displayingsimplelogentriesastheyrun.

Toruntheexample,followtheinstructionsinthe README.md fileintheexampledirectory.

Reviewthesourcecodeintheexampledirectorytoseeexactlyhowitoperates.

Beginbyrunningascriptthatsetsuptheserver-sideenvironmentbyinvoking gfsh commandstocreatearegion,simplycalled“example_userinfo.”

Runtheexampleclientapplication,whichperformsthefollowingsteps:

ConnectstotheserverPerformsregionputoperationsusingkey/valuepairsUsesregiongettoretrievethevaluesUsesregionremovetoremovethevalues

Put/Get/RemoveExampleCodeThissectioncontainscodesnippetsshowinghighlightsoftheC++put/get/removeexample.Theyarenotintendedforcut-and-pasteexecution.Forthecompletesource,seetheexamplesourcedirectory.

TheC++examplecreatesacache,thenusesittocreateaconnectionpoolandaregionobject(ofclassRegion ).

©CopyrightPivotalSoftwareInc,2013-2020 23 10.1

Page 24: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

autocacheFactory=CacheFactory();cacheFactory.set("log-level","none");autocache=cacheFactory.create();autopoolFactory=cache.getPoolManager().createFactory();

poolFactory.addLocator("localhost",10334);autopool=poolFactory.create("pool");autoregionFactory=cache.createRegionFactory(RegionShortcut::PROXY);autoregion=regionFactory.setPoolName("pool").create("example_userinfo");

Theclientthenpopulatesthedatastorewithtwokey/valuepairs.

region->put("rtimmons","RobertTimmons");region->put("scharles","SylviaCharles");

Next,theapplicationretrievesthestoredvaluesusing Get operations.

autouser1=region->get("rtimmons");autouser2=region->get("scharles");

Finally,theapplicationdeletesoneofthestoredvaluesusingthe Remove method.

if(region->existsValue("rtimmons")){std::cout<<"rtimmons'sinfonotdeleted"<<std::endl;}else{std::cout<<"rtimmons'sinfosuccessfullydeleted"<<std::endl;}

©CopyrightPivotalSoftwareInc,2013-2020 24 10.1

Page 25: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

ConfiguringaClientApplicationInthistopic

ProgrammaticConfigurationvsXMLConfiguration

HighAvailabilitywithServerRedundancy

Youcanconfigureyournativeclientapplication:

Programmaticallyinyourappcode

ViaXMLfilesandpropertiesfiles(seeClientCacheXMLReference)

Throughacombinationofprogrammaticandfile-basedapproaches

Thissectiondescribesconfigurationontwolevels,thesystemlevelandthecachelevel.Systempropertysettingsdescribeyourapplication’sbehavior,whilecacheconfigurationdescribesdata.

ProgrammaticConfigurationvsXMLConfigurationProgrammaticconfigurationenablesyourclientapplicationtodynamicallyadapttochangingruntimeconditions.

Incontrast,XMLconfigurationexternalizesproperties,suchaslocatoraddressesandpoolconnectiondetails,sotheycanbechangedwithoutrequiringthatyourecompileyourapplication.

C++RegionFactoryExample

Thefollowingexamplesillustratehowtosetaregion’sexpirationtimeoutattributeprogrammaticallyandthroughXML.

Settingapropertyprogrammatically:

autoregionFactory=cache.createRegionFactory(RegionShortcut::CACHING_PROXY);autoregion=regionFactory.setRegionTimeToLive(ExpirationAction::INVALIDATE,std::chrono::seconds(120)).create("exampleRegion0");

XMLequivalent:

©CopyrightPivotalSoftwareInc,2013-2020 25 10.1

Page 26: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

<regionname="exampleRegion0"refid="CACHING_PROXY"><region-attributespool-name="default"><region-time-to-live><expiration-attributestimeout="120s"action="invalidate"/></region-time-to-live></region-attributes></region>

TablesofpropertiesSeeSystemPropertiesforalistofsystempropertiesthatcanbeconfiguredprogrammaticallyorinthegeode.properties file.

HighAvailabilitywithServerRedundancyWhenredundancyisenabled,secondaryserversmaintainqueuebackupswhiletheprimaryserverpusheseventstotheclient.Iftheprimaryserverfails,oneofthesecondaryserversstepsinasprimarytoprovideuninterruptedeventmessagingtotheclient.Toconfigurehighavailability,setthesubscription-redundancy intheclient’spoolconfiguration.Thissettingindicatesthenumberofsecondaryserverstouse.SeetheVMwareGemFire®UserGuidesectionConfiguringHighlyAvailableServers formoredetails.

©CopyrightPivotalSoftwareInc,2013-2020 26 10.1

Page 27: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

SystemLevelConfigurationInthistopic

AttributeDefinitionPriority

SearchPathforMultiplePropertiesFiles

DefiningPropertiesProgrammatically

Aboutthegeode.propertiesConfigurationFile

ConfigurationFileLocations

UsingtheDefaultSampleFile

ConfiguringSystemPropertiesfortheClient

RunningaClientOutoftheBox

AttributeDefinitionPriorityYoucanspecifyattributesindifferentways,whichcancauseconflictingdefinitions.Applicationscanbeconfiguredprogrammatically,andthathaspriorityoverothersettings.

Incaseanattributeisdefinedinmorethanoneplace,thefirstsourceinthislistisused:

Programmaticconfiguration

Propertiessetatthecommandline

current-working-directory/geode.properties file

native-client-installation-directory/defaultSystem/geode.properties file

defaults

The geode.properties filesandprogrammaticconfigurationareoptional.Iftheyarenotpresent,nowarningsorerrorsoccur.Fordetailsonprogrammaticconfigurationthroughthe Properties object,seeDefiningPropertiesProgrammatically.

SearchPathforMultiplePropertiesFilesTheclientandcacheserverprocessesfirstlookfortheirpropertiesfileinthenative-client-installation-directory/defaultSystem directory,thenintheworkingdirectory.

©CopyrightPivotalSoftwareInc,2013-2020 27 10.1

Page 28: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Anypropertiessetintheworkingdirectoryoverridesettingsinthenative-client-installation-directory/defaultSystem/geode.properties file.

The geode.properties fileprovidesinformationtotheclientregardingtheexpectedserverconfiguration.Propertiessetinthisfile(intheclientenvironment)donothaveanyeffectontheserveritself.Itsmainpurposeistoinformtheclientapplicationastohowtocommunicatewiththeserver.

DefiningPropertiesProgrammaticallyYoucanpassinspecificpropertiesprogrammaticallybyusinga Properties objecttodefinethenon-defaultproperties.

Example:

autosystemProps=Properties::create();systemProps->insert("statistic-archive-file","stats.gfs");systemProps->insert("cache-xml-file","./myapp-cache.xml");systemProps->insert("stacktrace-enabled","true");autocache=CacheFactory(systemProps).create();

Aboutthegeode.propertiesConfigurationFileThe geode.properties fileprovideslocalsettingsrequiredtoconnectaclienttoadistributedsystem,alongwithsettingsforlicensing,logging,andstatistics.SeeSystemProperties.

ConfigurationFileLocationsAclientlooksfora geode.properties filefirstintheworkingdirectorywheretheprocessruns,theninnative-client-installation-directory/defaultSystem .Usethe defaultSystem directorytogroupconfigurationfilesortosharethemamongprocessesformoreconvenientadministration.If geode.properties isnotfound,theprocessstartsupwiththedefaultsettings.

Forthe cache.xml cacheconfigurationfile,aclientlooksforthepathspecifiedbythe cache-xml-fileattributein geode.properties (seeSystemProperties).Ifthe cache.xml isnotfound,theprocessstartswithanunconfiguredcache.

UsingtheDefaultSampleFile

©CopyrightPivotalSoftwareInc,2013-2020 28 10.1

Page 29: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Asample geode.properties fileisincludedwiththeVMwareGemFire®nativeclientinstallationinthenative-client-installation-directory/defaultSystem directory.

Tousethisfile:

1. Copythefiletothedirectorywhereyoustarttheapplication.

2. Uncommentthelinesyouneedandeditthesettingsasshowninthisexample:

cache-xml-file=test.xml

3. Starttheapplication.

Defaultgeode.propertiesFile

#DefaultC++distributedsystemproperties#Copytocurrentdirectoryanduncommenttooverridedefaults.###Debuggingsupport,enablesstacktracesinapache::geode::client::Exception.##Thedefaultisfalse,uncommenttoenablestacktracesinexceptions.#stacktrace-enabled=true#crash-dump-enabled=true####Cacheregionconfiguration##cache-xml-file=cache.xml###Logfileconfig##log-file=gemfire_cpp.log#log-level=config#zeroindicatesusenolimit.#log-file-size-limit=0#zeroindicatesusenolimit.#log-disk-space-limit=0...

ConfiguringSystemPropertiesfortheClientThetypicalconfigurationprocedureforaclientincludesthehigh-levelstepslistedbelow.

1. Placethe geode.properties filefortheapplicationintheworkingdirectoryorin

©CopyrightPivotalSoftwareInc,2013-2020 29 10.1

Page 30: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

native-client-installation-directory/defaultSystem .

2. Placethe cache.xml filefortheapplicationinthedesiredlocationandspecifyitspathusingthecache-xml-file propertyinthe geode.properties file.

3. Addotherattributestothe geode.properties fileasneededforthelocalsystemarchitecture.

RunningaClientOutoftheBoxIfyoustartaclientwithoutanyconfiguration,itusesanyattributessetprogrammaticallyplusanyhard-codeddefaults(listedinSystemProperties).Runningwiththedefaultsisaconvenientwaytolearntheoperationofthedistributedsystemandtotestwhichattributesneedtobereconfiguredforyourenvironment.

Runningbasedondefaultsisnotrecommendedforproductionsystems,asimportantcomponents,suchassecurity,mightbeoverlooked.

©CopyrightPivotalSoftwareInc,2013-2020 30 10.1

Page 31: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

ConfiguringtheClientCacheClientcachesprovidetheframeworkforclientstostore,manage,anddistributeapplicationdata.

AcacheisanentrypointforaccesstoVMwareGemFire®.Throughthecache,clientsgainaccesstotheVMwareGemFire®cachingframeworkfordataloading,distribution,andmaintenance.

A Cache instanceallowsyourclienttosetgeneralparametersforcommunicationbetweenacacheandothercachesinthedistributedsystem,andtocreateandaccessanyregioninthecache.

Regionsarecreatedfrom Cache instances.Regionsprovidetheentrypointstotheinterfacesforinstancesof Region and RegionEntry .

Formoreinformationspecifictoyourclientprogramminglanguage,seetheC++ClientAPI .

©CopyrightPivotalSoftwareInc,2013-2020 31 10.1

Page 32: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

ConfiguringRegionsInthistopic

ProgrammaticRegionCreation

DeclarativeRegionCreation

InvalidatingandDestroyingRegions

RegionAccess

GettingtheRegionSize

TheregionisthecorebuildingblockoftheVMwareGemFire®distributedsystem.Allcacheddataisorganizedintodataregionsandyoudoallofyourdataputs,gets,andqueryingactivitiesagainstthem.

InordertoconnecttoaVMwareGemFire®server,aclientapplicationmustdefinearegionthatcorrespondstoaregionontheserver,atleastinname.SeeDataRegions intheVMwareGemFire®UserGuidefordetailsregardingserverregions,andRegionAttributesinthisguideforclientregionconfigurationparameters.

Youcancreateregionseitherprogrammaticallyorthroughdeclarativestatementsina cache.xml file.Programmaticconfigurationisrecommended,asitkeepstheconfigurationcloseathandandeliminatesanexternaldependency.Regioncreationissubjecttoattributeconsistencychecks.

ProgrammaticRegionCreationTocreatearegion:

1. Instantiatea CacheFactory anduseittocreateacache.

2. Thecacheincludesaninstanceof PoolManager —useittocreateaconnectionpool.

3. Usecachetoinstantiatea RegionFactory anduseittocreatearegion,specifyinganydesiredattributesandanassociationwiththeconnectionpool.

C++RegionCreationExample

ThefollowingexampleillustrateshowtocreatetworegionsusingC++.

©CopyrightPivotalSoftwareInc,2013-2020 32 10.1

Page 33: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

autocache=CacheFactory().create();

autoexamplePool=cache.getPoolManager().createFactory().addLocator("localhost",40404).setSubscriptionEnabled(true).create("examplePool");

autoclientRegion1=cache.createRegionFactory(RegionShortcut::PROXY).setPoolName("examplePool").create("clientRegion1");

DeclarativeRegionCreationDeclarativeregioncreationinvolvesplacingtheregion’sXMLdeclaration,withtheappropriateattributesettings,ina cache.xml filethatisloadedatcachecreation.

Liketheprogrammaticexamplesabove,thefollowingexamplecreatestworegionswithattributesandaconnectionpool:

<?xmlversion="1.0"encoding="UTF-8"?><client-cachexmlns="http://geode.apache.org/schema/cpp-cache"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://geode.apache.org/schema/cpp-cachehttp://geode.apache.org/schema/cpp-cache/cpp-cache-1.0.xsd"version="1.0"><poolname="examplePool"subscription-enabled="true"><serverhost="localhost"port="40404"/></pool><regionname="clientRegion1"refid="PROXY"><region-attributespool-name="examplePool"/></region><regionname="clientRegion2"refid="CACHING_PROXY"><region-attributespool-name="examplePool"><region-time-to-live><expiration-attributestimeout="120s"action="invalidate"/></region-time-to-live></region-attributes></region></client-cache>

The cache.xml filecontentsmustconformtotheXMLdescribedinthe cpp-cache-1.0.xsd fileprovidedinyourdistribution’s xsds subdirectoryandavailableonlineathttps://geode.apache.org/schema/cpp-

©CopyrightPivotalSoftwareInc,2013-2020 33 10.1

Page 34: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

cache/cpp-cache-1.0.xsd .

InvalidatingandDestroyingRegionsInvalidationmarksallentriescontainedintheregionasinvalid(withnullvalues).Destructionremovestheregionandallofitscontentsfromthecache.

Youcanexecutetheseoperationsexplicitlyinthelocalcacheinthefollowingways:

ThroughdirectAPIcallsfromtheclientusingapache::geode::client::Region:invalidateRegion()

Throughexpirationactivitiesbasedontheregion’sstatisticsandattributesettings.

Ineithercase,youcanperforminvalidationanddestructionasalocaloradistributedoperation.

Alocaloperationaffectstheregiononlyinthelocalcache.

Adistributedoperationworksfirstontheregioninthelocalcacheandthendistributestheoperationtoallothercacheswheretheregionisdefined.Thisistheproperchoicewhentheregionisnolongerneeded,orvalid,foranyapplicationinthedistributedsystem.

Iftheregionontheserverisconfiguredasapartitionedregion,itcannotbeclearedusingAPIcallsfromtheclient.

Auser-definedcachewritercanabortaregiondestroyoperation.Cachewritersaresynchronouslistenerswiththeabilitytoabortoperations.Ifacachewriterisdefinedfortheregionanywhereinthedistributedsystem,itisinvokedbeforetheregionisexplicitlydestroyed.

Whethercarriedoutexplicitlyorthroughexpirationactivities,invalidationanddestructioncauseeventnotification.

RegionAccessYoucanuse Cache::getRegion toretrieveareferencetoaspecifiedregion.

Cache::getRegion returns nullptr iftheregionisnotalreadypresentintheapplication’scache.Aserverregionmustalreadyexist.

Aregionnamecannotcontainthesecharacters:

IneligibleCharacterdescription IneligibleCharacter

©CopyrightPivotalSoftwareInc,2013-2020 34 10.1

Page 35: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

whitespace spaceortab

anglebrackets <>

colon :

quote "

forwardslashandbackslash /\

pipe(verticalbar) |

questionmark ?

asterisk *

IneligibleCharacterdescription IneligibleCharacter

GettingtheRegionSizeThe Region APIprovidesa size methodthatgetsthesizeofaregion.Forclientregions,thisgivesthenumberofentriesinthelocalcache,notontheservers.Seethe Region APIdocumentationfordetails.

©CopyrightPivotalSoftwareInc,2013-2020 35 10.1

Page 36: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

RegisteringInterestforEntriesForclientregions,youcanprogrammaticallyregisterinterestinentrykeysstoredonacacheserverregion.Aclientregionreceivesupdatenotificationsfromthecacheserverforthekeysofinterest.

Youcanregisterinterestforspecificentrykeysorforallkeys.Regularexpressionscanbeusedtoregisterinterestforkeyswhosestringsmatchtheexpression.Youcanalsounregisterinterestforspecifickeys,groupsofkeysbasedonregularexpressions,orforallkeys.

Note:Interestregistrationandunregistrationaresymmetricaloperations.Consequently,youcannotregisterinterestinallkeysandthenunregisterinterestinaspecificsetofkeys.Also,ifyoufirstregisterinterestinspecifickeyswith registerKeys ,thencall registerAllKeys ,youmustcall unregisterAllKeys beforespecifyinginterestinspecifickeysagain.

ClientAPIforRegisteringInterestYouregisterclientinterestthroughtheC++API.TheC++APIprovidesthe registerKeys , registerAllKeys ,andregisterRegex methods,withcorrespondingunregistrationaccomplishedusingthe unregisterKeys ,unregisterAllKeys ,and unregisterRegex methods.

The registerKeys , registerRegex and registerAllKeys methodshavetheoptiontopopulatethecachewiththeregistrationresultsfromtheserver.The registerRegex and registerAllKeys methodscanalsooptionallyreturnthecurrentlistofkeysregisteredontheserver.

SettingUpClientNotificationInadditiontotheprogrammaticfunctioncalls,toregisterinterestforaserverregionandreceiveupdatedentriesyouneedtoconfiguretheregionwiththe PROXY or CACHING_PROXYRegionShortcut setting.Theregion’spoolshouldhave subscription-enabled=true seteitherintheclientXMLorprogrammaticallyviaaCacheFactory::setSubscriptionEnabled(true) APIcall.Otherwise,whenyouregisterinterest,youwillgetanUnsupportedOperationException .

<regionname="listenerWriterLoader"refid="CACHING_PROXY">...

Allclientsthathavesubscriptionsenabledtrackanddrop(ignore)anyduplicatenotificationsreceived.Toreduceresourceusage,aclientexpirestrackedsourcesforwhichnewnotificationshavenotbeenreceivedforaconfigurableamountoftime.

©CopyrightPivotalSoftwareInc,2013-2020 36 10.1

Page 37: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

NotificationSequence

Notificationsinvoke CacheListeners ofcachelessclientsinallcasesforkeysthathavebeenregisteredontheserver.Similarly,invalidatesreceivedfromtheserverinvoke CacheListeners ofcachelessclients.

Ifyouregistertoreceivenotifications,listenercallbacksareinvokedirrespectiveofwhetherthekeyisintheclientcachewhena destroy or invalidate eventisreceived.

RegisteringInterestforSpecificKeysYouregisterandunregisterinterestforspecifickeysthroughthe registerKeys and unregisterKeysfunctions.Youregisterinterestinakeyorsetofkeysbyspecifyingthekeynameusingtheprogrammaticsyntaxshowninthefollowingexample:

keys0.push_back(keyPtr1);keys1.push_back(keyPtr3);regPtr0->registerKeys(keys0);regPtr1->registerKeys(keys1);

Theprogrammaticcodesnippetinthenextexampleshowshowtounregisterinterestinspecifickeys:

regPtr0->unregisterKeys(keys0);regPtr1->unregisterKeys(keys1);

RegisteringInterestforAllKeysIftheclientregistersinterestinallkeys,theserverprovidesnotificationsforallupdatestoallkeysintheregion.Thenextexampleshowshowtoregisterinterestinallkeys:

regPtr0->registerAllKeys();regPtr1->registerAllKeys();

Thefollowingexampleshowsacodesampleforunregisteringinterestinallkeys.

regPtr0->unregisterAllKeys();regPtr1->unregisterAllKeys();

©CopyrightPivotalSoftwareInc,2013-2020 37 10.1

Page 38: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

RegisteringInterestUsingRegularExpressionsThe registerRegex functionregistersinterestinaregularexpressionpattern.Theserverautomaticallysendstheclientchangesforentrieswhosekeysmatchthespecifiedpattern.

Keysmustbestringsinordertoregisterinterestusingregularexpressions.

Thefollowingexampleshowsinterestregistrationforallkeyswhosefirstfourcharactersare Key- ,followedbyanystringofcharacters.Thecharacters .* representawildcardthatmatchesanystring.

regPtr1->registerRegex("Key-.*");

Tounregisterinterestusingregularexpressions,youusethe unregisterRegex function.Thenextexampleshowshowtounregisterinterestinallkeyswhosefirstfourcharactersare Key- ,followedbyanystring(representedbythe .* wildcard).

regPtr1->unregisterRegex("Key-.*");

RegisterInterestScenarioInthisregisterinterestscenario,acachelistenerisusedwithacachelessregionthathassubscription-enabled setto true .Theclientregionisconfiguredwithcachingdisabled;clientnotificationisenabled;andacachelistenerisestablished.Theclienthasnotregisteredinterestinanykeys.

Whenavaluechangesinanotherclient,itsendstheeventtotheserver.Theserverwillnotsendtheeventtothecachelessclient,eventhough client-notification issetto true .

Toactivatethecachelistenersothecachelessregionreceivesupdates,theclientshouldexplicitlyregisterinterestinsomeorallkeysbyusingoneoftheAPIcallsforregisteringinterest.Thisway,theclientreceivesalleventsforthekeystowhichithasregisteredinterest.ThisappliestoJava-basedclientsaswellasnon-Javaclients.

©CopyrightPivotalSoftwareInc,2013-2020 38 10.1

Page 39: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

RegionAttributesRegionattributesgoverntheautomatedmanagementofaregionanditsentries.

Regionattributesettingsdeterminewherethedataresides,howtheregionismanagedinmemory,andtheautomaticloading,distribution,andexpirationofregionentries.

SpecifyingRegionAttributesSpecifyregionattributesbeforecreatingtheregion.YoucandothiseitherthroughtheAPIorthroughthedeclarativeXMLfile.TheAPIincludesclassesfordefiningaregion’sattributesbeforecreationandformodifyingsomeattributesaftercreation.Fordetails,seetheAPIfor RegionShortcut , RegionAttributes ,RegionAttributesFactory ,and AttributesMutator .

RegionShortcutsVMwareGemFire®providespredefined,shortcutregionattributessettingsforyourusein RegionShortcut .Theshortcutsare:

PROXY

doesnotstoredataintheclientcache,butconnectstheregiontotheservers.

CACHING_PROXY

storesdataintheclientcacheandconnectstheregiontotheservers.

CACHING_PROXY_ENTRY_LRU

storesdataintheclientcacheandconnectstheregiontotheservers.Limitstheamountofdatastoredlocallyintheclienttoadefaultlimitof100,000entriesbyejectingtheleastrecentlyused(LRU)entries.

LOCAL

storesdataintheclientcacheanddoesnotconnecttheregiontotheservers.Thisisaclient-side-onlyregion.

LOCAL_ENTRY_LRU

©CopyrightPivotalSoftwareInc,2013-2020 39 10.1

Page 40: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

storesdataintheclientcacheanddoesnotconnecttheregiontotheservers.Thisisaclient-side-onlyregion.Limitstheamountofdatastoredlocallyintheclienttoadefaultlimitof100,000entriesbyejectingtheleastrecentlyused(LRU)entries.

©CopyrightPivotalSoftwareInc,2013-2020 40 10.1

Page 41: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

SerializingDataDatainyourclientapplication’sVMwareGemFire®cachemustbeserializabletobesharedwithVMwareGemFire®serversandotherVMwareGemFire®clients.VMwareGemFire®providesmultipledataserializationoptionsforstorageandtransmittalbetweenprocesses,ofwhichVMwareGemFire®PortableDataeXchange(PDX)serialization)offersthebestcombinationofversatilityandease-of-useformostapplications.

Tolearnmoreaboutotherserializationoptions,seetheDataSerializationsectionintheVMwareGemFire®UserGuide .

©CopyrightPivotalSoftwareInc,2013-2020 41 10.1

Page 42: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

VMwareGemFire®PDXSerializationInthistopic

PortabilityofPDXSerializableObjects

ReducedDeserializationofSerializedObjects

DeltaPropagationwithPDXSerialization

PDXSerializationDetails

VMwareGemFire®’sPortableDataeXchange(PDX)isacross-languagedataformatthatcanreducethecostofdistributingandserializingyourobjects.

VMwareGemFire®C++PDXserialization:

IsinteroperablewithotherlanguagesbyVMwareGemFire®–noneedtoprogramaJava-sideimplementation

Reducesdeserializationoverheadbyprovidingdirectfieldaccessonserversofserializeddata,withoutfulldeserialization.Storesdatainnamedfieldsthatyoucanaccessindividually,toavoidthecostofdeserializingtheentiredataobject

WorkswithVMwareGemFire®deltapropagation

Forgreatercontrol,youcanspecifyindividualtreatmentfordomainobjectsusingthe PdxSerializableinterface.

PortabilityofPDXSerializableObjectsWhenyoucreatea PdxSerializable object,VMwareGemFire®storestheobject’stypeinformationinacentralregistry.Theinformationispassedbetweenpeers,betweenclientsandservers,andbetweendistributedsystems.

WhenusingPDXserialization,clientsautomaticallypassregistryinformationtoserverswhentheystoreaPdxSerializable object.Clientscanrunqueriesandfunctionsagainstthedataintheserverswithouttheserversneedingtoknowanythingaboutthestoredobjects.Oneclientcanstoredataontheservertoberetrievedbyanotherclient,withtheserverneverneedingtoknowtheobjecttype.ThismeansyoucancodeyourC++clientstomanagedatausingJavaserverswithouthavingtocreateJavaimplementationsofyourC++domainobjects.

©CopyrightPivotalSoftwareInc,2013-2020 42 10.1

Page 43: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

ReducedDeserializationofSerializedObjectsTheaccessmethodsfor PdxSerializable objectsallowyoutoexaminespecificfieldsofyourdomainobjectwithoutdeserializingtheentireobject.Thiscanreducedeserializationcostssignificantly.ClientC++appscanrunqueriesandexecutefunctionsagainsttheobjectsintheservercacheswithoutdeserializingtheentireobjectontheserverside.ThequeryengineautomaticallyrecognizesPDXobjectsandusesonlythefieldsitneeds.

ClientscanexecuteJavafunctionsonserverdatathatonlyaccesspartsofthedomainobjectsbyusingPdxInstance.

Likewise,peerscanaccessjustthefieldsneededfromtheserializedobject,keepingtheobjectstoredinthecacheinserializedform.

DeltaPropagationwithPDXSerializationYoucanuseVMwareGemFire®deltapropagationwithPDXserialization.

PDXSerializationDetailsSeethefollowingsectionsfordetailsonimplementingPDXserialization:

UsingthePdxSerializableAbstractClass

PdxSerializableExample

©CopyrightPivotalSoftwareInc,2013-2020 43 10.1

Page 44: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

UsingthePdxSerializableAbstractClassWhenyouwriteobjectsusingPDXserialization,theyaredistributedtotheservertierinPDXserializedform.Domainclassesneedtoinheritthe PdxSerializable abstractclasstoserializeandde-serializetheobject.

Whenyourunqueriesagainsttheobjectsontheservers,onlythefieldsyouspecifyaredeserialized.Adomainclassshouldserializeandde-serializeallitsmemberfieldsinthesameorderinits toData andfromData functions.

UsethisproceduretoprogramyourdomainobjectforPDXserializationusingthe PdxSerializable abstractclass.

1. Inyourdomainclass,implement PdxSerializable .Forexample:

classOrder:publicPdxSerializable{

2. Programthe toData functiontoserializeyourobjectasrequiredbyyourapplication.(SeemarkIdentityField inalaterstepforanoptimizationthatyoucanapplytothiscodesample.)

voidOrder::toData(PdxWriter&pdxWriter)const{pdxWriter.writeInt(ORDER_ID_KEY_,order_id_);pdxWriter.writeString(NAME_KEY_,name_);pdxWriter.writeShort(QUANTITY_KEY_,quantity_);}

IfyoualsousePDXserializationinJavaor.NETfortheobject,serializetheobjectinthesamewayforeachlanguage.Serializethesamefieldsinthesameorderandmarkthesameidentityfields.

3. Programthe fromData functiontoreadyourdatafieldsfromtheserializedformintotheobject’sfields.

voidOrder::fromData(PdxReader&pdxReader){order_id_=pdxReader.readInt(ORDER_ID_KEY_);name_=pdxReader.readString(NAME_KEY_);quantity_=pdxReader.readShort(QUANTITY_KEY_);}

Inyour fromData implementation,usethesamenameasyoudidin toData andcallthereadoperationsinthesameorderasyoucalledthewriteoperationsinyour toData implementation.

©CopyrightPivotalSoftwareInc,2013-2020 44 10.1

Page 45: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

4. Optionally,programyourdomainobject’s hashCode andequalityfunctions.Whenyoudoso,youcanoptimizethosefunctionsbyspecifyingtheidentityfieldstobeusedincomparisons.

Markedidentityfieldsareusedtogeneratethe hashCode andequalityfunctionsofPdxInstance,sotheidentityfieldsshouldthemselveseitherbeprimitives,orimplementhashCode and equals .The markIdentityField functionindicatesthatthegivenfieldnameshouldbeincludedinhashCode andequalitychecksofthisobjectonaserver.Invokethe markIdentityField functiondirectlyaftertheidentityfield’s write* function.Ifnofieldsaresetasidentityfields,thenallfieldswillbeusedin hashCode andequalitychecks,somarkingidentityfieldsimprovestheefficiencyofhashingandequalityoperations.Itisimportantthatthefieldsusedbyyourequalityfunctionand hashCode implementationsarethesamefieldsthatyoumarkasidentityfields.

Thiscodesampleexpandsthesamplefromthedescriptionofthe toData function,above,toillustratetheuseof markIdentityField :

voidOrder::toData(PdxWriter&pdxWriter)const{pdxWriter.writeInt(ORDER_ID_KEY_,order_id_);pdxWriter.markIdentityField(ORDER_ID_KEY_);

pdxWriter.writeString(NAME_KEY_,name_);pdxWriter.markIdentityField(NAME_KEY_);

pdxWriter.writeShort(QUANTITY_KEY_,quantity_);pdxWriter.markIdentityField(QUANTITY_KEY_);}

©CopyrightPivotalSoftwareInc,2013-2020 45 10.1

Page 46: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

PdxSerializableExampleThenativeclientreleasecontainsanexampleshowinghowaclientapplicationcanregisterforserializationofcustomobjectsusingtheC++PdxSerializableabstractclass.

Theexampleislocatedin examples/cpp/pdxserializable .

Theexampledefinestheserializableclass, Orders ,includingitsserializationanddeserializationmethodsanditsfactorymethod.Oncethesepiecesareinplace,executionissimple:themainroutineoftheexampleregisterstheserializableclassthenperformssomeputandgetoperations.

Execution

Theexampleperformsasequenceofoperations,displayingsimplelogentriesastheyrun.

Toruntheexample,followtheinstructionsintheREADME.mdfileintheexampledirectory.

Reviewthesourcecodeintheexampledirectorytoseeexactlyhowitoperates.

Beginbyrunningascriptthatsetsuptheserver-sideenvironmentbyinvoking gfsh commandstocreatearegion,alocator,andaserver.

Runtheexampleclientapplication,whichperformsthefollowingsteps:

ConnectstotheserverRegistersthePdxSerializableclassCreatesordersStoresordersRetrievesorders

C++Example

ThissectioncontainscodesnippetsshowinghighlightsoftheC++PdxSerialiableexample.Theyarenotintendedforcut-and-pasteexecution.Forthecompletesource,seetheexamplesourcedirectory.

TheC++exampledefinesaPdxSerializableclasscalled Order thatinheritsfromthe PdxSerializableabstractclass.An Order objectcontainsthreefields:

©CopyrightPivotalSoftwareInc,2013-2020 46 10.1

Page 47: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

aninteger order_id

astring name

ashort-int quantity

FromOrder.hpp:

classOrder:publicPdxSerializable{public:...

private:int32_torder_id_;std::stringname_;int16_tquantity_;};

Usingthe PdxSerializable readandwritemethods,the Order classdefines fromData() and toData()methodsthatperformthedeserializationandserializationoperations,respectively,andthecreateDeserializable() factorymethod:

FromOrder.cpp:

voidOrder::fromData(PdxReader&pdxReader){order_id_=pdxReader.readInt(ORDER_ID_KEY_);name_=pdxReader.readString(NAME_KEY_);quantity_=pdxReader.readShort(QUANTITY_KEY_);}

voidOrder::toData(PdxWriter&pdxWriter)const{pdxWriter.writeInt(ORDER_ID_KEY_,order_id_);pdxWriter.markIdentityField(ORDER_ID_KEY_);

pdxWriter.writeString(NAME_KEY_,name_);pdxWriter.markIdentityField(NAME_KEY_);

pdxWriter.writeShort(QUANTITY_KEY_,quantity_);pdxWriter.markIdentityField(QUANTITY_KEY_);}

...

std::shared_ptr<PdxSerializable>Order::createDeserializable(){returnstd::make_shared<Order>();}

©CopyrightPivotalSoftwareInc,2013-2020 47 10.1

Page 48: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

TheC++examplemainlinecreatesacache,thenusesittocreateaconnectionpoolandaregionobject(ofclass Region ).

autocacheFactory=CacheFactory();cacheFactory.set("log-level","none");autocache=cacheFactory.create();autopoolFactory=cache.getPoolManager().createFactory();

poolFactory.addLocator("localhost",10334);autopool=poolFactory.create("pool");autoregionFactory=cache.createRegionFactory(RegionShortcut::PROXY);autoregion=regionFactory.setPoolName("pool").create("custom_orders");

TheclientregistersthePdxSerializableclassthatwascreatedinOrders.cpp:

cache.getTypeRegistry().registerPdxType(Order::createDeserializable);

Theclienttheninstantiatesandstorestwo Order objects:

autoorder1=std::make_shared<Order>(1,"productx",23);autoorder2=std::make_shared<Order>(2,"producty",37);

region->put("Customer1",order1);region->put("Customer2",order2);

Next,theapplicationretrievesthestoredvalues,inonecaseextractingthefieldsdefinedintheserializationcode:

if(autoorder1retrieved=std::dynamic_pointer_cast<Order>(region->get("Customer1"))){std::cout<<"OrderID:"<<order1retrieved->getOrderId()<<std::endl;std::cout<<"ProductName:"<<order1retrieved->getName()<<std::endl;std::cout<<"Quantity:"<<order1retrieved->getQuantity()<<std::endl;}else{std::cout<<"Order1notfound."<<std::endl;}

Theapplicationretrievesthesecondobjectanddisplaysitwithoutextractingtheseparatefields:

©CopyrightPivotalSoftwareInc,2013-2020 48 10.1

Page 49: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

if(region->existsValue("rtimmons")){std::cout<<"rtimmons'sinfonotdeleted"<<std::endl;}else{std::cout<<"rtimmons'sinfosuccessfullydeleted"<<std::endl;}

Finally,theapplicationclosesthecache:

cache.close();

©CopyrightPivotalSoftwareInc,2013-2020 49 10.1

Page 50: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

RemoteQueriesInthistopic

RemoteQueryBasicsQuerylanguage:OQL

CreatingIndexes

RemoteQueryAPIQuery

ExecutingaQueryfromtheClient

C++QueryExample

UsetheremotequeryAPItoqueryyourcacheddatastoredonacacheserver.

RemoteQueryBasicsQueriesareevaluatedandexecutedonthecacheserver,andtheresultsarereturnedtotheclient.Youcanoptimizeyourqueriesbydefiningindexesonthecacheserver.

Queryingandindexingoperateonlyonremotecacheservercontents.

Querylanguage:OQL

VMwareGemFire®providesaSQL-likequeryinglanguagecalledOQLthatallowsyoutoaccessdatastoredinVMwareGemFire®regions.OQLisverysimilartoSQL,butOQLallowsyoutoquerycomplexobjects,objectattributes,andmethods.

Inthecontextofaquery,specifythenameofaregionbyitsfullpath,startingwithaslash( / ).

Thequerylanguagesupportsdrillingdownintonestedobjectstructures.NesteddatacollectionscanbeexplicitlyreferencedintheFROMclauseofaquery.

Aqueryexecutionreturnsitsresultsaseithera ResultSet ora StructSet .

QuerylanguagefeaturesandgrammararedescribedintheVMwareGemFire®manualatQuerying .

CreatingIndexes

©CopyrightPivotalSoftwareInc,2013-2020 50 10.1

Page 51: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Indexescanprovidesignificantperformancegainsforqueryexecution.Youcreateandmaintainindexesonthecacheserver.Fordetailedinformationaboutworkingwithindexesconfiguredonacacheserver,seeWorkingwithIndexes intheserver’sdocumentation.

RemoteQueryAPIThissectiongivesageneraloverviewoftheinterfacesandclassesthatareprovidedbythequerypackageAPI.

Query

Youmustcreatea Query objectforeachnewquery.The Query interfaceprovidesmethodsformanagingthecompilationandexecutionofqueries,andforretrievinganexistingquerystring.

A Query isobtainedfroma QueryService ,whichisobtainedfromoneoftwosources:

Tocreatea Query thatoperatesontheVMwareGemFire®server,useapache::geode::client::Pool::getQueryService() toinstantiatea QueryService obtainedfroma Pool .

Tocreatea Query thatoperatesonyourapplication’slocalcache,useapache::geode::client::Cache::getQueryService() toinstantiatea QueryService obtainedfroma Cache .

ExecutingaQueryfromtheClient

Theessentialstepstocreateandexecuteaqueryare:

1. Createaninstanceofthe QueryService class.IfyouareusingthepoolAPI(recommended),youshouldobtainthe QueryService fromthepool.

2. Createa Query instancethatiscompatiblewiththeOQLspecification.

3. Usethe Query.execute() methodtosubmitthequerystringtothecacheserver.Theserverremotelyevaluatesthequerystringandreturnstheresultstotheclient.

4. Iteratethroughthereturnedobjects.

C++QueryExample

TheseC++codeexcerptsarefromthe examples/cpp/remotequery exampleincludedinyourclientdistribution.Seetheexampleforfullcontext.

©CopyrightPivotalSoftwareInc,2013-2020 51 10.1

Page 52: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Followingthestepslistedabove,

1. Obtaina QueryService objectfromtheconnectionpool:

std::shared_ptr<QueryService>queryService=nullptr;queryService=pool->getQueryService();

2. Createa Query objectbycalling QueryService.newQuery() ,specifyingyourOQLqueryasastringparameter:

autoquery=queryService->newQuery("SELECT*FROM/custom_ordersWHEREquantity>30");

3. Executethequery.Collectthequeryoutput,returnedaseithera ResultSet ora StructSet ,anditeratethroughtheresults:

autoqueryResults=query->execute();

for(auto&&value:*queryResults){auto&&order=std::dynamic_pointer_cast<Order>(value);std::cout<<order->toString()<<std::endl;}

©CopyrightPivotalSoftwareInc,2013-2020 52 10.1

Page 53: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

ContinuousQueriesInthistopic

ContinuousQueryBasics

TypicalContinuousQueryLifecycle

ExecutingaContinuousQueryfromtheClientC++ContinuousQueryExample

TheC++and.NETclientscaninitiatequeriesthatrunontheVMwareGemFire®cacheserverandnotifytheclientwhenthequeryresultshavechanged.Fordetailsontheserver-sidesetupforcontinuousqueries,seeHowContinuousQueryingWorks intheVMwareGemFire®UserGuide.

ContinuousQueryBasicsContinuousqueryingprovidesthefollowingfeatures:

StandardVMwareGemFire®nativeclientquerysyntaxandsemantics.Continuousqueriesareexpressedinthesamelanguageusedforothernativeclientqueries.SeeRemoteQueries.

StandardVMwareGemFire®events-basedmanagementofCQevents.TheeventhandlingusedtoprocessCQeventsisbasedonthestandardVMwareGemFire®eventhandlingframework.

Completeintegrationwiththeclient/serverarchitecture.CQfunctionalityusesexistingserver-to-clientmessagingmechanismstosendevents.Alltuningofyourserver-to-clientmessagingalsotunesthemessagingofyourCQevents.IfyoursystemisconfiguredforhighavailabilitythenyourCQsarehighlyavailable,withseamlessfailoverprovidedincaseofserverfailure(seeHighAvailabilityforClient-to-ServerCommunication ).Ifyourclientsaredurable,youcanalsodefineanyofyourCQsasdurable(seeDurableClientMessaging ).

Interestcriteriabasedondatavalues.Continuousqueriesarerunagainsttheregion’sentryvalues.ComparethistoregisterinterestbyreviewingRegisteringInterestforEntries.

Activequeryexecution.Onceinitialized,thequeriesoperateonnewevents.Eventsthatchangethequeryresultaresenttotheclientimmediately.

TypicalContinuousQueryLifecycle1. TheclientcreatestheCQ.Thissetsupeverythingforrunningthequeryandprovidestheclientwith

a CqQuery object,butdoesnotexecutetheCQ.Atthispoint,thequeryisina STOPPED state,

©CopyrightPivotalSoftwareInc,2013-2020 53 10.1

Page 54: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

readytobeclosedorrun.

2. TheclientinitiatestheCQwithanAPIcalltooneofthe CqQueryexecute* methods.Thisputsthequeryintoa RUNNING stateontheclientandontheserver.Theserverremotelyevaluatesthequerystring,andoptionallyreturnstheresultstotheclient. CqQueryexecute* methodsinclude:

CqQuery.execute()

CqQuery.executeWithInitialResults()

3. ACQListenerwaitsforevents.Whenitreceivesevents,ittakesactionaccordinglywiththedataintheCqEvent.

4. TheCQisclosedbyaclientcallto CqQuery.close .Thisde-allocatesallresourcesinusefortheCQontheclientandserver.Atthispoint,thecyclecouldbeginagainwiththecreationofanew CqQuery

instance.

ExecutingaContinuousQueryfromtheClientTheessentialstepstocreateandexecuteacontinuousqueryare:

1. Createaninstanceofthe QueryService class.IfyouareusingthepoolAPI(recommended),youshouldobtainthe QueryService fromthepool.

2. DefineaCQListener(a CqListener )tofieldeventssentfromtheserver.

3. Useoneofthe CqQuery execute* methodstosubmitthequerystringtothecacheserver.

4. Theserverremotelyevaluatesthequerystring,thenmonitorsthoseresultsandnotifiestheclientiftheychange.

5. Theclientlistensforchangesthatmatchthequerypredicate.

6. Iteratethroughthereturnedobjects.

7. Whenfinished,closedownthecontinuousquery.

C++ContinuousQueryExample

TheseC++codeexcerptsarefromthe examples/cpp/continuousquery exampleincludedinyourclientdistribution.Seetheexampleforfullcontext.

©CopyrightPivotalSoftwareInc,2013-2020 54 10.1

Page 55: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Followingthestepslistedabove,

1. Createaqueryservice:

autoqueryService=pool->getQueryService();

2. DefineaCqListener:

classMyCqListener:publicCqListener{

3. CreateaninstanceofyourCqListenerandinsertitintoaCQattributesobject:

CqAttributesFactorycqFactory;

autocqListener=std::make_shared<MyCqListener>();

cqFactory.addCqListener(cqListener);autocqAttributes=cqFactory.create();

4. CreateaContinuousQueryusingthequeryserviceandtheCQattributes:

autoquery=queryService->newCq("MyCq","SELECT*FROM/custom_orderscWHEREc.quantity>30",cqAttributes);

5. Executethequery:

query->execute();

6. Waitforeventsanddosomethingwiththem.

©CopyrightPivotalSoftwareInc,2013-2020 55 10.1

Page 56: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

/*ExcerptfromtheCqListener*/

/*DetermineOperationType*/switch(cqEvent.getQueryOperation()){caseCqOperation::OP_TYPE_CREATE:opStr="CREATE";break;caseCqOperation::OP_TYPE_UPDATE:opStr="UPDATE";break;caseCqOperation::OP_TYPE_DESTROY:opStr="DESTROY";break;default:break;}

...

/*TakeactionbasedonOPType*/

7. Whenfinished,closeupshop.

query->execute();

...(respondtoeventsastheyarrive)

query->stop();query->close();

cache.close();

©CopyrightPivotalSoftwareInc,2013-2020 56 10.1

Page 57: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Security:AuthenticationandEncryptionMostsecurityconfigurationtakesplaceontheVMwareGemFire®server.Theserver’ssecurityframeworkauthenticatesclientsastheyconnecttoacacheserverandauthorizesclientcacheoperationsusingdeveloper-providedimplementationsforauthenticationandauthorization.

Foranexplanationoftheserver-sideimplementationofsecurityfeatures,seeSecurity intheVMwareGemFire®UserGuide.

ANativeClientapplicationmustaddresstwosecurityconcernswhenconnectingtoaVMwareGemFire®server:

AuthenticationTheClientmustsubmititsauthenticationcredentialstotheserverusingthedeveloper-providedauthenticationimplementationexpectedbytheserver.

TLS/SSLClient/ServerCommunicationEncryptionCommunicationbetweenclientandservershouldbeencryptedsoauthenticationcredentialsandothertransmissionscannotbeviewedbythird-parties.

©CopyrightPivotalSoftwareInc,2013-2020 57 10.1

Page 58: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

AuthenticationAclientisauthenticatedwhenitconnectswithvalidcredentialstoaVMwareGemFire®cacheserverthatisconfiguredwiththeclientauthenticationcallback.Fordetailsontheserver’sroleinauthenticationandwhatitexpectsfromtheclient,seeImplementingAuthentication intheVMwareGemFire®UserGuide.

Inyourapplication,authenticationcredentialsmustbesetwhencreatingthecache.Inpractice,thismeanssettingtheauthenticationcredentialswhenyoucreatetheCacheFactory.

C++AuthenticationExample

InthisC++authenticationexample,the CacheFactory creationprocesssetstheauthenticationcallback:

autocacheFactory=CacheFactory(config);autoauthInitialize=std::make_shared<UserPasswordAuthInit>();cacheFactory.set("log-level","none");cacheFactory.setAuthInitialize(authInitialize);

Credentialsareimplementedinthe getCredentials memberfunctionofthe AuthInitialize abstractclass.

©CopyrightPivotalSoftwareInc,2013-2020 58 10.1

Page 59: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

classUserPasswordAuthInit:publicAuthInitialize{public:UserPasswordAuthInit()=default;

~UserPasswordAuthInit()noexceptoverride=default;

std::shared_ptr<Properties>getCredentials(conststd::shared_ptr<Properties>&securityprops,conststd::string&)override{std::shared_ptr<Cacheable>userName;if(securityprops==nullptr||(userName=securityprops->find(SECURITY_USERNAME))==nullptr){throwAuthenticationFailedException("UserPasswordAuthInit:username""property[SECURITY_USERNAME]notset.");}

autocredentials=Properties::create();credentials->insert(SECURITY_USERNAME,userName->toString().c_str());autopasswd=securityprops->find(SECURITY_PASSWORD);if(passwd==nullptr){passwd=CacheableString::create("");}credentials->insert(SECURITY_PASSWORD,passwd->value().c_str());returncredentials;}

voidclose()override{return;}};

©CopyrightPivotalSoftwareInc,2013-2020 59 10.1

Page 60: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

TLS/SSLClient-ServerCommunicationEncryptionThissectiondescribeshowtoimplementTLS-basedcommunicationbetweenyourclientsandserversusingtheOpenSSLencryptionutility.WhenconfiguringTLS/SSLsecurityforyourclient,youmayfindithelpfultorefertoTheSSLsectionoftheVMwareGemFire®UserGuide .

SetUpOpenSSL

Theopen-sourceOpenSSLtoolkitprovidesafull-strengthgeneralpurposecryptographylibraryforencryptingclient-servercommunications.

DownloadandinstallOpenSSL1.1.1foryourspecificoperatingsystem.

NotesforWindowsusers:

ForWindowsplatforms,youcanuseeithertheregularorthe“Light”versionofSSL.

Usea64-bitimplementationofOpenSSL.

IfyouuseCygwin,donotusetheOpenSSLlibrarythatcomeswithCygwin,whichisbuiltwithcygwin.dll asadependency.Instead,downloadafreshcopyfromOpenSSL.

FormanyWindowsapplications,themostconvenientwaytoinstallOpenSSListouse choco (seechocolatey.org )toinstallthe“Light”versionofOpenSSL.

Step1.CreatekeystoresTheVMwareGemFire®serverrequireskeysandkeystoresintheJavaKeyStore(JKS)formatwhilethenativeclientrequiresthemintheclearPEMformat.Thusyouneedtobeabletogenerateprivate/publickeypairsineitherformatandconvertbetweenthetwousingthe keytool utilityandthe opensslcommand.

Step2.EnableSSLontheserverandontheclient1. Ontheserver,enableSSLforthe locator and server components,astheSSL-enabledclientmust

beabletocommunicatewithbothlocatorandservercomponents.

2. Ontheclient,set ssl-enabled to true .

3. Ontheclient,set ssl-keystore and ssl-truststore topointtoyourkeystorefiles.Pathstothekeystoreandtruststorearelocaltotheclient.SeeSecurity-RelatedSystemProperties foradescriptionof

©CopyrightPivotalSoftwareInc,2013-2020 60 10.1

Page 61: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

theseproperties.

StartingandstoppingtheclientandserverwithSSLinplace

Beforeyoustartandstoptheclientandserver,makesureyouconfigurethenativeclientwiththeSSLpropertiesasdescribedandwiththeserversorlocatorsspecifiedasusual.

Specifically,ensurethat:

TheOpenSSLandVMwareGemFire®DLLsareintherightenvironmentvariablesforyoursystem:PATH forWindows,and LD_LIBRARY_PATH forUnix.

Youhavegeneratedthekeysandkeystores.

Youhavesetthesystemproperties.

FordetailsonstoppingandstartinglocatorsandcacheserverswithSSL,seeStartingUpandShuttingDownYourSystem .

TheVMwareGemFire®Native’slibcryptoImplfoundin/libmustbelinkedatcompiletime.ThisbinaryisusedtointeractwithOpenSSL.LinklibcryptoImpl,nativeclient,andyourapplicationcode.Wehighlyrecommendusingcmake.

Examplelocatorstartcommand

EnsurethatallrequiredSSLpropertiesareconfiguredinyourserver’s geode.properties file.Thenstartyourlocatorasfollows:

gfsh>startlocator--name=my_locator--port=12345--dir=.\--security-properties-file=/path/to/your/geode.properties

Examplelocatorstopcommand

gfsh>stoplocator--port=12345\--security-properties-file=/path/to/your/geode.properties

Exampleserverstartcommand

Again,ensurethatallrequiredSSLpropertiesareconfiguredin geode.properties .Thenstarttheserverwith:

©CopyrightPivotalSoftwareInc,2013-2020 61 10.1

Page 62: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

gfsh>startserver--name=my_server--locators=hostname[12345]\--cache-xml-file=server.xml--log-level=fine\--security-properties-file=/path/to/your/geode.properties

Exampleserverstopcommand

gfsh>stopserver--name=my_server

©CopyrightPivotalSoftwareInc,2013-2020 62 10.1

Page 63: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

FunctionExecutionInthistopic

Server-sideRequirements

Client-sideRequirements

HowFunctionsExecute

ProcessingFunctionResults

FunctionExecutionExampleC++Example

Aclientcaninvokeaserver-residentfunction,withparameters,andcancollectandoperateonthereturnedresults.

Server-sideRequirementsTobecallablefromyourclient,afunctionmustbe

residentontheserver,and

registeredasavailableforclientaccess.

SeeExecutingaFunctioninVMwareGemFire® intheVMwareGemFire®UserGuidefordetailsonhowtowriteandregisterserver-residentfunctions.

Client-sideRequirementsTheclientmustconnecttotheserverthroughaconnectionpoolinordertoinvokeaserver-sidefunction.

HowFunctionsExecute1. Thecallingclientapplicationrunsthe execute methodonthe Execution object.Thefunction

mustalreadyberegisteredontheservers.

2. Thefunctionisinvokedontheserverswhereitneedstorun.TheserversaredeterminedbytheFunctionService on* methodcalls,regionconfiguration,andanyfilters.

3. Ifthefunctionhasresults,theresultisreturnedina ResultCollector object.

©CopyrightPivotalSoftwareInc,2013-2020 63 10.1

Page 64: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

4. Theclientcollectsresultsusingthe ResultCollector.getResult() method.

Ineveryclientwhereyouwanttoexecutethefunctionandprocesstheresults:

Useoneofthe FunctionService on* methodstocreatean Execution object.The on* methods,onRegion , onServer and onServers ,definethehighestlevelwherethefunctionisrun.

Ifyouuse onRegion youcanfurthernarrowyourrunscopebysettingkeyfilters.

Afunctionrunusing onRegion isadatadependentfunction–othersaredata-independentfunctions.

Youcanrunadatadependentfunctionagainstpartitionedandcolocatedpartitionedregions.Fromtheclient,providetheappropriatekeysetstothefunctioncall.

The Execution objectallowsyoutocustomizetheinvocationby:

Providingasetofdatakeysto withFilter tonarrowtheexecutionscope.ThisworksonlyforonRegion Executionobjects(data-dependentfunctions).Providingfunctionargumentsto withArgs .Definingacustom ResultCollector for withCollector .

Callthe Execution.execute() methodtorunthefunction.

ProcessingFunctionResultsTogettheresultsfromthefunctionintheclientapp,usetheresultcollectorreturnedfromthefunctionexecution.The getResult methodsofthedefaultresultcollectorblockuntilallresultsarereceived,thenreturnthefullresultset.

Theclientcanusethedefaultresultcollector.Iftheclientneedsspecialresultshandling,codeacustomResultsCollector implementationtoreplacethedefault.Usethe Execution::withCollector methodtospecifythecustomcollector.Tohandletheresultsinacustommanner:

1. Writeaclassthatimplementsthe ResultCollector interfacetohandletheresultsinacustommanner.Themethodsareoftwotypes:onehandlesdataandinformationfromVMwareGemFire®andpopulatestheresultsset,whiletheotherreturnsthecompiledresultstothecallingapplication:

addResult iscalledwhenresultsarrivefromthe Function methods.Use addResult toaddasingleresulttotheResultCollector.endResults iscalledtosignaltheendofallresultsfromthefunctionexecution.getResult isavailabletoyourexecutingapplication(theonethatcallsExecution.execute )toretrievetheresults.Thismayblockuntilallresultsareavailable.clearResults iscalledtoclearpartialresultsfromtheresultscollector.Thisisusedonlyfor

©CopyrightPivotalSoftwareInc,2013-2020 64 10.1

Page 65: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

highlyavailable onRegion functionswherethecallingapplicationwaitsfortheresults.Ifthecallfails,beforeVMwareGemFire®retriestheexecution,itcalls clearResults toreadytheinstanceforacleansetofresults.

2. Usethe Execution objectinyourexecutingmembertocall withCollector ,passingyourcustomcollector.

FunctionExecutionExampleThenativeclientreleasecontainsexamplesoffunctionexecutionin ../examples/cpp/functionexecution .

Theexamplebeginswithaserver-sidescriptthatruns gfsh commandstocreatearegion,simplycalled“partition_region”.

ThefunctionispreloadedwithaJARfilecontainingtheserver-sideJavafunctioncode.

Thefunction,called“ExampleMultiGetFunction”,isdefinedinthe examples/utilities directoryofyourdistribution.Asitsinputparameter,thefunctiontakesanarrayofkeys,thenperformsa get oneachkeyandreturnsanarraycontainingtheresults.

Thefunctiondoesnotloadvaluesintothedatastore.Thatisaseparateoperation,performedintheseexamplesbytheclient,anddoesnotinvolvetheserver-sidefunction.

Asprerequisites,theclientcodemustbeawareoftheconnectiontotheserver,thenameofthefunction,andtheexpectedtype/formatoftheinputparameterandreturnvalue.

Theclient:

createsanexecutionobject

providestheexecutionobjectwithapopulatedinputparameterarray

invokestheobject’sexecutemethodtoinvoketheserver-sidefunction

Iftheclientexpectsresults,itmustcreatearesultobject.The.NETexampleusesabuilt-inresultcollector( IResultCollector.getResults() )toretrievethefunctionresults.

Theexamplecreatesaresultvariabletoholdtheresultsfromthecollector.

C++Example

ThissectioncontainscodesnippetsshowinghighlightsoftheC++functionexecutionexample.Theyarenotintendedforcut-and-pasteexecution.Forthecompletesource,seetheexamplesourcedirectory.

©CopyrightPivotalSoftwareInc,2013-2020 65 10.1

Page 66: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

TheC++examplecreatesacache.

CachesetupCache(){returnCacheFactory().set("log-level","none").create();}

Theexampleclientusesthecachetocreateaconnectionpool,

voidcreatePool(constCache&cache){autopool=cache.getPoolManager().createFactory().addServer("localhost",EXAMPLE_SERVER_PORT).create("pool");}

Then,usingthatpool,theclientcreatesaregionwiththesamecharacteristicsandnameastheserver-sideregion( partition_region ).

std::shared_ptr<Region>createRegion(Cache&cache){autoregionFactory=cache.createRegionFactory(RegionShortcut::PROXY);autoregion=regionFactory.setPoolName("pool").create("partition_region");

returnregion;}

Thesampleclientpopulatestheserver’sdatastorewithvalues,usingtheAPIandsomesamplekey-valuepairs.

voidpopulateRegion(conststd::shared_ptr<Region>&region){for(inti=0;i<keys.size();i++){region->put(keys[i],values[i]);}}

Asconfirmationthatthedatahasbeenstored,thesampleclientusestheAPItoretrievethevaluesandwritethemtotheconsole.Thisisdonewithoutreferencetotheserver-sideexamplefunction.

©CopyrightPivotalSoftwareInc,2013-2020 66 10.1

Page 67: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

std::shared_ptr<CacheableVector>populateArguments(){autoarguments=CacheableVector::create();for(inti=0;i<keys.size();i++){arguments->push_back(CacheableKey::create(keys[i]));}returnarguments;}

Next,theclientretrievesthosesamevaluesusingtheserver-sideexamplefunction.Theclientcodecreatestheinputparameter,anarrayofkeyswhosevaluesaretoberetrieved.

std::vector<std::string>executeFunctionOnServer(conststd::shared_ptr<Region>region,conststd::shared_ptr<CacheableVector>arguments){std::vector<std::string>resultList;

Theclientcreatesanexecutionobjectusing Client.FunctionService.OnRegion andspecifyingtheregion.

autofunctionService=FunctionService::onServer(region->getRegionService());

Theclientthencallstheserversidefunctionwithitsinputargumentsandstorestheresultsinavector.

if(autoexecuteFunctionResult=functionService.withArgs(arguments).execute(getFuncIName)->getResult()){for(auto&arrayList:*executeFunctionResult){for(auto&cachedString:*std::dynamic_pointer_cast<CacheableArrayList>(arrayList)){resultList.push_back(std::dynamic_pointer_cast<CacheableString>(cachedString)->value());}}}else{std::cout<<"getexecuteFunctionResultisNULL\n";}

returnresultList;}

Itthenloopsthroughtheresultsvectorandprintstheretrievedvalues.

voidprintResults(conststd::vector<std::string>&resultList){std::cout<<"Resultcount="<<resultList.size()<<std::endl<<std::endl;inti=0;for(auto&cachedString:resultList){std::cout<<"\tResult["<<i<<"]="<<cachedString<<std::endl;++i;}

©CopyrightPivotalSoftwareInc,2013-2020 67 10.1

Page 68: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

©CopyrightPivotalSoftwareInc,2013-2020 68 10.1

Page 69: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

TransactionsInthistopic

NativeClientTransactionAPIs

RunningNativeClientTransactions

ClientTransactionExamplesC++Example

TheNativeClientAPIrunstransactionsontheserverasiftheywerelocaltotheclientapplication.Thus,thekeytorunningclienttransactionsliesinmakingsuretheserverisproperlyconfiguredandprogrammed.ForcompleteinformationabouthowtransactionsareconductedontheVMwareGemFire®server,seetheTransactionssectionoftheVMwareGemFire®UserGuide .

NativeClientTransactionAPIsTheAPIfordistributedtransactionshasthefamiliarrelationaldatabasemethods, begin , commit ,androllback .TherearealsoAPIsavailabletosuspendandresumetransactions.

TheC++classesforexecutingtransactionsare:

apache.geode.client.CacheTransactionManager

apache.geode.client.TransactionId

RunningNativeClientTransactionsThesyntaxforwritingclienttransactionsisthesameaswithserverorpeertransactions,butwhenaclientperformsatransaction,thetransactionisdelegatedtoaserverthatbrokersthetransaction.

Starteachtransactionwitha begin operation,andendthetransactionwitha commit ora rollback .

Tomaintaincacheconsistency,thelocalclientcacheisnotusedduringatransaction.Whenthetransactioncompletesorissuspended,localcacheusageisreinstated.

Ifthetransactionrunsonserverregionsthatareamixofpartitionedandreplicatedregions,performthefirsttransactionoperationonapartitionedregion.Thissetstheserverdatahostfortheentiretransaction.IfyouareusingPRsingle-hop,single-hopwillbeappliedasusualtothisfirstoperation.

©CopyrightPivotalSoftwareInc,2013-2020 69 10.1

Page 70: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Inadditiontothefailureconditionscommontoalltransactions,clienttransactionscanalsofailifthetransactiondelegatefails.Ifthedelegateperformingthetransactionfails,thetransactioncodethrowsaTransactionException .

ClientTransactionExamplesThenativeclientreleasecontainsatransactionexamplein ../examples/cpp/transaction .

Theexampleperformsasequenceofoperations,displayingsimplelogentriesastheyrun.

Torunanexample,followtheinstructionsinthe README.md fileintheexampledirectory.

Reviewthesourcecodeintheexampledirectorytoseeexactlyhowitoperates.

Youbeginbyrunningascriptthatsetsuptheserver-sideenvironmentbyinvoking gfsh commandstocreatearegion,simplycalled“exampleRegion.”

Youruntheexampleclientapplication,whichperformsthefollowingsteps:

ConnectstotheserverBeginsatransactionPerformssome put operationsCommitsthetransaction

Forthisexample,thetransactioncodehasthesecharacteristics:

Tointroducethepossibilityoffailure,valuesarerandomizedfrom0to9,andthe0valuesaretreatedasunsuccessful.Thetransactionisretrieduntilitsucceeds.Incasethetransactionrepeatedlyfails,theretryloopusesacountertosetalimitof5retries.

C++Example

ThissectioncontainscodesnippetsshowinghighlightsoftheC++transactionexample.Theyarenotintendedforcut-and-pasteexecution.Forthecompletesource,seetheexamplesourcedirectory.

TheC++examplecreatesacache,thenusesittocreateaconnectionpool.

autocache=CacheFactory().set("log-level","none").create();autopoolFactory=cache.getPoolManager().createFactory();

poolFactory.addLocator("localhost",10334);autopool=poolFactory.create("pool");autoregionFactory=cache.createRegionFactory(RegionShortcut::PROXY);autoregion=regionFactory.setPoolName("pool").create("exampleRegion");

©CopyrightPivotalSoftwareInc,2013-2020 70 10.1

Page 71: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Theexampleapplicationgetsatransactionmanagerfromthecacheandbeginsatransaction.

autotransactionManager=cache.getCacheTransactionManager();

transactionManager->begin();

Withinthetransaction,theclientpopulatesdatastorewith10valuesassociatedwithKey1-Key10.

for(auto&key:keys){autovalue=getValueFromExternalSystem();region->put(key,value);}

Ifall put operationssucceed,theapplicationcommitsthetransaction.Otherwise,itretriesupto5timesifnecessary.

autoretries=5;while(retries--){try{transactionManager->begin();...//PUTOPERATIONS...transactionManager->commit();std::cout<<"Committedtransaction-exiting"<<std::endl;break;}catch(...){transactionManager->rollback();std::cout<<"Rolledbacktransaction-retrying("<<retries<<")"<<std::endl;}}

©CopyrightPivotalSoftwareInc,2013-2020 71 10.1

Page 72: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

SystemPropertiesAvarietyofsystempropertiescanbespecifiedwhenaclientconnectstoadistributedsystem,eitherprogrammaticallyorina geode.properties file.See apache::geode::client::SystemProperties intheC++APIdocs

.

Thefollowingsettingscanbeconfigured:

GeneralPropertiesBasicinformationfortheprocess,suchascachecreationparameters.

LoggingPropertiesHowandwheretologsystemmessages.

StatisticsArchivingPropertiesHowtocollectandarchivestatisticsinformation.

DurableClientPropertiesInformationaboutthedurableclientsconnectedtothesystem.

SystemPropertiesforClientAuthenticationandAuthorizationInformationaboutvarioussecurityparameters.

SystemPropertiesforHighAvailabilitySystempropertiestoconfigureperiodicacknowledgment(ack).

Thefollowingtableslistattributesthatcanbespecifiedprogrammaticallyorstoredinthe geode.propertiesfiletobereadbyaclient.

GeneralProperties

cache-xml-file

Nameandpathofthefilewhosecontentsareusedbydefaulttoconfigureacacheifoneiscreated.Ifnotspecified,theclientstartswithanemptycache,whichispopulatedatruntime.

nodefault

heap-lru-delta

Thepercentageofentriesthesystemwillevicteachtimeitdetectsthatithasexceededtheheap-lru-limit.Thispropertyisusedonlyifheap-lru-limit isgreaterthan0.

10%

heap-lru-limit

Maximumamountofmemory,inmegabytes,usedbythecacheforallregions.Ifthislimitisexceededby heap-lru-delta percent,LRUreducesthememoryfootprintasnecessary.Ifnotspecified,orsetto0,memoryusageisgovernedbyeachregion’sLRUentrieslimit,ifany.

0

©CopyrightPivotalSoftwareInc,2013-2020 72 10.1

Page 73: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

conflate-events

Clientsideconflationsetting,whichissenttotheserver. server

connect-timeout

Amountoftime(inseconds)towaitforaresponseafterasocketconnectionattempt.

59

connection-pool-size

Numberofconnectionsperendpoint 5

enable-chunk-handler-thread

Ifthechunk-handler-threadisoperative(enable-chunk-handler=true),itprocessestheresponseforeachapplicationthread.Whenthechunkhandlerisnotoperative(enable-chunk-handler=false),eachapplicationthreadprocessesitsownresponse.

false

disable-shuffling-of-endpoints

Iftrue,preventsserverendpointsthatareconfiguredinpoolsfrombeingshuffledbeforeuse.

false

max-fe-threads

Threadpoolsizeforparallelfunctionexecution.AnexampleofthisistheGetAlloperations.

2*numberoflogicalprocessors

max-socket-buffer-size

Maximumsizeofthesocketbuffers,inbytes,thattheclientwilltrytosetforclient-serverconnections.

65*1024

notify-ack-interval

Interval,inseconds,inwhichclientsendsacknowledgmentsforsubscriptionnotifications.

1

notify-dupcheck-life

Amountoftime,inseconds,theclienttrackssubscriptionnotificationsbeforedroppingtheduplicates.

300

ping-interval

Interval,inseconds,betweencommunicationattemptswiththeservertoshowtheclientisalive.Pingsareonlysentwhenthe ping-intervalelapsesbetweennormalclientmessages.Thismustbesetlowerthantheserver’s maximum-time-between-pings .

10

redundancy-monitor-interval

Interval,inseconds,atwhichthesubscriptionHAmaintenancethreadchecksfortheconfiguredredundancyofsubscriptionservers.

10

tombstone-timeout

Timeinmillisecondsusedtotimeouttombstoneentrieswhenregionconsistencycheckingisenabled.

480000

LoggingProperties

log-

©CopyrightPivotalSoftwareInc,2013-2020 73 10.1

Page 74: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

disk-space-limit

Maximumamountofdiskspace,inmegabytes,allowedforalllogfiles,current,androlled.Ifsetto0,thespaceisunlimited.

0

log-fileNameandfullpathofthefilewherearunningclientwriteslogmessages.Ifnotspecified,logginggoesto stdout .

nodefaultfile

log-file-size-limit

Maximumsize,inmegabytes,ofasinglelogfile.Oncethislimitisexceeded,anewlogfileiscreatedandthecurrentlogfilebecomesinactive.Ifsetto0,thefilesizeisunlimited.

0

log-level

Controlsthetypesofmessagesthatarewrittentotheapplication’slog.Thesearethelevels,indescendingorderofseverityandthetypesofmessagetheyprovide:

Error(highestseverity)isaseriousfailurethatwillprobablypreventprogramexecution.

Warningisapotentialprobleminthesystem.

Infoisaninformationalmessageofinteresttotheenduserandsystemadministrator.

Configisastaticconfigurationmessage,oftenusedtodebugproblemswithparticularconfigurations.

Fine,Finer,Finest,andDebugprovidetracinginformation.Onlyusethesewithguidancefromtechnicalsupport.

Enablingloggingatanylevelenablesloggingforallhigherlevels.

config

StatisticsArchivingProperties

statistic-sampling-enabled

Controlswhethertheprocesscreatesastatisticarchivefile. true

statistic-archive-file

Nameandfullpathofthefilewherearunningsystemmemberwritesarchivesstatistics.If archive-disk-space-limit isnotset,theclientappendstheprocessIDtotheconfiguredfilename,likestatArchive-PID.gfs .Ifthespacelimitisset,theprocessIDisnotappendedbuteachrolledfilenameisrenamedtostatArchive-ID.gfs,whereIDistherollednumberofthefile.

./statArchive.gfs

archive-disk- Maximumamountofdiskspace,ingigabytes,allowedforallarchive

©CopyrightPivotalSoftwareInc,2013-2020 74 10.1

Page 75: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

space-limit

files,current,androlled.Ifsetto0,thespaceisunlimited. 0

archive-file-size-limit

Maximumsize,inmegabytes,ofasinglestatisticarchivefile.Oncethislimitisexceeded,anewstatisticarchivefileiscreatedandthecurrentarchivefilebecomesinactive.Ifsetto0,thefilesizeisunlimited.

0

statistic-sample-rate

Rate,inseconds,thatstatisticsaresampled.Operatingsystemstatisticsareupdatedonlywhenasampleistaken.Ifstatisticarchivalisenabled,thenthesesamplesarewrittentothearchive.

Loweringthesamplerateforstatisticsreducessystemresourceusewhilestillprovidingsomestatisticsforsystemtuningandfailureanalysis.

1

enable-time-statistics

Enablestime-basedstatisticsforthedistributedsystemandcaching.Forperformancereasons,time-basedstatisticsaredisabledbydefault.SeeSystemStatistics .

false

DurableClientProperties

Attribute Description Default

auto-ready-for-events

WhetherclientsubscriptionsautomaticallyreceiveeventswhendeclarativelyconfiguredviaXML.Ifsetto false ,eventstartupisnotautomaticandyouneedtocallthe Cache.ReadyForEvents() methodAPIaftersubscriptionsfortheservertostartdeliveringevents.

true

durable-client-id

Identifiertospecifyifyouwanttheclienttobedurable. empty

durable-timeout

Time,inseconds,adurableclient’ssubscriptionismaintainedwhenitisnotconnectedtotheserverbeforebeingdropped.

300

SecurityProperties

Thetabledescribesthesecurity-relatedsystempropertiesfornativeclientauthenticationandauthorization.

SeeSSLClient/ServerCommunication.

SystemPropertiesforClientAuthenticationandAuthorization

©CopyrightPivotalSoftwareInc,2013-2020 75 10.1

Page 76: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

security-client-auth-factory

Setsthekeyforthe AuthInitialize factoryfunction. empty

security-client-auth-library

Registersthepathtothe securityImpl.dll library. empty

security-client-dhalgo

Diffie-Hellmanbasedcredentialsencryptionisnotsupported. null

security-client-kspath

Pathtoa.PEMfile,whichcontainsthepubliccertificatesforallGeodecacheserverstowhichtheclientcanconnectthroughspecifiedendpoints.

null

ssl-enabled TrueifSSLconnectionsupportisenabled. empty

ssl-keystoreNameofthe.PEMkeystorefile,containingtheclient’sprivatekey.Notsetbydefault.Requiredif ssl-enabled istrue.

ssl-keystore-password

Setsthepasswordfortheprivatekey.PEMfileforSSL. null

ssl-truststore

Nameofthe.PEMtruststorefile,containingtheservers’publiccertificate.Notsetbydefault.Requiredif ssl-enabled istrue.

HighAvailabilityProperties

notify-ack-interval

Minimumperiod,inseconds,betweentwoconsecutiveacknowledgmentmessagessentfromtheclienttotheserver.

10

notify-dupcheck-life

Minimumtime,inseconds,aclientcontinuestotrackanotificationsourceforduplicateswhennonewnotificationsarrivebeforeexpiringit.

300

©CopyrightPivotalSoftwareInc,2013-2020 76 10.1

Page 77: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

ClientCacheXMLReferenceThissectiondocumentstheXMLelementsyoucanusetoconfigureyourVMwareGemFire®nativeclientapplication.

TodefineaconfigurationusingXML:

1. SetcacheconfigurationparametersinadeclarativeXMLfile.Byconvention,thisuserguidereferstothefileas cache.xml ,butyoucanchooseanyname.

2. SpecifythefilenameandpathtoyourXMLconfigurationfilebysettingthe cache-xml-file propertyinthe geode.properties file.Ifyoudonotspecifypath,theapplicationwillsearchforthefileinitsruntimestartupdirectory.

Forexample:

cache-xml-file=cache.xml

Whenyourunyourapplication,thenativeclientruntimelibraryreadsandappliestheconfigurationspecifiedintheXMLfile.

ThedeclarativeXMLfileisusedtoexternalizetheconfigurationoftheclientcache.ThecontentsoftheXMLfilecorrespondtoAPIsfoundinthe apache::geode::client packageforC++applications,andtheApache::Geode::Client packagefor.NETapplications.

ElementsaredefinedintheClientCacheXSDfile,named cpp-cache-1.0.xsd ,whichyoucanfindinyournativeclientdistributioninthe xsds directory,andonlineathttps://geode.apache.org/schema/cpp-cache/cpp-cache-1.0.xsd .

CacheInitializationFile:XMLEssentials

ThissectionassumesyouarefamiliarwithXML.Whencreatingacacheinitializationfileforyournativeclientapplication,keepthesebasicsinmind:

PlaceanXMLprologatthetopofthefile.Forexample:

<?xmlversion="1.0"encoding="UTF-8"?>

Quoteallparametervalues,includingnumbersandbooleans.Forexample:

©CopyrightPivotalSoftwareInc,2013-2020 77 10.1

Page 78: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

concurrency-level="10"caching-enabled="true"

SometypesarespecifictotheVMwareGemFire®cacheinitializationfile:

Duration:Timespecifiedasanon-negativeintegerandaunit,withnointerveningspace.Therecognizedunitsare h , min , s , ms , us ,and ns .Forexample:

idle-timeout="5555ms"statistic-interval="10s"update-locator-list-interval="5min"

Expiration:Complextypeconsistingofaduration(integer+unit)andanaction,wheretheactionisoneof invalidate , destroy , local-invalidate ,or local-destroy .Forexample:

<expiration-attributestimeout="20s"action="destroy"/><expiration-attributestimeout="10s"action="invalidate"/>

Library:Complextypeconsistingofalibrarynameandafunctionname.Usedbytheclienttoinvokefunctions.Forexample:

<persistence-managerlibrary-name="SqLiteImpl"library-function-name="createSqLiteInstance">

CacheInitializationFileElementDescriptions

Thissectionshowsthehierarchyof <client-cache> sub-elementsthatyouusetoconfigureVMwareGemFire®cachesandclients.Thetop-levelelementinthissyntaxis <client-cache> .

<client-cache> <pool> <locator> <server> <region> <region-attributes> <region-time-to-live> <region-idle-time> <entry-time-to-live> <entry-idle-time> <partition-resolver>

©CopyrightPivotalSoftwareInc,2013-2020 78 10.1

Page 79: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

<cache-loader> <cache-listener> <cache-writer> <persistence-manager> <pdx>

Inthedescriptions,elementsandattributesnotdesignated“required”areoptional.

<client-cache>ElementThe<client-cache>elementisthetop-levelelementoftheXSDfile.

Yourdeclarativecachefilemustincludeaschemaofthefollowingform:

<client-cachexmlns="http://geode.apache.org/schema/cpp-cache"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://geode.apache.org/schema/cpp-cachehttp://geode.apache.org/schema/cpp-cache/cpp-cache-1.0.xsd"version="1.0">...</client-cache>

Attributesof<client-cache>

Attribute Description

version Required.Mustbe“1.0”

Sub-elementsof<client-cache>

<client-cache> mustcontainatleastoneofthesesub-elements:

Element MinimumOccurrences MaximumOccurrences

<pool> 0 unbounded

<region> 0 unbounded

<pdx> 0 1

©CopyrightPivotalSoftwareInc,2013-2020 79 10.1

Page 80: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

<pool>ElementThe<pool>elementisacollectionoftheconnectionsbywhichyourclientapplicationcommunicateswiththeVMwareGemFire®server.

Aconnectioncanspecifyeitheralocatororaserver.

A <pool> mustcontainatleastoneconnection,locatororserver,andcancontainmultiplesofeitherorboth.

Sub-elementsof<pool>

A <pool> mustcontainatleastonesub-elementthatspecifiesaconnection,whichcanbeeitheraserveroralocator.Multiplesofeitherorbothtypesarepermitted.

Element MinimumOccurrences MaximumOccurrences

<locator> 0 unbounded

<server> 0 unbounded

Attributesof<pool>

Attribute Description Default

nameString.Required.Nameofthepool,usedwhenconnectingregionstothispool.

free-connection-timeout

Duration.Theamountoftimetowaitforafreeconnectionifmax-connectionsissetandalloftheconnectionsareinuse.

10s

load-conditioning-interval

Duration.Theintervalatwhichthepoolcheckstoseeifaconnectiontoagivenservershouldbemovedtoadifferentservertoimprovetheloadbalance.

5min

min-connections

Non-negativeinteger.Theminimumnumberofconnectionstokeepavailableatalltimes.Whenthepooliscreated,itwillcreatethismanyconnections.If0(zero),thenconnectionsarenotmadeuntilanoperationisperformedthatrequiresclient-to-servercommunication.

1

Integer>=-1.Themaximumnumberofconnectionstobecreated.Ifall

©CopyrightPivotalSoftwareInc,2013-2020 80 10.1

Page 81: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

max-connections

oftheconnectionsareinuse,anoperationrequiringaclienttoserverconnectionblocksuntilaconnectionisavailable.Avalueof-1meansnomaximum.

-1

retry-attemptsInteger>=-1.Thenumberoftimestoretryanoperationafteratimeoutorexception.Avalueof-1indicatesthatarequestshouldbetriedagainsteveryavailableserverbeforefailing.

-1

idle-timeoutDuration.Setstheamountoftimeaconnectioncanbeidlebeforeitexpires.Avalueof0(zero)indicatesthatconnectionsshouldneverexpire.

5s

ping-interval Duration.Theintervalatwhichthepoolpingsservers. 10s

read-timeoutDuration.Theamountoftimetowaitforaresponsefromaserverbeforetimingoutandtryingtheoperationonanotherserver(ifanyareavailable).

10s

server-groupString.Specifiesthenameoftheservergrouptowhichthispoolshouldconnect.Ifthevalueisnullor""thenthepoolconnectstoallservers.

""

socket-buffer-size

String.Thesizeinbytesofthesocketbufferoneachconnectionestablished.

32768

subscription-enabled

Boolean.When true ,establishaservertoclientsubscription. false

subscription-message-tracking-timeout

String.Theamountoftimethatmessagessentfromaservertoaclientwillbetracked.Thetrackingisdonetominimizeduplicateevents.Entriesthathavenotbeenmodifiedforthisamountoftimeareexpiredfromthelist.

900s

subscription-ack-interval

String.Theamountoftimetowaitbeforesendinganacknowledgementtotheserverforeventsreceivedfromserversubscriptions.

100ms

subscription-redundancy

String.Setstheredundancylevelforthispool’sserver-to-clientsubscriptions.Aneffortismadetomaintaintherequestednumberofcopies(onecopyperserver)oftheserver-to-clientsubscriptions.Atmost,onecopyperserverismadeuptotherequestedlevel.If0thennoredundantcopiesarekeptontheservers.

0

statistic-interval

Duration.Theintervalatwhichclientstatisticsaresenttotheserver.Avalueof0(zero)meansdonotsendstatistics.

0ms(disabled)

pr-single-hop-enabled

String.When true ,enablesinglehopoptimizationsforpartitionedregions.

true

Boolean.Setsthethreadlocalconnectionspolicyforthispool.Whentrue thenanytimeathreadgoestouseaconnectionfromthispoolit

Attribute Description Default

©CopyrightPivotalSoftwareInc,2013-2020 81 10.1

Page 82: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

thread-local-connections

willcheckathreadlocalcacheandseeifitalreadyhasaconnectioninit.Ifsoitwilluseit.Ifnotitwillgetonefromthispoolandcacheitinthethreadlocal.Thisgetsridofthreadcontentionfortheconnectionsbutincreasesthenumberofconnectionstheserverssee.When false thenconnectionsarereturnedtothepoolassoonastheoperationbeingdonewiththeconnectioncompletes.Thisallowsconnectionstobesharedamongmultiplethreadskeepingthenumberofconnectionsdown.

false

multiuser-authentication

Boolean.Setsthepooltousemulti-usersecuremode.Ifinmultiusermode,thenappneedstoget RegionService instanceof Cache .

false

update-locator-list-interval

Duration.Thefrequencywithwhichclientupdatesthelocatorlist.Todisablethissetitsvalueto std::chrono::milliseconds::zero() .

Attribute Description Default

<locator><locator> isasub-elementof <pool> thatdefinesaconnectiontoaVMwareGemFire®locator,specifiedbyahostandportcombination.

Attributesof<locator>

Attribute Description

host String.Locatorhostname.

port Integerintherange0-65535,inclusive.Locatorportnumber.

Forexample:

<locatorhost="stax01"port="1001"/>

<server><server> isasub-elementof <pool> thatdefinesaconnectiontoaVMwareGemFire®server,specifiedbyahostandportcombination.

©CopyrightPivotalSoftwareInc,2013-2020 82 10.1

Page 83: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Attributesof<server>

Attribute Description

host String.Serverhostname.

port Integerintherange0-65535,inclusive.Serverportnumber.

Forexample:

<serverhost="motown01"port="2001"/>

<region>Youcanspecify0ormoreregionsper <client-cache> .Thereisnomaximumlimitonthenumberofregionsa <client-cache> cancontain.

InordertoconnecttoaVMwareGemFire®server,aclientapplicationmustdefineatleastoneregionwhosenamecorrespondstothatofaregionontheserver.

Regionscanbenested.

Sub-elementsof<region>

Usethe <region-attributes> sub-elementtospecifymostofthecharacteristicsofaregion.Regionsmaybenested.

Element MinimumOccurrences MaximumOccurrences

<region-attributes> 0 1

<region> 0 unbounded

Attributesof<region>

Youcanspecifymanyattributestoconfigurearegion,butmostoftheseattributesareencapsulatedinthe <region-attributes> sub-element.The <region> elementitselfhasonlytwoattributes:arequirednameandanoptionalreferenceidentifier.

©CopyrightPivotalSoftwareInc,2013-2020 83 10.1

Page 84: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Attribute Description

name String.Required.

refid String.

<region-attributes>Specify0or1 <region-attributes> elementforeach <region> youdefine.

Ifyouspecifya <region-attributes> element,youmustspecifyatleastoneofthesesub-elements.Whenmorethanonesub-elementisspecified,theymustbedefinedinthisorder:

Element Type MinimumOccurrences MaximumOccurrences

<region-time-to-live> expiration 0 1

<region-idle-time> expiration 0 1

<entry-time-to-live> expiration 0 1

<entry-idle-time> expiration 0 1

<partition-resolver> library 0 1

<cache-loader> library 0 1

<cache-listener> library 0 1

<cache-writer> library 0 1

<persistence-manager> listofproperties 0 1

Attributesof<region-attributes>

Attribute Description Default

caching-enabled

Boolean.Iftrue,cachedataforthisregioninthisprocess.Iffalse,thennodataisstoredinthelocalprocess,buteventsanddistributionswillstilloccur,andtheregioncanstillbeusedtoputandremove,etc.

true

cloning-enabled

Boolean.Setscloningonregion. false

scope Enumeration: local , distributed-no-ack , distributed-ack

initial- String.Setstheinitialentrycapacityfortheregion. 10000

©CopyrightPivotalSoftwareInc,2013-2020 84 10.1

Page 85: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

capacity

load-factorString.Setstheentryloadfactorforthenext RegionAttributes tobecreated.

0.75

concurrency-level

String.Setstheconcurrencylevelofthenext RegionAttributes tobecreated.

16

lru-entries-limit

String.SetsthemaximumnumberofentriesthiscachewillholdbeforeusingLRUeviction.Areturnvalueofzero,0,indicatesnolimit.Ifdisk-policyisoverflows ,mustbegreaterthanzero.

disk-policyEnumeration: none , overflows , persist .Setsthediskpolicyforthisregion.

none

endpoints String.Alistof servername:port-number pairsseparatedbycommas.

client-notification

Booleantrue/false(on/off) false

pool-nameString.Thenameofthepooltoattachtothisregion.Thepoolwiththespecifiednamemustalreadyexist.

concurrency-checks-enabled

Boolean:true/false.Enablesconcurrentmodificationchecks. true

id String.

refid String.

Attribute Description Default

<region-time-to-live><region-time-to-live>specifieshowlongthisregionremainsinthecacheafterthelastcreateorupdate,andtheexpirationactiontoinvokewhentimerunsout.Acreateorupdateoperationonanyentryintheregionresetstheregion’scounter,aswell.Get(read)operationsdonotresetthecounter.

Usethe <expiration-attributes> sub-elementtospecifydurationandexpirationaction.Theattributesof<expiration-attributes>mustbedefinedinthisorder:

Attribute Description

timeout Duration,specifiedasanintegerandunits.Required.

action Enumeration.Oneof: invalidate , destroy , local-invalidate , local-destroy

©CopyrightPivotalSoftwareInc,2013-2020 85 10.1

Page 86: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

<region-idle-time><region-idle-time>specifieshowlongthisregionremainsinthecacheafterthelastaccess,andtheexpirationactiontoinvokewhentimerunsout.Thecounterisresetafteranyaccess,includingcreate,put,andgetoperations.Accesstoanyentryintheregionresetstheregion’scounter,aswell.

Usethe <expiration-attributes> sub-elementtospecifydurationandexpirationaction.Theattributesof<expiration-attributes>mustbedefinedinthisorder:

Attribute Description

timeout Duration,specifiedasanintegerandunits.Required.

action Enumeration.Oneof: invalidate , destroy , local-invalidate , local-destroy

<entry-time-to-live><entry-time-to-live>specifieshowlongthisentryremainsinthecacheafterthelastcreateorupdate,andtheexpirationactiontoinvokewhentimerunsout.Get(read)operationsdonotresetthecounter.

Usethe <expiration-attributes> sub-elementtospecifydurationandexpirationaction.Theattributesof<expiration-attributes>mustbedefinedinthisorder:

Attribute Description

timeout Duration,specifiedasanintegerandunits.Required.

action Enumeration.Oneof: invalidate , destroy , local-invalidate , local-destroy

<entry-idle-time><entry-idle-time>specifieshowlongthisentryremainsinthecacheafterthelastaccess,andtheexpirationactiontoinvokewhentimerunsout.Thecounterisresetafteranyaccess,includingcreate,put,andgetoperations.

Usethe <expiration-attributes> sub-elementtospecifydurationandexpirationaction.Theattributesof

©CopyrightPivotalSoftwareInc,2013-2020 86 10.1

Page 87: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

<expiration-attributes>mustbedefinedinthisorder:

Attribute Description

timeout Duration,specifiedasanintegerandunits.Required.

action Enumeration.Oneof: invalidate , destroy , local-invalidate , local-destroy

<partition-resolver><partition-resolver>identifiesafunctionbyspecifying library-name and library-function-name .

Apartitionresolverisusedforsingle-hopaccesstopartitionedregionentriesontheserverside.Thisresolverimplementationmustmatchthatofthe PartitionResolver ontheserverside.SeetheAPIClassReference forthePartitionResolverclass.

Forexample:

<partition-resolverlibrary-name="appl-lib"library-function-name="createTradeKeyResolver"/>

<cache-loader><cache-loader>identifiesacacheloaderfunctionbyspecifying library-name and library-function-name .SeetheAPIClassReference fortheCacheLoaderclass.

<cache-listener><cache-listener>identifiesacachelistenerfunctionbyspecifying library-name and library-function-name .SeetheAPIClassReference fortheCacheListenerclass.

©CopyrightPivotalSoftwareInc,2013-2020 87 10.1

Page 88: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

<cache-writer><cache-writer>identifiesacachewriterfunctionbyspecifying library-name and library-function-name .SeetheAPIClassReference fortheCacheWriterclass.

<persistence-manager>Foreachregion,ifthedisk-policyattributeissetto overflows ,apersistence-managerplug-inmustperformcache-to-diskanddisk-to-cacheoperations.SeetheAPIClassReference forthePersistenceManagerclass.

<persistence-manager>identifiesapersistencemanagerfunctionbyspecifying library-name andlibrary-function-name .Youcanalsospecifyasetofpropertiestobepassedtothefunctionasparameters.

Thesub-element <properties> isasequenceof0ormore <property> elements.

Each <property> isaname-valuepair.Wheretheattributesmustbespecifiedinthisorder:

name

value

Forexample:

<region-attributes><persistence-managerlibrary-name="libSqLiteImpl.so"library-function-name="createSqLiteInstance"><properties><propertyname="PersistenceDirectory"value="/xyz"/><propertyname="PageSize"value="65536"/><propertyname="MaxPageCount"value="1073741823"/></properties></persistence-manager></region-attributes>

<pdx>SpecifiestheconfigurationforthePortableDataeXchange(PDX)methodofserialization.

©CopyrightPivotalSoftwareInc,2013-2020 88 10.1

Page 89: VMware GemFire® C++ Client 10€¦ · Pivotal Cloud Foundry. GemFire Compatibility The GemFire Native Client supports applications that communicate with GemFire servers. Native Client

Attributesof<pdx>

Attribute Description

ignore-unread-fields

Boolean.When true ,donotpreserveunreadPDXfieldsduringdeserialization.Youcanusethisoptiontosavememory.Setthisattributeto true onlyinmembersthatareonlyreadingdatafromthecache.

read-serialized

Boolean.When true ,PDXdeserializationproducesa PdxInstance insteadofaninstanceofthedomainclass.

©CopyrightPivotalSoftwareInc,2013-2020 89 10.1