
org.wildfly.clustering.server.infinispan.EmbeddedCacheManagerGroup Maven / Gradle / Ivy
/*
* Copyright The WildFly Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.wildfly.clustering.server.infinispan;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.wildfly.clustering.server.GroupMembership;
import org.wildfly.clustering.server.GroupMembershipEvent;
import org.wildfly.clustering.server.GroupMembershipListener;
import org.wildfly.clustering.server.GroupMembershipMergeEvent;
import org.wildfly.clustering.server.Registration;
import org.wildfly.clustering.server.group.Group;
import org.wildfly.clustering.server.group.GroupMember;
/**
* A group composed of embedded cache manager members.
* @param the group member address type
* @param the group member type
* @author Paul Ferraro
*/
public class EmbeddedCacheManagerGroup, M extends GroupMember> implements CacheContainerGroup {
private final Group group;
private final Function wrapper;
private final CacheContainerGroupMemberFactory factory;
private final CacheContainerGroupMember localMember;
public EmbeddedCacheManagerGroup(EmbeddedCacheManagerGroupConfiguration configuration) {
this.group = configuration.getGroup();
this.factory = new EmbeddedCacheManagerGroupMemberFactory(configuration);
this.wrapper = configuration.getAddressWrapper().compose(GroupMember::getAddress).andThen(this.factory::createGroupMember);
this.localMember = this.wrapper.apply(this.group.getLocalMember());
}
@Override
public String getName() {
return this.group.getName();
}
@Override
public CacheContainerGroupMember getLocalMember() {
return this.localMember;
}
@Override
public GroupMembership getMembership() {
return this.wrap(this.group.getMembership());
}
@Override
public boolean isSingleton() {
return this.group.isSingleton();
}
@Override
public Registration register(GroupMembershipListener listener) {
return this.group.register(new GroupMembershipListener<>() {
@Override
public void updated(GroupMembershipEvent event) {
listener.updated(new CacheContainerGroupMembershipEvent(event));
}
@Override
public void split(GroupMembershipEvent event) {
listener.split(new CacheContainerGroupMembershipEvent(event));
}
@Override
public void merged(GroupMembershipMergeEvent event) {
listener.merged(new CacheContainerGroupMembershipMergeEvent(event));
}
});
}
@Override
public CacheContainerGroupMemberFactory getGroupMemberFactory() {
return this.factory;
}
GroupMembership wrap(GroupMembership membership) {
return new CacheGroupMembership<>(membership, this.wrapper);
}
static class CacheGroupMembership, M extends GroupMember> implements GroupMembership {
private final GroupMembership membership;
private final List members;
private final CacheContainerGroupMember coordinator;
CacheGroupMembership(GroupMembership membership, Function wrapper) {
this.membership = membership;
this.members = membership.getMembers().stream().map(wrapper).collect(Collectors.toUnmodifiableList());
this.coordinator = wrapper.apply(membership.getCoordinator());
}
@Override
public CacheContainerGroupMember getCoordinator() {
return this.coordinator;
}
@Override
public List getMembers() {
return this.members;
}
@Override
public int hashCode() {
return this.membership.hashCode();
}
@Override
public boolean equals(Object object) {
if (!(object instanceof CacheGroupMembership)) return false;
@SuppressWarnings("unchecked")
CacheGroupMembership membership = (CacheGroupMembership) object;
return this.membership.equals(membership.membership);
}
@Override
public String toString() {
return this.membership.toString();
}
}
class CacheContainerGroupMembershipEvent implements GroupMembershipEvent {
private final GroupMembership previousMembership;
private final GroupMembership currentMembership;
CacheContainerGroupMembershipEvent(GroupMembershipEvent event) {
this.previousMembership = EmbeddedCacheManagerGroup.this.wrap(event.getPreviousMembership());
this.currentMembership = EmbeddedCacheManagerGroup.this.wrap(event.getCurrentMembership());
}
@Override
public GroupMembership getPreviousMembership() {
return this.previousMembership;
}
@Override
public GroupMembership getCurrentMembership() {
return this.currentMembership;
}
}
class CacheContainerGroupMembershipMergeEvent extends CacheContainerGroupMembershipEvent implements GroupMembershipMergeEvent {
private final List> partitions;
CacheContainerGroupMembershipMergeEvent(GroupMembershipMergeEvent event) {
super(event);
this.partitions = event.getPartitions().stream().map(EmbeddedCacheManagerGroup.this::wrap).collect(Collectors.toUnmodifiableList());
}
@Override
public List> getPartitions() {
return this.partitions;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy