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 2012/10/31 11:34:05 UTC

svn commit: r1404078 - in /karaf/cellar/branches/cellar-2.2.x: assembly/src/main/resources/ core/src/main/java/org/apache/karaf/cellar/core/ core/src/main/java/org/apache/karaf/cellar/core/control/ hazelcast/src/main/java/org/apache/karaf/cellar/hazelc...

Author: jbonofre
Date: Wed Oct 31 10:34:04 2012
New Revision: 1404078

URL: http://svn.apache.org/viewvc?rev=1404078&view=rev
Log:
[KARAF-1414] Add persistence for cluster consumer

Modified:
    karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/node.cfg
    karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/Configurations.java
    karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ConsumerSwitchCommandHandler.java
    karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ProducerSwitchCommandHandler.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicConsumer.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml

Modified: karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/node.cfg
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/node.cfg?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/node.cfg (original)
+++ karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/node.cfg Wed Oct 31 10:34:04 2012
@@ -1 +1,3 @@
-groups = default
\ No newline at end of file
+groups = default
+producer = true
+consumer = true
\ No newline at end of file

Modified: karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/Configurations.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/Configurations.java?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/Configurations.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/Configurations.java Wed Oct 31 10:34:04 2012
@@ -23,6 +23,7 @@ public class Configurations {
     public static final String GROUPS_KEY = "groups";
     public static final String NODE = "org.apache.karaf.cellar.node";
     public static final String PRODUCER = "producer";
+    public static final String CONSUMER = "consumer";
 
     public static final String SEPARATOR = ".";
     public static final String DELIMETER = ",";

Modified: karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ConsumerSwitchCommandHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ConsumerSwitchCommandHandler.java?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ConsumerSwitchCommandHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ConsumerSwitchCommandHandler.java Wed Oct 31 10:34:04 2012
@@ -13,8 +13,12 @@
  */
 package org.apache.karaf.cellar.core.control;
 
+import org.apache.karaf.cellar.core.Configurations;
 import org.apache.karaf.cellar.core.Consumer;
 import org.apache.karaf.cellar.core.command.CommandHandler;
+import org.osgi.service.cm.Configuration;
+
+import java.util.Dictionary;
 
 /**
  * Consumer switch command handler.
@@ -32,24 +36,46 @@ public class ConsumerSwitchCommandHandle
      * @param command
      */
     public ConsumerSwitchResult execute(ConsumerSwitchCommand command) {
-        //Query
+        // query
         if (command.getStatus() == null) {
             return new ConsumerSwitchResult(command.getId(), Boolean.TRUE, consumer.getSwitch().getStatus().getValue());
-        }
-        //Turn on the switch
-        if (command.getStatus().equals(SwitchStatus.ON)) {
+        } else if (command.getStatus().equals(SwitchStatus.ON)) {
+            // turn on the switch
             consumer.getSwitch().turnOn();
+            // persist the change
+            persist(command.getStatus());
             return new ConsumerSwitchResult(command.getId(), Boolean.TRUE, Boolean.TRUE);
-        }
-        //Turn on the switch
-        else if (command.getStatus().equals(SwitchStatus.OFF)) {
+        } else if (command.getStatus().equals(SwitchStatus.OFF)) {
+            // turn on the switch
             consumer.getSwitch().turnOff();
+            // persist the change
+            persist(command.getStatus());
             return new ConsumerSwitchResult(command.getId(), Boolean.TRUE, Boolean.FALSE);
         } else {
             return new ConsumerSwitchResult(command.getId(), Boolean.FALSE, consumer.getSwitch().getStatus().getValue());
         }
     }
 
+    /**
+     * Store the consumer current status in ConfigurationAdmin.
+     *
+     * @param switchStatus the producer switch status to store.
+     */
+    private void persist(SwitchStatus switchStatus) {
+        try {
+            Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
+            if (configuration != null) {
+                Dictionary<String, String> properties = configuration.getProperties();
+                if (properties != null) {
+                    properties.put(Configurations.CONSUMER, switchStatus.getValue().toString());
+                    configuration.update(properties);
+                }
+            }
+        } catch (Exception e) {
+            LOGGER.warn("Can't persist the producer status", e);
+        }
+    }
+
     public Class<ConsumerSwitchCommand> getType() {
         return ConsumerSwitchCommand.class;
     }

Modified: karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ProducerSwitchCommandHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ProducerSwitchCommandHandler.java?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ProducerSwitchCommandHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/core/src/main/java/org/apache/karaf/cellar/core/control/ProducerSwitchCommandHandler.java Wed Oct 31 10:34:04 2012
@@ -70,7 +70,6 @@ public class ProducerSwitchCommandHandle
                     configuration.update(properties);
                 }
             }
-            System.out.println("Updated");
         } catch (Exception e) {
             LOGGER.warn("Can't persist the producer status", e);
         }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java Wed Oct 31 10:34:04 2012
@@ -16,6 +16,7 @@ package org.apache.karaf.cellar.hazelcas
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IQueue;
 import com.hazelcast.core.ItemListener;
+import org.apache.karaf.cellar.core.Configurations;
 import org.apache.karaf.cellar.core.Dispatcher;
 import org.apache.karaf.cellar.core.Node;
 import org.apache.karaf.cellar.core.control.BasicSwitch;
