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"/>