The JGroups project

Overview

       JGroups - A Framework for Group Communication in Java
       ========================================================

			    March 3, 1998

			       Bela Ban
			   4114 Upson Hall
			  Cornell University
			   Ithaca, NY 14853
			  [email protected]
		       [email protected]


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
finer.




Comments
  • Remove elements of cluster when coordinator stops

    Remove elements of cluster when coordinator stops

    Currently, the JDBC_PING fails to clean up the database table like the FILE_PING cleans up its cluster file when the coordinator shuts down, this creates confusion when bringing the cluster back up sometimes as the new host will get stuck trying to delete a coordinator that no long exists in the database table.

    This fix attempts to align the JDBC_PING functionality more closely with FILE_PING.

    opened by douglasryanadams 14
  • BZ1211227 Extracting version dynamically

    BZ1211227 Extracting version dynamically

    Hey @belaban !

    Please take a look at proposed solution of https://bugzilla.redhat.com/show_bug.cgi?id=1211227.

    During JDG development we use our private fork and it is very easy to forget about updating the version. With "automatic" approach we won't have to do it manually.

    Could you please double check if I used the correct Classloader? I thought about using the one, which loaded the Version class (manifestAsStream = Version.class.getResourceAsStream("/version.properties");)

    Thanks!

    opened by slaskawi 14
  • JGRP-2503 Extend DataInput & DataOutput to avoid copy of byte[]

    JGRP-2503 Extend DataInput & DataOutput to avoid copy of byte[]

    opened by leonchen83 13
  • There is no OSGI bundle for jgroups

    There is no OSGI bundle for jgroups

    The actual maven configuration doesn't permit to create a OSGI bundle. I'm testing it with felix. I updated the pom.xml so if you use mvn install you get a OSGI bundle. Remains to configure it for ant

    opened by flashboss 13
  • When creating a view, the creator should be our own address

    When creating a view, the creator should be our own address

    I don't think that I've seen this cause problems, but it seems surprising and dangerous for a node A to create a view whose ViewID says that its creator is B (say). This must open up the possibility of two nodes creating two different views with the same ViewID, with confusion to follow.

    (I considered also changing this bit of code so that the local node was the coordinator. But I don't think that this ought to be necessary, so I've stuck with the smallest change that I think needs making).

    opened by dimbleby 12
  • building the OSGI metadatas through ant and a maven update

    building the OSGI metadatas through ant and a maven update

    Hi bela.....here there are the updates for OSGI. I simplified the pom.xml so we don't need to rewrite the packages names and I wrote an authomatism for ant to create a MANIFEST.MF through bndlib

    opened by flashboss 11
  • improve performance for Request.cancel

    improve performance for Request.cancel

    This pull-request fixes serious performance problems we encountered with 3.6.7-final when cancelling a lot of requests at once.

    The Problem can be tracked down to the RequestCorrelator, more exactly this.requests.values().remove(req). If the request Map has a lot of entries, removing by value gets really slow.

    The basic idea is to keep the request ID for each Request as part of the Object, so it can be used later to remove the value from the Map by key instead of value.

    opened by schaebo 10
  • ClassConfigurator add 2 method with parameter Supplier<T> supplier.

    ClassConfigurator add 2 method with parameter Supplier supplier.

    user define supplier that can allow user do some check dynamically when invoke readFrom method so that reduce memory copy.

    more details please refer to example

    Signed-off-by: Baoyi Chen [email protected]

    opened by leonchen83 9
  • [JGRP-2399] Problem with loading resources from the bundle root (/) in OSGI environment

    [JGRP-2399] Problem with loading resources from the bundle root (/) in OSGI environment

    [JGRP-2399] Problem with loading resources from the bundle root (/) in OSGI environment

    +moved resources to META-INF/resources +pushed version to 3.6.20.Final

    opened by stalyanov 9
  • Moved to 4.0.0-SNAPSHOT

    Moved to 4.0.0-SNAPSHOT

    Hey @belaban !

    Please take a look at proposed changes in versioning.

    Release repositories don't accept SNAPSHOTs by default and vice versa - snapshot repositories don't accept releases. Working on SNAPSHOT on daily basis will protect us from releasing artifacts by a mistake. Also this change is needed by CI SNAPSHOT job.

    Thanks Sebastian

    opened by slaskawi 9
  • Test to demonstrate MERGE3 speed on tcp stack

    Test to demonstrate MERGE3 speed on tcp stack

    Hi Bela,

    here is a manual test for the issue I brought up at last meeting in Milan with MERGE3 when using TCP stack. The test configures Infinispan-like stack, creates partition by installing a view and waits for partition to merge back. This yields results like this one (runs exactly the same setup and only switches TCP/UDP):

    -------------------------------------------------------------------
    Results for TCP
    Min merge time=48034
    Max merge time=101050
    Avg merge time=86958.1
    ===================================================================
    Results for UDP
    Min merge time=48019
    Max merge time=48104
    Avg merge time=48056.0
    ===================================================================
    

    The problem being that merges with fairly low intervals 10-30 seconds can take actually up to 2 minutes for merge. Let me know what you think.

    opened by rhusar 8
