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/11/21 22:19:07 UTC
svn commit: r1412304 - in /karaf/cellar/trunk: management/
management/src/main/java/org/apache/karaf/cellar/management/
management/src/main/java/org/apache/karaf/cellar/management/internal/
management/src/main/resources/OSGI-INF/blueprint/ shell/src/ma...
Author: jbonofre
Date: Wed Nov 21 21:19:06 2012
New Revision: 1412304
URL: http://svn.apache.org/viewvc?rev=1412304&view=rev
Log:
[KARAF-2023] Add cluster:sync command and sync operation in the CellarMBean
Added:
karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
Modified:
karaf/cellar/trunk/management/pom.xml
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
Modified: karaf/cellar/trunk/management/pom.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/pom.xml?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/pom.xml (original)
+++ karaf/cellar/trunk/management/pom.xml Wed Nov 21 21:19:06 2012
@@ -43,6 +43,7 @@
javax.management.openmbean,
org.apache.karaf.features*;version="[3,4)",
org.apache.karaf.cellar*;version="${project.version}",
+ org.osgi.framework,
org.osgi.service.cm,
org.osgi.service.blueprint
</osgi.import>
Modified: karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java (original)
+++ karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarMBean.java Wed Nov 21 21:19:06 2012
@@ -20,7 +20,8 @@ import javax.management.openmbean.Tabula
*/
public interface CellarMBean {
- // Operations
+ void sync() throws Exception;
+
TabularData consumerStatus() throws Exception;
void consumerStart(String nodeId) throws Exception;
void consumerStop(String nodeId) throws Exception;
Modified: karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java (original)
+++ karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarMBeanImpl.java Wed Nov 21 21:19:06 2012
@@ -27,11 +27,13 @@
*/
package org.apache.karaf.cellar.management.internal;
-import org.apache.karaf.cellar.core.ClusterManager;
-import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.*;
import org.apache.karaf.cellar.core.command.ExecutionContext;
import org.apache.karaf.cellar.core.control.*;
import org.apache.karaf.cellar.management.CellarMBean;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
@@ -43,13 +45,23 @@ import java.util.*;
*/
public class CellarMBeanImpl extends StandardMBean implements CellarMBean {
+ private BundleContext bundleContext;
private ClusterManager clusterManager;
private ExecutionContext executionContext;
+ private GroupManager groupManager;
public CellarMBeanImpl() throws NotCompliantMBeanException {
super(CellarMBean.class);
}
+ public BundleContext getBundleContext() {
+ return bundleContext;
+ }
+
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
public ClusterManager getClusterManager() {
return this.clusterManager;
}
@@ -66,6 +78,35 @@ public class CellarMBeanImpl extends Sta
this.executionContext = executionContext;
}
+ public GroupManager getGroupManager() {
+ return groupManager;
+ }
+
+ public void setGroupManager(GroupManager groupManager) {
+ this.groupManager = groupManager;
+ }
+
+ public void sync() throws Exception {
+ Set<Group> localGroups = groupManager.listLocalGroups();
+ for (Group group : localGroups) {
+ 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);
+ }
+ }
+ } catch (InvalidSyntaxException e) {
+ // ignore
+ }
+ }
+ }
+
public TabularData handlerStatus() throws Exception {
ManageHandlersCommand command = new ManageHandlersCommand(clusterManager.generateId());
Modified: karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml Wed Nov 21 21:19:06 2012
@@ -23,7 +23,9 @@
<reference id="featuresService" interface="org.apache.karaf.features.FeaturesService"/>
<bean id="cellarMBean" class="org.apache.karaf.cellar.management.internal.CellarMBeanImpl">
+ <property name="bundleContext" ref="blueprintBundleContext"/>
<property name="clusterManager" ref="clusterManager"/>
+ <property name="groupManager" ref="groupManager"/>
<property name="executionContext" ref="executionContext"/>
</bean>
Added: karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java?rev=1412304&view=auto
==============================================================================
--- karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java (added)
+++ karaf/cellar/trunk/shell/src/main/java/org/apache/karaf/cellar/shell/SyncCommand.java Wed Nov 21 21:19:06 2012
@@ -0,0 +1,53 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.cellar.shell;
+
+import org.apache.karaf.cellar.core.Group;
+import org.apache.karaf.cellar.core.Synchronizer;
+import org.apache.karaf.shell.commands.Command;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+import java.util.Set;
+
+@Command(scope = "cluster", name = "sync", description = "Force the call of all cluster synchronizers available.")
+public class SyncCommand extends ClusterCommandSupport {
+
+ @Override
+ protected Object doExecute() throws Exception {
+ Set<Group> localGroups = groupManager.listLocalGroups();
+ for (Group group : localGroups) {
+ System.out.println("Synchronizing cluster group " + group.getName());
+ 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)) {
+ System.out.print(" sync " + synchronizer.getClass() + " ...");
+ synchronizer.pull(group);
+ synchronizer.push(group);
+ System.out.println("OK");
+ }
+ bundleContext.ungetService(ref);
+ }
+ }
+ } catch (InvalidSyntaxException e) {
+ // ignore
+ }
+ }
+ return null;
+ }
+
+}
Modified: karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml?rev=1412304&r1=1412303&r2=1412304&view=diff
==============================================================================
--- karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml (original)
+++ karaf/cellar/trunk/shell/src/main/resources/OSGI-INF/blueprint/shell-cluster.xml Wed Nov 21 21:19:06 2012
@@ -30,6 +30,13 @@
</action>
</command>
+ <command name="cluster/sync">
+ <action class="org.apache.karaf.cellar.shell.SyncCommand">
+ <property name="clusterManager" ref="clusterManager"/>
+ <property name="groupManager" ref="groupManager"/>
+ </action>
+ </command>
+
<command name="cluster/consumer-start">
<action class="org.apache.karaf.cellar.shell.consumer.ConsumerStartCommand">
<property name="clusterManager" ref="clusterManager"/>