in hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java [430:516]
public void registerGroup(Group group) {
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(combinedClassLoader);
String groupName = group.getName();
LOGGER.debug("CELLAR HAZELCAST: registering cluster group {}.", groupName);
Properties serviceProperties = new Properties();
serviceProperties.put("type", "group");
serviceProperties.put("name", groupName);
if (!producerRegistrations.containsKey(groupName)) {
EventProducer producer = groupProducers.get(groupName);
if (producer == null) {
producer = eventTransportFactory.getEventProducer(groupName, Boolean.TRUE);
groupProducers.put(groupName, producer);
}
ServiceRegistration producerRegistration = bundleContext.registerService(EventProducer.class.getCanonicalName(), producer, (Dictionary) serviceProperties);
producerRegistrations.put(groupName, producerRegistration);
}
if (!consumerRegistrations.containsKey(groupName)) {
EventConsumer consumer = groupConsumer.get(groupName);
if (consumer == null) {
consumer = eventTransportFactory.getEventConsumer(groupName, true);
groupConsumer.put(groupName, consumer);
} else if (!consumer.isConsuming()) {
consumer.start();
}
ServiceRegistration consumerRegistration = bundleContext.registerService(EventConsumer.class.getCanonicalName(), consumer, (Dictionary) serviceProperties);
consumerRegistrations.put(groupName, consumerRegistration);
}
Node node = getNode();
group.getNodes().add(node);
Map<Node, Set<String>> map = getClusterGroups();
Set<String> groupNames = (Set<String>) map.get(node);
groupNames = new HashSet<String>(groupNames);
groupNames.add(groupName);
map.put(node, groupNames);
// add group to configuration
try {
Configuration configuration = getConfigurationForNode();
if (configuration != null) {
Dictionary<String, Object> properties = configuration.getProperties();
if (properties != null) {
String groups = (String) properties.get(Configurations.GROUPS_KEY);
if (groups == null || groups.isEmpty()) {
groups = groupName;
} else {
Set<String> groupNamesSet = convertStringToSet(groups);
groupNamesSet.add(groupName);
groups = convertSetToString(groupNamesSet);
}
if (groups == null || groups.isEmpty()) {
groups = groupName;
}
properties.put(Configurations.GROUPS_KEY, groups);
updateConfiguration(configuration, properties);
}
}
} catch (IOException e) {
LOGGER.error("CELLAR HAZELCAST: error reading cluster group configuration {}", group);
}
// launch the synchronization on the group
try {
ServiceReference[] serviceReferences = bundleContext.getAllServiceReferences("org.apache.karaf.cellar.core.Synchronizer", null);
if (serviceReferences != null && serviceReferences.length > 0) {
for (ServiceReference ref : serviceReferences) {
Synchronizer synchronizer = (Synchronizer) bundleContext.getService(ref);
if (synchronizer != null) {
synchronizer.sync(group);
}
bundleContext.ungetService(ref);
}
}
} catch (InvalidSyntaxException e) {
LOGGER.error("CELLAR HAZELCAST: failed to look for synchronizers", e);
}
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
}