JGroups is a toolkit for reliable multicast communication.
JGroups is a toolkit for reliable multicast communication. (Note that this doesn't necessarily mean IP Multicast, JGroups can also use transports such as TCP).
It can be used to create groups of processes whose members can send messages to each other.
Here are some key features of "JGroups":
· Group creation and deletion. Group members can be spread across LANs or WANs
· Joining and leaving of groups
· Membership detection and notification about joined/left/crashed members
· Detection and removal of crashed members
· Sending and receiving of member-to-group messages (point-to-multipoint)
· Sending and receiving of member-to-member messages (point-to-point)
Flexible Protocol Stack
The most powerful feature of JGroups is its flexible protocol stack, which allows developers to adapt it to exactly match their application requirements and network characteristics.
The benefit of this is that you only pay for what you use. By mixing and matching protocols, various differing application requirements can be satisfied.
JGroups comes with a number of protocols (but anyone can write their own), for example:
· Transport protocols: UDP (IP Multicast), TCP, JMS
· Fragmentation of large messages
· Reliable unicast and multicast message transmission. Lost messages are retransmitted
· Failure detection: crashed members are excluded from the membership
· Ordering protocols: Atomic (all-or-none message delivery), Fifo, Causal, Total Order (sequencer or token based)
What Does JGroups Buy Me ?
JGroups allows developers to create reliable multipoint (multicast) applications where reliability is a deployment issue, and does not have to be implemented by the application developer. This saves application developers significant amounts of time, and allows for the application to be deployed in different environments, without having to change code.
· Java Runtime Environment (JRE) 1.5 or later
What's New in This Release:
· [JGRP-668] - Deadlock condition in BARRIER
· [JGRP-692] - Unable to recover from suspect/merge, with auto-reconnect
· [JGRP-699] - NAKACK: merging of digests is incorrect
· [JGRP-702] - GossipClient: make socket creation non-blocking
· [JGRP-704] - Configurator.startProtocolStack() throws NPE if cluster_name is null
· [JGRP-706] - with dynamic keys in ENCRYPT, a node taking over coordinator can block itself from taking over the view
· [JGRP-707] - stats logic NPE in NAKACK
· [JGRP-709] - FC.java was not handling view changes sent down from above
· [JGRP-721] - timeout and num_ping_requests hardcoded in Discovery
· [JGRP-724] - FD: temporary suspect (followed by unsuspect) leads to incorrect pingable_mbrs
· [JGRP-730] - JChannel.connect(): check if already connected
· [JGRP-732] - MPING: OutOfMemory exception can cause receiver thread to terminate
· [JGRP-736] - GMS.ViewHandler.run() view bundling not correctly checking if requests can be processed together...
· [JGRP-737] - Shared transport protocols use stack field from first channel created
· [JGRP-742] - UNICAST connection trashing during merge
· [JGRP-746] - FD: messages from members other than ping_dest causes missing-heartbeat count to be reset
· [JGRP-750] - Deadlock between GroupRequest and FLUSH during concurrent startup.
· [JGRP-751] - ReplicatedHashMap state becomes inconsistent after merge
· [JGRP-752] - JGroups leaks thread context classloader to internal threads
· [JGRP-754] - FC: ConcurrentModificationException in handleViewChange()
· [JGRP-756] - FLUSH still needs work
· [JGRP-759] - FLUSH: GMS potential problem
· [JGRP-768] - UDP: when ip_mcast=false, the destination of a Message is not null
· [JGRP-770] - Concurrent startup of many channels doesn't stabilize
· [JGRP-774] - STATE_TRANSFER: state transfer broken for large states
· [JGRP-780] - UNICAST: regular message not delivered (in some cases) until new message arrives
· [JGRP-781] - NAKACK: regular message not delivered (in some cases) until new message arrives
· [JGRP-784] - local_addr is null when reconnecting.
· [JGRP-787] - UNICAST over TCP with xmit_off=true: sending message in synchronized block leads to deadlocks
· [JGRP-788] - concurrent startup of multiple channels with shared transport is very slow, occasionally wedges.
· [JGRP-793] - TP: setting an OOB thread pool shuts it down
· [JGRP-644] - Shared transport: add cluster name to thread name for easier logging
· [JGRP-710] - VIEW_SYNC needs more statistics
· [JGRP-711] - BARRIER jmx beans not exposed
· [JGRP-713] - UNICAST: eager acks
· [JGRP-714] - MessageDispatcher log message needs more information
· [JGRP-717] - Message ordering protocol for TCP unicasts
· [JGRP-725] - FRAG: option to discard output stream, so we don't keep large buffers around
· [JGRP-728] - TP: add ID to individual threads in thread pool
· [JGRP-731] - MPING: discard packets whose length is not 4 or 16
· [JGRP-733] - JMX Registration of shared transport channels
· [JGRP-753] - cache object returned from Message.getObject() (deserialization occurs on every call)
· [JGRP-769] - RpcDispatcher should have a no-arg public constructor
· [JGRP-778] - Transport: discard messages sent from self if Channel.LOCAL option is false
· [JGRP-700] - FLUSH: flushing should span merge
· [JGRP-708] - persistence factory spits out error messages when it should be debug
· [JGRP-712] - Include shared transport configuration in test suite
· [JGRP-716] - TCP based configs need UNICAST for correct ordering
· [JGRP-722] - JChannel: if auto_get_state is set to true, but no state transfer protocol is present, then don't get state
· [JGRP-734] - Ship bouncycastle.jar without IDEA code
· [JGRP-738] - Transport: create receiver threads on CONNECT, not on start()
· [JGRP-745] - FD_SOCK: add timeout to create socket to peer
· [JGRP-749] - Simplify view casting sequence
· [JGRP-764] - Thread context classloaders: add ability to set TCCL when thread is created and unset it when thread is released
· [JGRP-783] - STABLE: last message dropped issue ?
· [JGRP-786] - UNICAST over TCP: xmit_off should not send ACKs
What's New in This Release: [ read full changelog ]
· [JGRP-849] - Concurrent connect of multiple channels with shared transport fails
· [JGRP-853] - Failure detection: multiple crashes not detected
· [JGRP-836] - Eliminate Linux cross-talk in MPING
· [JGRP-852] - GossipRouter/GossipClient: make sockets use SO_TIMEOUT and SO_LINGER
· [JGRP-846] - ExposedByteArrayOutputStream / ExposedDataOutputStream: override synchronized methods
· [JGRP-847] - ExposedByteArrayInputStream / ExposedDataInputStream: override synchronized methods with unsynchronized ones