You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2012/04/11 08:28:51 UTC

svn commit: r1324579 - in /karaf/branches/karaf-2.3.x/shell/dev/src/main: java/org/apache/karaf/shell/dev/Restart.java java/org/apache/karaf/shell/dev/WaitForService.java resources/OSGI-INF/blueprint/shell-dev.xml

Author: gnodet
Date: Wed Apr 11 06:28:50 2012
New Revision: 1324579

URL: http://svn.apache.org/viewvc?rev=1324579&view=rev
Log:
[KARAF-866] New dev:wait-for-service command to wait for a given osgi service


Conflicts:

	shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml

Added:
    karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java
Modified:
    karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java
    karaf/branches/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml

Modified: karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java?rev=1324579&r1=1324578&r2=1324579&view=diff
==============================================================================
--- karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java (original)
+++ karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java Wed Apr 11 06:28:50 2012
@@ -26,7 +26,7 @@ import org.apache.karaf.shell.console.Os
 @Command(scope = "dev", name = "restart", description = "Restart Karaf.")
 public class Restart  extends OsgiCommandSupport {
 
-    @Option(name = "-c", aliases = { "--clean" }, description = "Force a clean restart by deleteting the working directory")
+    @Option(name = "-c", aliases = { "--clean" }, description = "Force a clean restart by deleting the working directory")
     private boolean clean;
 
     @Override

Added: karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java?rev=1324579&view=auto
==============================================================================
--- karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java (added)
+++ karaf/branches/karaf-2.3.x/shell/dev/src/main/java/org/apache/karaf/shell/dev/WaitForService.java Wed Apr 11 06:28:50 2012
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.shell.dev;
+
+import java.util.concurrent.TimeoutException;
+
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * Command that can be used to wait for an OSGi service.
+ */
+@Command(scope = "dev", name = "wait-for-service", description = "Wait for a given OSGi service.")
+public class WaitForService extends OsgiCommandSupport {
+
+    @Option(name = "-e", aliases = { "--exception" }, description = "throw an exception if the service is not found after the timeout")
+    boolean exception;
+
+    @Option(name = "-t", aliases = { "--timeout" }, description = "timeout to wait for the service (in milliseconds, negative to not wait at all, zero to wait forever)")
+    long timeout = 0;
+
+    @Argument(name = "service", description="The service class or filter", required = true, multiValued = false)
+    String service;
+
+    @Override
+    protected Object doExecute() throws Exception {
+        ServiceTracker tracker = null;
+        try {
+            String filter = service;
+            if (!filter.startsWith("(")) {
+                if (!filter.contains("=")) {
+                    filter = Constants.OBJECTCLASS + "=" + filter;
+                }
+                filter = "(" + filter + ")";
+            }
+            Filter osgiFilter = FrameworkUtil.createFilter(filter);
+            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
+            tracker.open(true);
+            Object svc = tracker.getService();
+            if (timeout >= 0) {
+                svc = tracker.waitForService(timeout);
+            }
+            if (exception && svc == null) {
+                throw new TimeoutException("Can not find service '" + service + "' in the OSGi registry");
+            }
+            return svc != null;
+        } catch (InvalidSyntaxException e) {
+            throw new IllegalArgumentException("Invalid filter", e);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (tracker != null) {
+                tracker.close();
+            }
+        }
+    }
+
+}

Modified: karaf/branches/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml?rev=1324579&r1=1324578&r2=1324579&view=diff
==============================================================================
--- karaf/branches/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml (original)
+++ karaf/branches/karaf-2.3.x/shell/dev/src/main/resources/OSGI-INF/blueprint/shell-dev.xml Wed Apr 11 06:28:50 2012
@@ -38,6 +38,9 @@
         <command name="dev/system-property">
             <action class="org.apache.karaf.shell.dev.SystemProperty" />
         </command>
+        <command name="dev/wait-for-service">
+            <action class="org.apache.karaf.shell.dev.WaitForService" />
+        </command>
         <command name="dev/watch">
             <action class="org.apache.karaf.shell.dev.Watch" >
                 <property name="watcher" ref="watcher"/>