Wednesday, 31 October 2018
Native JSON and Node 8.11 baseline in Node.js client 0.6.0!!
Infinispan Node.js client 0.6.0 is out now!! :)
As well as updating the client so that it understand the latest Hot Rod protocols in Infinispan 9.4.0.Final, this version comes with native JSON object support.
To make the Node.js client backwards compatible, the client still treats key/value pairs as String by default. If you want to use native JSON objects, you have to explicitly configure the Node.js client to do so (see example).
Starting with this version, we’ve upgraded the base Node version requirement to 8.11, which is the latest stable release branch at the time of writing. With such upgrade, the client no longer needs to use external promise dependency which was know to leak.
If you’re a Node.js user and want to store data remotely in Infinispan server instances, please give the client a go and tell us what you think of it via our forum, via our issue tracker or via Zulip on Infinispan channel.
Cheers Galder
Tags: release javascript node.js
Monday, 13 August 2018
Node.js client 0.5.0 released with improved stability and better OSX integration
Infinispan Node.js client 0.5.0 was released last week. It comes with much improved stability under heavy load conditions and hence it’s a recommended upgrade for any current users.
On top of that, a configuration option called topologyUpdates (true (default) / false) has been added to disable topology updates. This can be useful when trying to access Infinispan server running within a Docker container on MacOs. Without this option to disable topology updates, Node.js client receives internal Docker IP addresses on first contact which cannot be accessed from outside Docker on MacOs. See this previous blog post for more details.
If you’re a Node.js user and want to store data remotely in Infinispan server instances, please give the client a go and tell us what you think of it via our forum, via our issue tracker or via Zulip on Infinispan channel.
Cheers, Galder
Tags: release javascript js-client node.js mac
Thursday, 23 February 2017
Node.js client 0.4.0 released with encryption and cross-site failover
We’ve just released Infinispan Node.js Client version 0.4.0 which comes with encrypted client connectivity via SSL/TLS (with optional TLS/SNI support), as well as cross-site client failover.
Thanks to the encryption integration, Node.js Hot Rod clients can talk to Hot Rod servers via an encrypted channel, allowing trusted client and/or authenticated clients to connect. Check the documentation for information on how to enable encryption in Node.js Hot Rod client.
Also, we’ve added the possibility for the client to connect to multiple clusters. Normally, the client is connected to a single cluster, but if all nodes fail to respond, the client can failover to a different cluster, as long as one or more initial addresses have been provided. On top of that, clients can manually switch clusters using switchToCluster and switchToDefaultCluster APIs. Check documentation for more info.
On top of that, we’ve applied several bug fixes that further tighten the inner workings of the Node.js client.
If you’re a Node.js user and want to store data remotely in Infinispan Server instances, please give the client a go and tell us what you think of it via our forum, via our issue tracker or via IRC on the #infinispan channel on Freenode.
Tags: release security xsite javascript js-client node.js
Thursday, 30 June 2016
DevNation Live Blog: Building Reactive Applications with Node.js and Red Hat JBoss Data Grid
Last Tuesday I gave a talk at DevNation 2016 on building Reactive Applications with Node.js and Red Hat JBoss Data Grid. The slides for it will be uploaded to the DevNation site shortly, but for those who want to play around with the application demoed in the talk, you can find the code and instructions in this repository.
The Red Hat Developers blog posted a review of the talk in this address: http://developers.redhat.com/blog/2016/06/29/devnation-live-blog-building-reactive-applications-with-node-js-and-red-hat-jboss-data-grid/
Please find below review as written by Rob Terzi:
DevNation Live Blog: Building Reactive Applications with Node.js and Red Hat JBoss Data Grid
Posted by Rob Terzi on June 29, 2016
At DevNation, Red Hat’s Galder Zamarreño gave a talk with a live demo, Building reactive applications with Node.js and Red Hat JBoss Data Grid. The demo consisted of building an event-based three tier web application using JBoss Data Grid (JDG) as the data layer, an event manager running on Node.js, and a web client. Recently, support for Node.js clients was added to JDG, opening up the performance of a horizontally scalable in-memory data grid, to reactive web and mobile applications.
JDG is capable of processing and storing real-time streams of data, while maintaining very fast response times. It does this by using the memory available from a dynamically scalable grid of machines. Galder described JDG as a four-in-one package capable of being:
-
a distributed cache.
-
a high performance NoSQL primary data store.
-
an event-driven data store, particularly for real time event processing.
-
a big data and Internet of Things (IoT) data store.
The three-tiered web app in the demo consisted of:
-
A web client written in Elm, which is a functional language that compiles to JavaScript. It is statically typed, which the presenter feels leads to well architected code. Elm competes with platforms such as React and Angular. Any of those other platforms could be used, but Galder chose Elm for the live demo, particularly given the useful error messages the compiler generates as a virtue of using a statically typed language.
-
An event manager running on Node.js using Express.js.
-
JBoss Data Grid as the data store. Three nodes were used, running on the same laptop. Each element was guaranteed to be stored in two nodes, providing redundancy for fail over.
Node.js based applications have become very popular. Many use JavaScript on all three tiers, including NoSQL data stores. However, most of those data stores can’t match the scalability and response times of JDG. Traditionally, developers have needed to use Java to take advantage of JBoss Data Grid. The new fully asynchronous Node.js interface to JBoss Data Grid should enable developers to build some truly interesting next-generation reactive applications.
You can download JBoss Data Grid from developers.redhat.com. If you’d like to get involved, join the open source community at infinispan.org.
Tags: conference javascript devnation
Monday, 20 June 2016
DevNation 2016: Galder Zamarreño on “Building reactive applications with Node.js and Red Hat JBoss Data Grid”
Earlier this month I did an interview with the DevNation 2016 organizers to talk about my talk on forthcoming talk on building reactive applications with Node.js and JBoss Data Grid, the Infinispan version for which Red Hat provides professional support, certified integration, patches…etc.
The talk will be happen next Tuesday, 28th June at 3:30pm PDT, so if you’re in DevNation and want to find out more about Infinispan and our new Node.js Javascript client, make sure you join us then!
Building reactive applications with Node.js and Red Hat JBoss Data Grid
JBoss Data Grid is a distributed in-memory key/value data store from Red Hat, which can be used for caching, temporary and permanent storage. Although Java developers were its primary audience initially, the team has been expanding its appeal to C++, C# and even Javascript developers.
The latest JBoss Data Grid release includes a fully asynchronous Node.js client for interacting with JBoss Data Grid servers and my talk at DevNation is focused on how Javascript developers can make the most of the client to cache or store their data.
The talk has been designed around a web application that promotes JBoss Data Grid talks in forthcoming conferences, user groups… etc. The application will contain a Node.js component whose job will be to interact with the backend JBoss Data Grid servers to store and retrieve data, as well as receiving events when new information has been added to the backend. Through the live coding of this application, the audience will get an understanding of how to interact with the newly released Node.js JBoss Data Grid client, and after the talk they’ll have access to the code to be able to try it themselves.
Tuesday 3:30 p.m. to 4:30 p.m. Room 133
About the presenter:
This will be my first time speaking at DevNation and I’m really excited about it because it brings together speaks and attendees not only from the Java/JVM space, but from other important developer communities such as Javascript.
Although I started as a Java developer, over the past decade I’ve become more and more interested in other programming languages, in particular functional programming languages such as Scala and Javascript, which I’ve been able to apply directly at my job.
These days I’m hugely interested by the purely functional ones such as Haskell, Elm or Purescript because the lack of mutability makes their solutions both elegant and easier to reason about. I’m also keeping a close eye as well on the Erlang ecosystem, e.g. Elixir, because I feel that the predictable latency offered by the Erlang VM is something that it’s not so easy to achieve in Java Virtual Machine.
I think learning other programming languages is one of the best things a developer can do, because it opens your mind to different points of view, different ways to solve problems, and widens the solution space.
Tags: conference javascript devnation
Monday, 06 June 2016
Node.js Javascript Client 0.3.0 out with improved stability and API docs
Earlier today Infinispan Javascript client version 0.3.0 was released whose primary focus has been stabilising and tightening existing functionality, deprecating some older methods, and documentation:
-
Multiple fixes around remote execution, remote listeners and iteration.
-
Improved failover handling logic to correctly deal with socket error and remote disconnect situations.
-
Removed getVersioned, getBulk and getBulkKeys methods since these are deprecated in favour of getWithMetadata and getAll. The examples in the README file have been updated.
-
Added API documentation for Javascript client. Online API docs for Javascript client can be found here.
If you’re a Javascript user and want to store data remotely in Infinispan Server instances, please give the client a go and tell us what you think of it via our forum, via our issue tracker or via IRC on the #infinispan channel on Freenode.
Cheers,
Galder
Tags: release javascript nodejs
Wednesday, 23 March 2016
Javascript client 0.2.0 arrives with Cluster Topology support
Today Infinispan Javascript client version 0.2.0 was released, which includes:
-
Updated README file containing simpler individual examples on each main feature set.
-
Remote execution - Users can now load remote scripts into Infinispan Servers using the addScript method and these scripts can be remotely executed via the execute operation. An example of this can be found in the README file.
-
Server-side statistic can now be retrieved using the stats operation. Again, an example can be found in the README file.
-
The client now supports cluster topology updates, so it can handle remote notifications of server side topology changes, including addition or removal of server-side cluster nodes.
-
Using the cluster topology information and hashing algorithms, the client can now apply the same Consistent-Hash algorithm servers use to distribute data around the cluster, and hence can immediately locate the server where a particular key lives.
If you’re a Javascript user and want to store data remotely in Infinispan Server instances, please give the client a go and tell us what you think of it via our forum, via our issue tracker or via IRC on the #infinispan channel on Freenode.
Cheers,
Galder
Tags: release javascript js-client
Thursday, 18 February 2016
Infinispan Javascript client 0.1.0 is out!
Over the past few months we’ve been working on a Javascript client based on Node.js which can talk to Infinispan Server instances and today we can announce the first public release, version 0.1.0 which can easily be installed with the following command:
$ npm install infinispan
The client is still under heavy development but here’s a summary of its current capabilities:
-
Full CRUD operation support, e.g. put, get, remove, containsKey…etc.
-
Compare-And-Swap operation support, e.g. putIfAbsent, getWithVersion/getWithMetadata, replace, replaceWithVersion, removeWithVersion…etc.
-
Expiration with absolute lifespan or relative maximum idle time is supported. This expiration parameters as passed as optional parameters to create/update methods and they support multiple time units, e.g. \{lifespan: '1m', maxIdle: '1d'}.
-
Update and remove operations can optionally return previous values by passing in\{previous: true} option.
-
Bulk store/retrieve/delete operations are supported, e.g. putAll, getAll, getBulk, getBulkKeys, clear…etc.
-
Cache contents can be iterated over using the iterator method.
-
Cache size can be determined using the size method.
-
Remote cache listeners can be plugged using the addListener method, which takes the event type (create, modify, remove or expiry) and the function callback as parameter.
Sample code showing how to use the Infinispan Javascript client can be found in the client’s README file.
In future versions we’ll be adding remote execution support as well as cluster topology handling, including consistent-hash based request routing.
If you’re a Javascript user and want to store data remotely in Infinispan Server instances, please give the client a go and tell us what you think of it via our forum, via our issue tracker or via IRC on the #infinispan channel on Freenode.
Cheers,
Galder
Tags: release javascript js-client
Friday, 16 October 2015
Stored Script Execution
One of the questions we get asked a lot is: when will I be able to run Map/Reduce and DistExec jobs over HotRod.
I’m happy to say: now !
Infinispan Server comes with Stored Script Execution which means that remote clients can invoke named scripts on the server. If you’re familiar with the concept of Stored Procedures of the SQL world, then you already have an idea of what this feature is about. The types of scripts you can run are those handled by Java’s scripting API. Out of the box this means Javascript (which uses either the Nashorn engine on JDK 8+), but you can add many more (Groovy, Scala, JRuby, Jython, Lua, etc). Scripts are stored in a dedicated script cache ("___scriptcache") so that they can be easily created/modified using the standard cache operations (put/get/etc.).
Here’s an example of a very simple script:
The script above just obtains the default cache, retrieves the value with key 'a' and returns it (the Javascript script engine uses the last evaluated expression of a script as its return value). The first line of the script is special: it looks like a comment, but, like the first line in Unix shell scripts, it actually provides instructions on how the script should be run in the form of properties.
The mode property instructs the execution engine where we want to run the script: local for running the script on the node that is handling the request and distributed for running the script wrapped by a distributed executor. Bear in mind that you can certainly use clustered operations in local mode.
Scripts can also take named parameters which will "appear" as bindings in the execution scope.
Invoking it from a Java HotRod client would look like this:
Server-side scripts will be evolving quite a bit in Infinispan 8.1 where we will add support for the broader concept of server-side tasks which will include both scripts and deployable code which can be invoked in the same way, all managed and configured by the upcoming changes in the Infinispan Server console.
Tags: hotrod remote scripting javascript server nashorn