Dear Infinispan community,
Red Hat has just announced the general availability of Red Hat JBoss Data Grid 7.0, the commercially supported version of Infinispan.
Building on the solid foundation of Infinispan 8, JBoss Data Grid integrates with the rest of the Red Hat JBoss middleware platform to deliver top-notch long-term support, dedicated high-quality consulting and training services, and the best open-source expertise in the world.
If you want to give it a spin, go to the Red Hat JBoss Data Grid product page, where you will find download links for a free trial, documentation and more.
Wednesday, 27 July 2016
Wednesday, 20 July 2016
Bleeding edge on Docker
As you may have noticed our Docker images are published together with (or very soon after) releases. But what if you want to try out some brand features which have just been merged? In that case you need to build an image by yourself.
The second one is much simpler (Infinispan SNAPSHOTs are pushed into the repository after each successful build:
Step #1 - Clone JBoss Docker image repository
At first you will need to clone our Infinispan Docker images:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git clone https://github.com/jboss-dockerfiles/infinispan.git | |
cd infinispan |
Step #2 - Build or download the latest SNAPSHOT
There are two options here - you can build the distribution yourself or use SNAPSHOTs available on JBoss Nexus repository.
The first option requires checking out the Infinispan source code and performing a Maven build:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git clone https://github.com/infinispan/infinispan.git | |
cd infinispan | |
mvn clean install -DskipTests |
The second one is much simpler (Infinispan SNAPSHOTs are pushed into the repository after each successful build:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
wget -L "https://repository.jboss.org/nexus/service/local/artifact/maven/redirect?r=snapshots&g=org.infinispan.server&a=infinispan-server-build&v=9.0.0-SNAPSHOT&e=zip" |
Step #3 - building Infinispan Docker image
One of the steps for building Infinispan Docker image is to download the distribution from Infinispan Download page. We need to slightly modify this step and use our manually downloaded packages.
Modify the Dockerfile as shown below:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Replace this line: | |
RUN INFINISPAN_SHA=$(curl $DISTRIBUTION_URL.sha1); curl -o /tmp/server.zip $DISTRIBUTION_URL && sha1sum /tmp/server.zip | grep $INFINISPAN_SHA \ | |
&& unzip -q /tmp/server.zip -d $HOME && mv $HOME/infinispan-server-* $HOME/infinispan-server && rm /tmp/server.zip | |
#With this: | |
USER root | |
ADD infinispan-server-9.0.0-SNAPSHOT /opt/jboss/infinispan-server | |
#Since we are playing with development versions, we don't care about the permissions | |
RUN chmod -R 777 /opt/jboss/infinispan-server | |
RUN chmod +x /opt/jboss/infinispan-server/bin/*.sh | |
USER jboss |
Now you are ready to invoke the Docker build:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
docker build -t infinispan-server . |
Conclusion
As you can see building a SNAPSHOT based docker image is very simple. From my own experience I can tell you that pushing it into Docker Hub is the fastest way to start playing with it in any PaaS environment (e.g. Openshift Online)
Happy building!
Happy building!
Labels:
docker
Monday, 11 July 2016
Infinispan 9.0.0.Alpha3 (and 8.2.3.Final)
Dear Infinispan users,
As we have lately been releasing Infinispan 8 and 9 releases in pairs, today's releases are no different. We have 9.0.0.Alpha3 and 8.2.3.Final ready for you!
A new micro release of our stable 8.2 branch fixes 16 issues. If you are using any other 8.x release, we recommend an upgrade to 8.2.3.Final as this release contains latest bugfixes, performance improvements, and Hibernate Search library update.
A brand new Alpha release from our development branch: 9.0.0.Alpha3 has more than 50 bug fixes, and many enhancements, among which we single out: improved distributed streams, documentation enhancements, admin console improvements, and various component upgrades.
Download it now, try it and tell us what you think on the infinispan forums or come and meet us on IRC: channel #infinispan on Freenode.
As we have lately been releasing Infinispan 8 and 9 releases in pairs, today's releases are no different. We have 9.0.0.Alpha3 and 8.2.3.Final ready for you!
A new micro release of our stable 8.2 branch fixes 16 issues. If you are using any other 8.x release, we recommend an upgrade to 8.2.3.Final as this release contains latest bugfixes, performance improvements, and Hibernate Search library update.
A brand new Alpha release from our development branch: 9.0.0.Alpha3 has more than 50 bug fixes, and many enhancements, among which we single out: improved distributed streams, documentation enhancements, admin console improvements, and various component upgrades.
Download it now, try it and tell us what you think on the infinispan forums or come and meet us on IRC: channel #infinispan on Freenode.
Friday, 8 July 2016
Remote Execution with C++ client
Version 8 of the Infinispan C++ Hotrod Client implements the Execute on Server (Exec) operation. This feature was introduced with Hotrod protocol v 2.1 and has been described for the Java client here.
The user can now store the javascript code on the server then invoke it when needed and let the server take care of the execution both locally on the near node or distibuited on the whole cluster.
The following annotated code is an example of a C++ Exec that addresses the following use case: the user wants to get a string value and wants to count how many times it has been accessed from all the connected clients.
You can git the whole source following this link.
The user can now store the javascript code on the server then invoke it when needed and let the server take care of the execution both locally on the near node or distibuited on the whole cluster.
The following annotated code is an example of a C++ Exec that addresses the following use case: the user wants to get a string value and wants to count how many times it has been accessed from all the connected clients.
You can git the whole source following this link.
//Client setup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "infinispan/hotrod/ConfigurationBuilder.h" | |
#include "infinispan/hotrod/RemoteCacheManager.h" | |
#include "infinispan/hotrod/RemoteCache.h" | |
#include "infinispan/hotrod/Version.h" | |
#include "infinispan/hotrod/JBasicMarshaller.h" | |
using namespace infinispan::hotrod; | |
int main(int argc, char** argv) { | |
ConfigurationBuilder builder; | |
builder.addServer().host("127.0.0.1").port(11222).protocolVersion( | |
Configuration::PROTOCOL_VERSION_24); | |
builder.balancingStrategyProducer(nullptr); | |
RemoteCacheManager cacheManager(builder.build(), false); | |
try { | |
// Create the cache with the given marshallers | |
auto *km = new JBasicMarshaller<std::string>(); | |
auto *vm = new JBasicMarshaller<std::string>(); | |
RemoteCache<std::string, std::string> cache = cacheManager.getCache< | |
std::string, std::string>(km, &Marshaller<std::string>::destroy, | |
vm, &Marshaller<std::string>::destroy, | |
std::string("namedCache")); | |
cacheManager.start(); |
//Cache setup and scripts installation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RemoteCache<std::string, std::string> scriptCache = | |
cacheManager.getCache<std::string, std::string>( | |
"___script_cache", false); | |
// Install on the server the getValue script | |
std::string getValueScript( | |
"// mode=local,language=javascript\n " | |
"var cache = cacheManager.getCache(\"namedCache\");\n " | |
"var ct = cache.get(\"accessCounter\");\n " | |
"var c = ct==null ? 0 : parseInt(ct);\n " | |
"cache.put(\"accessCounter\",(++c).toString());\n " | |
"cache.get(\"privateValue\") "); | |
std::string getValueScriptName("getValue.js"); | |
std::string pGetValueScriptName = | |
JBasicMarshaller<std::string>::addPreamble(getValueScriptName); | |
std::string pGetValueScript = | |
JBasicMarshaller<std::string>::addPreamble(getValueScript); | |
scriptCache.put(pGetValueScriptName, pGetValueScript); | |
// Install on the server the get access counter script | |
std::string getAccessScript( | |
"// mode=local,language=javascript\n " | |
"var cache = cacheManager.getCache(\"namedCache\");\n " | |
"cache.get(\"accessCounter\")"); | |
std::string getAccessScriptName("getAccessCounter.js"); | |
std::string pGetAccessScriptName = | |
JBasicMarshaller<std::string>::addPreamble(getAccessScriptName); | |
std::string pGetAccessScript = | |
JBasicMarshaller<std::string>::addPreamble(getAccessScript); | |
scriptCache.put(pGetAccessScriptName, pGetAccessScript); |
//Exec operation and output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cache.put("privateValue", "Counted Access Value"); | |
std::map<std::string, std::string> s; | |
std::vector<unsigned char> execValueResult = cache.execute( | |
getValueScriptName, s); | |
std::vector<unsigned char> execAccessResult = cache.execute( | |
getAccessScriptName, s); | |
std::string value( | |
JBasicMarshallerHelper::unmarshall<std::string>( | |
(char*) execValueResult.data())); | |
std::string access( | |
JBasicMarshallerHelper::unmarshall<std::string>( | |
(char*) execAccessResult.data())); | |
std::cout << "Returned value is '" << value | |
<< "' and has been accessed: " << access << " times." | |
<< std::endl; | |
} catch (const Exception& e) { | |
std::cout << "is: " << typeid(e).name() << '\n'; | |
std::cerr << "fail unexpected exception: " << e.what() << std::endl; | |
return 1; | |
} | |
cacheManager.stop(); | |
return 0; | |
} |
Subscribe to:
Posts (Atom)