JGroups

JGroups is a toolkit for reliable group communication. Processes can join a group, send messages to all members or single members, and receive messages from members in the group. The system keeps track of the members in every group, and notifies group members when a new member joins, or an existing member leaves or crashes. A group is identified by its name. Groups do not have to be created explicitly; when a process joins a non-existing group, that group will be created automatically. Member processes of a group can be located on the same host, within the same LAN, or across a WAN. A member can be part of multiple groups.
Packages 
Package Description
org.jgroups
Provides top-level public JGroups classes such as Channel, Message, etc.
org.jgroups.annotations  
org.jgroups.auth  
org.jgroups.blocks
Provides building blocks that are layered on top of channels.
org.jgroups.blocks.atomic  
org.jgroups.blocks.cs  
org.jgroups.client  
org.jgroups.conf
Provides ways to configure a protocol stack.
org.jgroups.demos
Provides demonstrations of JGroups functionality.
org.jgroups.fork  
org.jgroups.jmx  
org.jgroups.logging  
org.jgroups.nio  
org.jgroups.protocols
Provides implementations of transport protocols which are responsible for sending and receiving messages to/from the network.
org.jgroups.protocols.dns  
org.jgroups.protocols.pbcast  
org.jgroups.protocols.relay  
org.jgroups.protocols.relay.config  
org.jgroups.stack
Support for managing protocol stacks.
org.jgroups.util
Provides useful functionality which cannot be assigned to any particular other package.