You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2013/04/19 09:14:36 UTC
svn commit: r1469716 -
/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
Author: jbonofre
Date: Fri Apr 19 07:14:36 2013
New Revision: 1469716
URL: http://svn.apache.org/r1469716
Log:
Fix TCCL in the HazelcastGroupManager
Modified:
karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java?rev=1469716&r1=1469715&r2=1469716&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java Fri Apr 19 07:14:36 2013
@@ -113,50 +113,68 @@ public class HazelcastGroupManager imple
}
public void destroy() {
- // update the group
- Node local = this.getNode();
- Set<Group> groups = this.listGroups(local);
- for (Group group : groups) {
- String groupName = group.getName();
- group.getNodes().remove(local);
- listGroups().put(groupName, group);
- }
- // shutdown the group consumer/producers
- for (Map.Entry<String, EventConsumer> consumerEntry : groupConsumer.entrySet()) {
- EventConsumer consumer = consumerEntry.getValue();
- consumer.stop();
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
+ // update the group
+ Node local = this.getNode();
+ Set<Group> groups = this.listGroups(local);
+ for (Group group : groups) {
+ String groupName = group.getName();
+ group.getNodes().remove(local);
+ listGroups().put(groupName, group);
+ }
+ // shutdown the group consumer/producers
+ for (Map.Entry<String, EventConsumer> consumerEntry : groupConsumer.entrySet()) {
+ EventConsumer consumer = consumerEntry.getValue();
+ consumer.stop();
+ }
+ groupConsumer.clear();
+ groupProducers.clear();
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
- groupConsumer.clear();
- groupProducers.clear();
}
@Override
public Node getNode() {
- Node node = null;
- Cluster cluster = instance.getCluster();
- if (cluster != null) {
- Member member = cluster.getLocalMember();
- node = new HazelcastNode(member.getInetSocketAddress().getHostName(), member.getInetSocketAddress().getPort());
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
+ Node node = null;
+ Cluster cluster = instance.getCluster();
+ if (cluster != null) {
+ Member member = cluster.getLocalMember();
+ node = new HazelcastNode(member.getInetSocketAddress().getHostName(), member.getInetSocketAddress().getPort());
+ }
+ return node;
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
- return node;
}
public Group createGroup(String groupName) {
- Group group = listGroups().get(groupName);
- if (group == null) {
- group = new Group(groupName);
- }
- if (!listGroups().containsKey(groupName)) {
- copyGroupConfiguration(Configurations.DEFAULT_GROUP_NAME, groupName);
- listGroups().put(groupName, group);
- try {
- // store the group list to configuration admin
- persist(listGroups());
- } catch (Exception e) {
- LOGGER.warn("CELLAR HAZELCAST: can't store group list", e);
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
+ Group group = listGroups().get(groupName);
+ if (group == null) {
+ group = new Group(groupName);
+ }
+ if (!listGroups().containsKey(groupName)) {
+ copyGroupConfiguration(Configurations.DEFAULT_GROUP_NAME, groupName);
+ listGroups().put(groupName, group);
+ try {
+ // store the group list to configuration admin
+ persist(listGroups());
+ } catch (Exception e) {
+ LOGGER.warn("CELLAR HAZELCAST: can't store group list", e);
+ }
}
+ return group;
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
- return group;
}
public void deleteGroup(String groupName) {
@@ -206,13 +224,19 @@ public class HazelcastGroupManager imple
}
public boolean isLocalGroup(String groupName) {
- Set<Group> localGroups = this.listLocalGroups();
- for (Group localGroup : localGroups) {
- if (localGroup.getName().equals(groupName)) {
- return true;
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
+ Set<Group> localGroups = this.listLocalGroups();
+ for (Group localGroup : localGroups) {
+ if (localGroup.getName().equals(groupName)) {
+ return true;
+ }
}
+ return false;
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
- return false;
}
public Set<Group> listAllGroups() {
@@ -297,87 +321,99 @@ public class HazelcastGroupManager imple
}
public void registerGroup(Group group) {
- String groupName = group.getName();
- createGroup(groupName);
-
- LOGGER.info("Registering group {}.", groupName);
- Properties serviceProperties = new Properties();
- serviceProperties.put("type", "group");
- serviceProperties.put("name", groupName);
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
- if (!producerRegistrations.containsKey(groupName)) {
- EventProducer producer = groupProducers.get(groupName);
- if (producer == null) {
- producer = eventTransportFactory.getEventProducer(groupName, Boolean.TRUE);
- groupProducers.put(groupName, producer);
- }
+ String groupName = group.getName();
+ createGroup(groupName);
- ServiceRegistration producerRegistration = bundleContext.registerService(EventProducer.class.getCanonicalName(), producer, serviceProperties);
- producerRegistrations.put(groupName, producerRegistration);
- }
+ LOGGER.info("Registering 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);
+ }
- 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 producerRegistration = bundleContext.registerService(EventProducer.class.getCanonicalName(), producer, serviceProperties);
+ producerRegistrations.put(groupName, producerRegistration);
}
- ServiceRegistration consumerRegistration = bundleContext.registerService(EventConsumer.class.getCanonicalName(), consumer, serviceProperties);
- consumerRegistrations.put(groupName, consumerRegistration);
- }
- group.getNodes().add(getNode());
- listGroups().put(groupName, group);
+ 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, serviceProperties);
+ consumerRegistrations.put(groupName, consumerRegistration);
+ }
- //Add group to configuration
- try {
- Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
- Dictionary<String, String> properties = configuration.getProperties();
- String groups = properties.get(Configurations.GROUPS_KEY);
- if (groups == null || (groups.trim().length() < 1)) {
- groups = groupName;
- } else {
+ group.getNodes().add(getNode());
+ listGroups().put(groupName, group);
- Set<String> groupNamesSet = convertStringToSet(groups);
- groupNamesSet.add(groupName);
- groups = convertSetToString(groupNamesSet);
- }
+ // add group to configuration
+ try {
+ Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
+ Dictionary<String, String> properties = configuration.getProperties();
+ String groups = properties.get(Configurations.GROUPS_KEY);
+ if (groups == null || (groups.trim().length() < 1)) {
+ groups = groupName;
+ } else {
+ Set<String> groupNamesSet = convertStringToSet(groups);
+ groupNamesSet.add(groupName);
+ groups = convertSetToString(groupNamesSet);
+ }
- if (groups == null || (groups.trim().length() < 1)) {
- groups = groupName;
+ if (groups == null || (groups.trim().length() < 1)) {
+ groups = groupName;
+ }
+ properties.put(Configurations.GROUPS_KEY, groups);
+ configuration.update(properties);
+ } catch (IOException e) {
+ LOGGER.error("Error reading group configuration {}", group);
}
- properties.put(Configurations.GROUPS_KEY, groups);
- configuration.update(properties);
- } catch (IOException e) {
- LOGGER.error("Error reading group configuration {}", group);
- }
- //Sync
- 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.isSyncEnabled(group)) {
- synchronizer.pull(group);
- synchronizer.push(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.isSyncEnabled(group)) {
+ synchronizer.pull(group);
+ synchronizer.push(group);
+ }
+ bundleContext.ungetService(ref);
}
- bundleContext.ungetService(ref);
}
+ } catch (InvalidSyntaxException e) {
+ LOGGER.error("Error looking up for synchronizers.", e);
}
- } catch (InvalidSyntaxException e) {
- LOGGER.error("Error looking up for synchronizers.", e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
}
public void registerGroup(String groupName) {
- Group group = listGroups().get(groupName);
- if (group == null) {
- group = new Group(groupName);
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
+ Group group = listGroups().get(groupName);
+ if (group == null) {
+ group = new Group(groupName);
+ }
+ registerGroup(group);
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
- registerGroup(group);
}
public void unRegisterGroup(String groupName) {
@@ -385,55 +421,58 @@ public class HazelcastGroupManager imple
}
public void unRegisterGroup(Group group) {
- String groupName = group.getName();
- //1. Remove local node from group.
- group.getNodes().remove(getNode());
- listGroups().put(groupName, group);
+ ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(combinedClassLoader);
+ String groupName = group.getName();
+ // remove local node from group.
+ group.getNodes().remove(getNode());
+ listGroups().put(groupName, group);
- //2. Unregister group consumers
- if (consumerRegistrations != null && !consumerRegistrations.isEmpty()) {
- ServiceRegistration consumerRegistration = consumerRegistrations.get(groupName);
- if (consumerRegistration != null) {
- consumerRegistration.unregister();
- consumerRegistrations.remove(groupName);
+ // unregister group consumers
+ if (consumerRegistrations != null && !consumerRegistrations.isEmpty()) {
+ ServiceRegistration consumerRegistration = consumerRegistrations.get(groupName);
+ if (consumerRegistration != null) {
+ consumerRegistration.unregister();
+ consumerRegistrations.remove(groupName);
+ }
}
- }
-
- //3. Unregister group producers
- if (producerRegistrations != null && !producerRegistrations.isEmpty()) {
- ServiceRegistration producerRegistration = producerRegistrations.get(groupName);
- if (producerRegistration != null) {
- producerRegistration.unregister();
- producerRegistrations.remove(groupName);
+ // unregister group producers
+ if (producerRegistrations != null && !producerRegistrations.isEmpty()) {
+ ServiceRegistration producerRegistration = producerRegistrations.get(groupName);
+ if (producerRegistration != null) {
+ producerRegistration.unregister();
+ producerRegistrations.remove(groupName);
+ }
}
- }
-
- //4. Remove Consumers & Producers
- groupProducers.remove(groupName);
- EventConsumer consumer = groupConsumer.remove(groupName);
- if (consumer != null) {
- consumer.stop();
- }
-
- //Remove group from configuration
- try {
- Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
- Dictionary<String, String> properties = configuration.getProperties();
- String groups = properties.get(Configurations.GROUPS_KEY);
- if (groups == null || (groups.trim().length() < 1)) {
- groups = "";
- } else if (groups.contains(groupName)) {
- Set<String> groupNamesSet = convertStringToSet(groups);
- groupNamesSet.remove(groupName);
- groups = convertSetToString(groupNamesSet);
+ // remove Consumers & Producers
+ groupProducers.remove(groupName);
+ EventConsumer consumer = groupConsumer.remove(groupName);
+ if (consumer != null) {
+ consumer.stop();
+ }
+ // remove group from configuration
+ try {
+ Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
+ Dictionary<String, String> properties = configuration.getProperties();
+ String groups = properties.get(Configurations.GROUPS_KEY);
+ if (groups == null || (groups.trim().length() < 1)) {
+ groups = "";
+ } else if (groups.contains(groupName)) {
+ Set<String> groupNamesSet = convertStringToSet(groups);
+ groupNamesSet.remove(groupName);
+ groups = convertSetToString(groupNamesSet);
+ }
+ properties.put(Configurations.GROUPS_KEY, groups);
+ configuration.update(properties);
+ } catch (IOException e) {
+ LOGGER.error("Error reading group configuration {}", group);
}
- properties.put(Configurations.GROUPS_KEY, groups);
- configuration.update(properties);
- } catch (IOException e) {
- LOGGER.error("Error reading group configuration {}", group);
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
}
}