Monday, July 12, 2010

JGroups 2.10 final released

I'm happy to announce that JGroups 2.10 final has been released. It can be downloaded from SourceForge and contains the following major new features (for a detailed list of the 80+ issues  check 2.10 in JIRA):

SCOPE: concurrent delivery of messages from the same sender

By default, messages from a sender P are delivered in the (FIFO) order in which P sent them (ignoring OOB messages for now). However, sometimes it would be beneficial to deliver unrelated messages concurrently, e.g. modifications sent by P for different HTTP sessions.

SCOPE is a new protocol, which allows a developer to define a scope for a message, and that scope is then used to deliver messages from P concurrently.

See for details.

Use of factory to create sockets

There's now a method Protocol.setSocketFactory(SocketFactory) which allows to set a socket factory, used to create and close datagram and TCP (client and server) sockets. The default implementation keeps track of open sockets, so
./ socks
dumps a list of open sockets.

UNICAST2: experimental version of UNICAST based on negative acks

By not sending acks for received messages, we can cut down on the number of acks. UNICAST2 is ca 20-30% faster than UNICAST as a result. Needs more testing though, currently UNICAST2 is experimental.

Certain IPv4 addresses should be allowed in an IPv6 stack

They will be converted into IPv6 mapped IPv4 addresses. This relaxes the (too restrictive) IP address conformance testing somewhat, and allows for more configurations to actually start the stack and not fail with an exception.

Multiple components using the same channel

This is a new light weight version of the (old and dreaded !) Multiplexer, which allows for sharing of channels between components, such as for example HAPartition and Infinispan.

*** Only to be used by experts ! ***

MERGE2: fast merge

Fast merge in case where we receive messages from a member which is not part of our group, but has the same group name.

RpcDispatcher / MessageDispatcher: add exclusion list

If an RPC needs to be sent to all nodes in a cluster except one node (e.g. the sender itself), then we can simply exclude the sender. This is done using
RequestOptions.setExclusionList(Address ...  xcluded_mbrs).
This is simpler than having to create the full list, and remove the sender.

Ability to use keywords instead of IP addresses

Whenever IP addresses (symbolic or dotted-decimal notation) are used, we can now use a keyword instead. Currently, the keywords are "GLOBAL" (public IP address), "SITE_LOCAL" (private IP address), "LINK_LOCAL" (link local), "LOOPBACK" (a loopback address) and "NON_LOOPBACK" (any but a loopback address).
This is useful in cloud environments where IP address may not be known beforehand.
Example: java -Djgroups.bind_addr=SITE_LOCAL

GossipRouter: re-introduce pinging to detect crashed clients

When clients are terminated without closing of sockets (e.g. in virtualized environments), they'd cause their
entries to not be removed in GossipRouter. This was changed by (re-)introducing pinging.

Feeback is appreciated via the usual channels (mailing list, IRC) !
Enjoy !

Bela Ban
Vladimir Blagojevic
Richard Achmatowicz


  1. Hello,

    great work!
    Looking forward to try out the new release.
    Are there any plans to push the artifact to a Maven2 repository (e.g. )?

    Thank you in advance!

    Kind regards
    Sergiy Shyrkov

  2. Yes, as a matter of fact, I have been pushing the JGroups artifacts to maven for quite a whole now. It used to be, now it is
    Note that the groupsId used to be "jgroups", now it is "org.jgroups"; to be compliant with the Nexus requirements.

  3. Hello Bela,

    thank you for the prompt reply!

  4. Anonymous11:22 PM

    That repo does not seem to be working...

  5. Hmm, I just verified it works... Did you try ?