13.10. Hot Rod C++ Client The Hot Rod C++ client is a new addition to the Hot Rod client family which includes the Hot Rod Java client. It enables C++ runtime applications to connect and interact with Red Hat JBoss Data Grid remote servers. The Hot Rod C++ client allows applications developed in C++ to read or write data to remote caches. The Hot Rod C++ client supports all three levels of client intelligence and is supported on the following platforms: Red Hat Enterprise Linux 5, 64-bit Red Hat Enterprise Linux 6, 64-bit Red Hat Enterprise Linux 7, 64-bit The Hot Rod C++ client is available as a Technology Preview on 64-bit Windows with Visual Studio 2010. Report a bug 13.10.1. Hot Rod C++ Client Formats The Hot Rod C++ client is available in the following two library formats: Static library Shared/Dynamic library Static Library The static library is statically linked to an application. This increases the size of the final executable. The application is self-contained and it does not need to ship a separate library. Shared/Dynamic Library Shared/Dynamic libraries are dynamically linked to an application at runtime. The library is stored in a separate file and can be upgraded separately from the application, without recompiling the application. Note This can only happen if the library's major version is equal to the one against which the application was linked at compile time, indicating that it is binary compatible. Report a bug 13.10.2. Hot Rod C++ Client Prerequisites In order to use the Hot Rod C++ Client, the following are needed: C++ 03 compiler with support for shared_ptr TR1 (GCC 4.0+, Visual Studio C++ 2010). Red Hat JBoss Data Grid Server 6.1.0 or higher version. Report a bug 13.10.3. Hot Rod C++ Client Download The Hot Rod C++ client is included in a separate zip file jboss-datagrid-<version>-hotrod-cpp-client-<platform>.zip under Red Hat JBoss Data Grid binaries on the Red Hat Customer Portal at https://access.redhat.com . Download the appropriate Hot Rod C++ client which applies to your operating system. Report a bug 13.10.4. Hot Rod C++ Client Configuration The Hot Rod C++ client interacts with a remote Hot Rod server using the RemoteCache API. To initiate communication with a particular Hot Rod server, configure RemoteCache and choose the specific cache on the Hot Rod server. Use the ConfigurationBuilder API to configure: The initial set of servers to connect to. Connection pooling attributes. Connection/Socket timeouts and TCP nodelay. Hot Rod protocol version. Sample C++ main executable file configuration The following example shows how to use the ConfigurationBuilder to configure a RemoteCacheManager and how to obtain the default remote cache: Example 13.6. SimpleMain.cpp Report a bug 13.10.5. Hot Rod C++ Client API The RemoteCacheManager is a starting point to obtain a reference to a RemoteCache. The RemoteCache API can interact with a remote Hot Rod server and the specific cache on that server. Using the RemoteCache reference obtained in the example, it is possible to put, get, replace and remove values in a remote cache. It is also possible to perform bulk operations, such as retrieving all of the keys, and clearing the cache. When a RemoteCacheManager is stopped, all resources in use are released. Example 13.7. SimpleMain.cpp Report a bug

Commands:
#include "infinispan/hotrod/ConfigurationBuilder.h" #include "infinispan/hotrod/RemoteCacheManager.h" #include "infinispan/hotrod/RemoteCache.h" #include <stdlib.h> using namespace infinispan::hotrod; int main(int argc, char** argv) { ConfigurationBuilder b; b.addServer().host("127.0.0.1").port(11222); RemoteCacheManager cm(builder.build()); RemoteCache<std::string, std::string> cache = cm.getCache<std::string, std::string>(); return 0; }
RemoteCache<std::string, std::string> rc = cm.getCache<std::string, std::string>(); std::string k1("key13"); std::string v1("boron"); // put rc.put(k1, v1); std::auto_ptr<std::string> rv(rc.get(k1)); rc.putIfAbsent(k1, v1); std::auto_ptr<std::string> rv2(rc.get(k1)); std::map<HR_SHARED_PTR<std::string>,HR_SHARED_PTR<std::string> > map = rc.getBulk(0); std::cout << "getBulk size" << map.size() << std::endl; .. . cm.stop();