The JGroups project
Switch branches/tags
show bla2 JGroups_3_3_0_Alpha2 JGroups_3_2_7_Final JGroups_3_2_6_Final JGroups_3_2_5_Final JGroups_3_2_4_Final JGroups_3_2_3_Final JGroups_3_2_2_Final JGroups_3_2_1_Final JGroups_3_2_0_Final JGroups_3_2_0_CR2 JGroups_3_2_0_CR1 JGroups_3_2_0_Beta1 JGroups_3_2_0_Alpha1 JGroups_3_1_0_Final JGroups_3_1_0_Beta1 JGroups_3_1_0_Alpha3 JGroups_3_1_0_Alpha2 JGroups_3_0_16_Final JGroups_3_0_14_Final JGroups_3_0_13_Final JGroups_3_0_12_Final JGroups_3_0_11_Final JGroups_3_0_10_Final JGroups_3_0_9_Final JGroups_3_0_8_Final JGroups_3_0_7_Final JGroups_3_0_6_Final JGroups_3_0_5_Final JGroups_3_0_4_Final JGroups_3_0_3_Final JGroups_3_0_2_Final JGroups_3_0_1_Final JGroups_3_0_0_Final JGroups_3_0_0_CR5 JGroups_3_0_0_CR4 JGroups_2_12_2_Final JGroups_2_12_1_3 JGroups_2_12_1_2 JGroups_2_12_1_1 JGroups_2_12_1 JGroups_2_12_0_Final JGroups_2_12_0_Beta1 JGroups_2_11_1_Final JGroups_2_11_0_GA JGroups_2_11_0_Alpha4 JGroups_2_11_0_Alpha1 JGroups_2_10_0_GA JGroups_2_10_0_CR1 JGroups_2_10_0_Beta1 JGroups_2_10_0_Alpha2 JGroups_2_10_0_Alpha1 JGroups_2_9_0_GA JGroups_2_8_0_GA JGroups_2_8_0_CR6 JGroups_2_8_0_CR4 JGroups_2_8_0_CR2 JGroups_2_8_0_CR1 JGroups_2_8_Beta_2 JGroups_2_8_Beta1 JGroups_2_7 JGroups_2_7_Beta1 JGroups_2_6_22_Final JGroups_2_6_21_Final JGroups_2_6_20 JGroups_2_6_19_GA JGroups_2_6_17_GA JGroups_2_6_16 JGroups_2_6_15_GA JGroups_2_6_13_GA JGroups_2_6_13_CR2 JGroups_2_6_13_CR1 JGroups_2_6_12_GA JGroups_2_6_11_GA JGroups_2_6_10_GA JGroups_2_6_9_GA JGroups_2_6_8_GA JGroups_2_6_7_GA JGroups_2_6_6_GA JGroups_2_6_5_GA JGroups_2_6_4_GA JGroups_2_6_4_CR1 JGroups_2_6_3_GA JGroups_2_6_3_CR2 JGroups_2_6_3_CR1 JGroups_2_6_2 JGroups_2_6_1 JGroups_2_6_beta_1 JGroups_2_6_CR1 JGroups_2_5_2 JGroups_2_5_0_PREVIEW JGroups_2_5 JGroups_2_5_CR_1 JGroups_2_5_BETA_2 JGroups_2_5_BETA_1 JGroups_2_5_ALPHA1 JGroups_2_4_10_Final JGroups_2_4_9_GA JGroups_2_4_7_GA
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


       JGroups - A Framework for Group Communication in Java

			    March 3, 1998

			       Bela Ban
			   4114 Upson Hall
			  Cornell University
			   Ithaca, NY 14853

JGroups is a Java library for reliable group communication. It
consists of 3 parts: (1) a socket-like API for application
development, (2) a protocol stack, which implements reliable
communication, and (3) a set of building blocks, which give the
developer high-level abstractions (e.g. ReplicatedHashMap, an
implementation of java.util.Map).

The API (a channel) looks like a socket: there are methods for joining
and leaving groups, sending and receiving messages,
getting the shared group state, and registering for notifications when
a member joins, or an existing member leaves or crashes.

The protocol stack is a list of protocols, through which each
message passes. Each protocol implements an up() and down()
method, and may modify, reorder, encrypt, fragment/unfragment, drop,
or pass a message up/down. The protocol stack is created
according to a specification given when a channel is created. New
protocols can be plugged into the stack easily.

Building blocks hide the channel and provide a higher abstraction.
Example: ReplicatedHashMap implements java.util.Map and implements
all methods that change the map (clear(), put(), remove()).
Those methods are invoked on all hashmap instances in the same group
simultaneously, so that all hashmaps have the same state.
A new hashmap uses a state transfer protocol to initially obtain
the shared group state from an existing member. This allows for 
replication of data structures across processes.

Group communication is important in the following situations:

 - A service has to be replicated for availability. As long as at
   least one of the servers remains operational, the service itself
   remains operational

 - Service requests have to be balanced between a set of servers

 - A large number of objects have to be managed as one entity (e.g. a
   management domain)

 - Notification service / push technology: receivers subscribe to a
   channel, senders send data to the channels, channels distribute
   data to all receivers subscribed to the channel.
   Used for example for video distribution, videoconferencing
JGroups deliberately models a rather low-level message-oriented
middleware (MOM) model. The reason is that we don't want to impose a
one-size-fits-all model on the programmer, who usually will want to
extend the model in various (previously unconceived) ways anyway.

Providing low level Java classes allows the programmer to
extend/replace classes at will, as the granularity of the system is