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.
The JGroups project
Overview
Comments
-
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.
-
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!
-
JGRP-2503 Extend DataInput & DataOutput to avoid copy of byte[]
ByteArrayDataInputStream
add an extra methodreadBuffer(int)
that avoid byte array copy inreadFully(byte[])
method. this method also can used in user define Streamable interface. Ticket https://issues.redhat.com/browse/JGRP-2503 Signed-off-by: Baoyi Chen [email protected] -
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
-
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).
-
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
-
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.
-
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]
-
[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
-
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
-
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.
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
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
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
This repository contains the IRPact agent-based modeling framework for innovation diffusion of sustainable product in private households. It has been developed within the SUSIC project at Leipzig University and the Institute for Applied Informatics by the project members.
IRPact IRPact is a framework for agent-based modelling of innovation diffusion of sustainable products in private households. It is written in the Jav
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
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
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
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
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
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
Manifold plugs into Java to supplement it with powerful features, from Type-safe Metaprogramming (direct access to GraphQL, JSON, XML, etc.), Extension Methods, Operator Overloading, and Unit Expressions to an integrated Template Engine and a Preprocessor. All fully supported in IntelliJ IDEA and Android Studio. Simply add Manifold to your project and begin taking advantage of it.
What is Manifold? Manifold plugs into Java to supplement it with powerful features, including: Type-safe Meta-programming Extension Methods Operator O
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
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
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
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
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
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
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.
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
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