

Reliable group communication with JGroups
=========================================
:author: Bela Ban <belaban@yahoo.com>
:toc2:
:toclevels: 3
:icons:
:homepage: http://www.jgroups.org
:source-highlighter: pygments
:iconsdir: ./images/icons

Copyright Red Hat 1998 - 2035

This document is licensed under the
http://creativecommons.org/licenses/by-sa/3.0/us/legalcode["Creative Commons Attribution-ShareAlike (CC-BY-SA) 3.0"]
license.

This is the JGroups manual. It provides information about:
            
* Installation and configuration
* Using JGroups (the API)
* Configuration of the JGroups protocols


The focus is on how to _use_ JGroups, not on how JGroups is _implemented_.


Here are a couple of points I want to abide by throughout this book:

* I like brevity. I will strive to describe concepts as clearly as possible (for a non-native English speaker) and will
 refrain from saying more than I have to to make a point.
* I like simplicity. Keep It Simple and Stupid. This is one of the biggest goals I have both in writing this manual and
 in writing JGroups. It is easy to explain simple concepts in complex terms, but it is hard to explain a
 complex system in simple terms. I'll try to do the latter.


So, how did it all start?

I spent 1998-1999 at the Computer Science Department at Cornell University as a post-doc, in Ken Birman's group. Ken is
credited with inventing the group communication paradigm, especially the Virtual Synchrony model. At the time they were
working on their third generation group communication prototype, called Ensemble.

Ensemble followed Horus (written in C by Robbert VanRenesse), which followed ISIS (written by Ken Birman, also in C).
Ensemble was written in OCaml, developed at INRIA, which is a functional language and related to ML. I never liked the
OCaml language, which in my opinion has a hideous syntax. Therefore I never really made much of Ensemble, either.

However, Ensemble had a Java interface (implemented by a student in a semester project) which allowed me to program in
Java and use Ensemble underneath. The Java part would require that an Ensemble process was running somewhere on the same
machine, and would connect to it via a bidirectional pipe. The student had developed a simple protocol for talking to
the Ensemble engine, and extended the engine as well to talk back to Java.

However, I still needed to compile and install the Ensemble runtime for each different platform, which is exactly why
Java was developed in the first place: portability.

Therefore I started writing a simple framework (now JChannel), which would allow me to treat Ensemble as just another
group communication transport, which could be replaced at any time by a pure Java solution. And soon I found myself
working on a pure Java implementation of the group communication transport.

I figured that a pure Java implementation would have a much bigger impact than something written in Ensemble.
In the end I didn't spend much time writing scientific papers that nobody would read anyway (I guess I'm not a good
scientist, at least not a theoretical one), but rather code for JGroups, which could have a much bigger impact. For me,
knowing that real-life projects/products are using JGroups is much more satisfactory than having a paper accepted at a
conference/journal.

That's why, after my time was up, I left Cornell and academia altogether, and started a job in the telecom industry
in Silicon Valley.

At around that time (May 2000), SourceForge had just opened its site, and I decided to use it for hosting JGroups.
This was a major boost for JGroups because now other developers could work on the code. From then on, the page hits
and download numbers for JGroups have steadily risen.

In the fall of 2002, Sacha Labourey contacted me, letting me know that JGroups was being used by JBoss for
their clustering implementation. I joined JBoss in 2003 and have been working on JGroups and JBossCache ever since. My
goal is to make JGroups the most widely used clustering software in Java ...

I want to thank all contributors to JGroups, present and past, for their work. Without you, this project would never
have taken off the ground.

I also want to thank Ken Birman and Robbert VanRenesse for many fruitful discussions of all aspects
of group communication in particular and distributed systems in general.


I want to dedicate this manual to Jeannette, Michelle and Nicole.

Bela Ban, San Jose, Aug 2002, Kreuzlingen Switzerland 2014

include::./overview.adoc[Overview]

include::./installation.adoc.tmp[Installation]

include::./api.adoc[API]

include::./blocks.adoc[Building blocks]

include::./advanced.adoc[Advanced topics]

include::./protocols.adoc.tmp[Protocol list]