@@ -24,6 +25,8 @@ import org.apache.karaf.cellar.core.cont
 import org.apache.karaf.cellar.core.event.Event;
 import org.apache.karaf.cellar.core.event.EventConsumer;
 import org.apache.karaf.cellar.core.utils.CombinedClassLoader;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,7 +53,7 @@ public class QueueConsumer<E extends Eve
     private Dispatcher dispatcher;
     private Node node;
     private CombinedClassLoader combinedClassLoader;
-
+    private ConfigurationAdmin configurationAdmin;
 
     public QueueConsumer() {
     }
@@ -114,7 +117,7 @@ public class QueueConsumer<E extends Eve
      * @param event
      */
     public void consume(E event) {
-        if (event != null && (eventSwitch.getStatus().equals(SwitchStatus.ON) || event.getForce())) {
+        if (event != null && (this.getSwitch().getStatus().equals(SwitchStatus.ON) || event.getForce())) {
             dispatcher.dispatch(event);
         } else {
             if (eventSwitch.getStatus().equals(SwitchStatus.OFF)) {
@@ -173,6 +176,20 @@ public class QueueConsumer<E extends Eve
     }
 
     public Switch getSwitch() {
+        // load the init status from the config
+        try {
+            Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
+            if (configuration != null) {
+                Boolean status = new Boolean((String) configuration.getProperties().get(Configurations.CONSUMER));
+                if (status) {
+                    eventSwitch.turnOn();
+                } else {
+                    eventSwitch.turnOff();
+                }
+            }
+        } catch (Exception e) {
+            // ignore
+        }
         return eventSwitch;
     }
 
@@ -183,4 +200,13 @@ public class QueueConsumer<E extends Eve
     public void setNode(Node node) {
         this.node = node;
     }
+
+    public ConfigurationAdmin getConfigurationAdmin() {
+        return configurationAdmin;
+    }
+
+    public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+        this.configurationAdmin = configurationAdmin;
+    }
+
 }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicConsumer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicConsumer.java?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicConsumer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/TopicConsumer.java Wed Oct 31 10:34:04 2012
@@ -16,6 +16,7 @@ package org.apache.karaf.cellar.hazelcas
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ITopic;
 import com.hazelcast.core.MessageListener;
+import org.apache.karaf.cellar.core.Configurations;
 import org.apache.karaf.cellar.core.Dispatcher;
 import org.apache.karaf.cellar.core.Node;
 import org.apache.karaf.cellar.core.control.BasicSwitch;
@@ -23,6 +24,8 @@ import org.apache.karaf.cellar.core.cont
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.Event;
 import org.apache.karaf.cellar.core.event.EventConsumer;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,6 +44,7 @@ public class TopicConsumer<E extends Eve
     private ITopic topic;
     private Dispatcher dispatcher;
     private Node node;
+    private ConfigurationAdmin configurationAdmin;
 
     private boolean isConsuming;
 
@@ -68,7 +72,7 @@ public class TopicConsumer<E extends Eve
      */
     public void consume(E event) {
         //Check if event has a specified destination.
-        if ((event.getDestination() == null || event.getDestination().contains(node)) && (eventSwitch.getStatus().equals(SwitchStatus.ON) || event.getForce())) {
+        if ((event.getDestination() == null || event.getDestination().contains(node)) && (this.getSwitch().getStatus().equals(SwitchStatus.ON) || event.getForce())) {
             dispatcher.dispatch(event);
         } else {
             if (eventSwitch.getStatus().equals(SwitchStatus.OFF)) {
@@ -131,6 +135,20 @@ public class TopicConsumer<E extends Eve
     }
 
     public Switch getSwitch() {
+        // load the init status from the config
+        try {
+            Configuration configuration = configurationAdmin.getConfiguration(Configurations.NODE);
+            if (configuration != null) {
+                Boolean status = new Boolean((String) configuration.getProperties().get(Configurations.CONSUMER));
+                if (status) {
+                    eventSwitch.turnOn();
+                } else {
+                    eventSwitch.turnOff();
+                }
+            }
+        } catch (Exception e) {
+            // ignore
+        }
         return eventSwitch;
     }
 
@@ -142,4 +160,12 @@ public class TopicConsumer<E extends Eve
         this.node = node;
     }
 
+    public ConfigurationAdmin getConfigurationAdmin() {
+        return configurationAdmin;
+    }
+
+    public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+        this.configurationAdmin = configurationAdmin;
+    }
+
 }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1404078&r1=1404077&r2=1404078&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/resources/OSGI-INF/blueprint/blueprint.xml Wed Oct 31 10:34:04 2012
@@ -87,6 +87,7 @@
         <property name="instance" ref="hazelcast"/>
         <property name="dispatcher" ref="dispatcher"/>
         <property name="node" ref="node"/>
+        <property name="configurationAdmin" ref="configurationAdmin"/>
     </bean>
 
     <!-- Producer -->
@@ -115,6 +116,7 @@
     <bean id="consumerSwitchCommandHandler" class="org.apache.karaf.cellar.core.control.ConsumerSwitchCommandHandler">
         <property name="producer" ref="producer"/>
         <property name="consumer" ref="consumer"/>
+        <property name="configurationAdmin" ref="configurationAdmin"/>
     </bean>
 
     <bean id="consumerSwitchResultHandler" class="org.apache.karaf.cellar.core.control.ConsumerSwitchResultHandler">