An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or to turn an existing project into a devops project using open source software (Git, Docker, Jenkins..)

DevOpsify Description An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or t

obaydah bouifadene 14 Nov 8, 2022
JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.

pact-jvm JVM implementation of the consumer driven contract library pact. From the Ruby Pact website: Define a pact between service consumers and prov

Pact Foundation 962 Dec 31, 2022
This open source project allows you to easily integrate Camunda's External Task Clients into Micronaut projects: simply add a dependency in your Micronaut project

micronaut-camunda-external-client This open source project allows you to easily integrate Camunda 's External Task Clients into Micronaut projects. Mi

Novatec Consulting GmbH 19 Dec 18, 2022
The project aim at easier to start a spring boot/cloud project.

easy-starters 是一个公共 starter 集合,旨在帮助 java 开发者快速构建 Springboot 与 Spring Cloud 项目. lx-starters的环境要求 JDK requirement: JDK 1.8+ Spring booter 2.x,+ 如何引用lx-s

null 3 Jul 11, 2022
Zero is a core test automation project that can be used as a basis for any kind of test automation project (API, Browser, Mobile)

Zero Zero is our feature rich, core test automation framework, that can be used as an underlying automation framework for any/and all kind of test aut

Pramod Kumar Yadav 10 Dec 16, 2022
This project is an Android Studio plugin version of BlackObfuscator, it supports obfuscating code automatically. More information about this project are in BlackObfuscator.

DEX控制流混淆插件版 · BlackObfuscator-ASPlugin English Version 本项目为 BlackObfuscator 的Android Studio插件版,支持打包自动化混淆。功能及介绍方面请查看 BlackObfuscator 源项目 注意事项 首要注意:Blac

null 229 Dec 31, 2022
This project provides an advanced baseline to help you kick start a Spring project.

?? Advanced Spring Scaffold The Spring Framework is an application framework and inversion of control container for the Java platform. This project wa

André de Sousa 22 Oct 15, 2022
This is a Selenium test project for the Champlain PetClinic project

champlain_petclinic_selenium This is a Selenium test project for the Champlain PetClinic project Selenium Login Test Helper class info With the additi

null 3 Oct 31, 2021
A project to cause (controlled) destruction on your jvm application

Perses Cause (controlled) destruction to your jvm application Perses (Ancient Greek: Πέρσης) was the Titan god of destruction. His name is derived fro

Nikolaos Kanakis 62 Dec 27, 2022
The codebase for the narayana project

Narayana Website: http://narayana.io Twitter: https://twitter.com/narayana_io, using twitter handle #narayanaio Getting help If you need help with usi

null 197 Dec 14, 2022
Main Portal page for the Jackson project

Jackson Project Home @github This is the home page of the Jackson Project. What is New? Oct 1, 2020: Jackson participates in Hacktoberfest2020 and we

FasterXML, LLC 7.9k Jan 2, 2023
Eclipse Yasson project

Eclipse Yasson Yasson is a Java framework which provides a standard binding layer between Java classes and JSON documents. This is similar to what JAX

Eclipse EE4J 183 Aug 31, 2022
GWT Open Source Project

GWT GWT is the official open source project for GWT releases 2.5 and onwards. In this document you have some quick instructions to build the SDK from

GWT 1.4k Jan 5, 2023
HornetQ is an open source project to build a multi-protocol, embeddable, very high performance, clustered, asynchronous messaging system.

HornetQ If you need information about the HornetQ project please go to http://community.jboss.org/wiki/HornetQ http://www.jboss.org/hornetq/ This file

HornetQ 245 Dec 3, 2022
The easiest way to integrate Maven into your project!

Maven Wrapper Ongoing Migration to Apache Maven The project codebase has been accepted to be included in the upstream Apache Maven project itself. Cur

null 1.6k Dec 23, 2022
Master repository for the JGraphT project

JGraphT Released: June 14, 2020 Written by Barak Naveh and Contributors (C) Copyright 2003-2020, by Barak Naveh and Contributors. All rights reserved.

JGraphT 2.3k Dec 30, 2022
JGit project repository (jgit)

Java Git An implementation of the Git version control system in pure Java. This project is licensed under the EDL (Eclipse Distribution License). JGit

Eclipse Foundation 1k Jul 5, 2021
A JNI code generator based on the JNI generator used by the eclipse SWT project

HawtJNI Description HawtJNI is a code generator that produces the JNI code needed to implement java native methods. It is based on the jnigen code gen

FuseSource 153 Nov 17, 2022