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 2014/03/05 23:25:20 UTC

[1/6] git commit: [KARAF-2805] Fix injection for multiple services

Repository: karaf
Updated Branches:
  refs/heads/master 2e2b9324d -> d2249e439


[KARAF-2805] Fix injection for multiple services

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/1c29cbc9
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/1c29cbc9
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/1c29cbc9

Branch: refs/heads/master
Commit: 1c29cbc94ba0a6e891c2da6a4fe13f05c18b38dd
Parents: 2e2b932
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Wed Mar 5 18:32:32 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Wed Mar 5 18:32:32 2014 +0100

----------------------------------------------------------------------
 .../shell/impl/action/command/ManagerImpl.java  |  11 +-
 .../action/osgi/AggregateServiceTracker.java    | 131 ++++++++++++++++++
 .../impl/action/osgi/CommandExtension.java      |  36 +++--
 .../impl/action/osgi/MultiServiceTracker.java   | 138 ++++++++++++-------
 .../shell/impl/action/osgi/RegistryImpl.java    |  20 ++-
 5 files changed, 266 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/1c29cbc9/shell/core/src/main/java/org/apache/karaf/shell/impl/action/command/ManagerImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/command/ManagerImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/command/ManagerImpl.java
index 611ecab..5498d2d 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/command/ManagerImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/command/ManagerImpl.java
@@ -20,9 +20,12 @@ package org.apache.karaf.shell.impl.action.command;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.karaf.shell.api.action.Action;
 import org.apache.karaf.shell.api.action.Command;
@@ -71,10 +74,12 @@ public class ManagerImpl implements Manager {
                     GenericType type = new GenericType(field.getGenericType());
                     Object value;
                     if (type.getRawClass() == List.class) {
-                        value = registry.getServices(type.getActualTypeArgument(0).getRawClass());
-                        if (value == null && registry != this.dependencies) {
-                            value = this.dependencies.getServices(type.getActualTypeArgument(0).getRawClass());
+                        Set<Object> set = new HashSet<Object>();
+                        set.addAll(registry.getServices(type.getActualTypeArgument(0).getRawClass()));
+                        if (registry != this.dependencies) {
+                            set.addAll(this.dependencies.getServices(type.getActualTypeArgument(0).getRawClass()));
                         }
+                        value = new ArrayList<Object>(set);
                     } else {
                         value = registry.getService(type.getRawClass());
                         if (value == null && registry != this.dependencies) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/1c29cbc9/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/AggregateServiceTracker.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/AggregateServiceTracker.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/AggregateServiceTracker.java
new file mode 100644
index 0000000..e36b260
--- /dev/null
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/AggregateServiceTracker.java
@@ -0,0 +1,131 @@
+/*
+ * 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.impl.action.osgi;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.osgi.framework.BundleContext;
+
+/**
+ * Track multiple services by their type
+ */
+public class AggregateServiceTracker implements Satisfiable {
+
+    private final BundleContext bundleContext;
+    private final Satisfiable satisfiable;
+    private final ConcurrentMap<Class, SingleServiceTracker> singleTrackers = new ConcurrentHashMap<Class, SingleServiceTracker>();
+    private final ConcurrentMap<Class, MultiServiceTracker> multiTrackers = new ConcurrentHashMap<Class, MultiServiceTracker>();
+    private final AtomicInteger count = new AtomicInteger(-1);
+
+    public AggregateServiceTracker(BundleContext bundleContext, Satisfiable satisfiable) {
+        this.bundleContext = bundleContext;
+        this.satisfiable = satisfiable;
+    }
+
+    @SuppressWarnings("unchecked")
+    public void track(Class service, boolean multiple) {
+        if (multiple) {
+            if (multiTrackers.get(service) == null) {
+                MultiServiceTracker tracker = new MultiServiceTracker(bundleContext, service, this);
+                multiTrackers.put(service, tracker);
+            }
+        } else {
+            if (singleTrackers.get(service) == null) {
+                SingleServiceTracker tracker = new SingleServiceTracker(bundleContext, service, this);
+                singleTrackers.putIfAbsent(service, tracker);
+            }
+        }
+    }
+
+    public <T> T getService(Class<T> clazz) {
+        SingleServiceTracker tracker = singleTrackers.get(clazz);
+        return tracker != null ? clazz.cast(tracker.getService()) : null;
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> List<T> getServices(Class<T> clazz) {
+        MultiServiceTracker tracker = multiTrackers.get(clazz);
+        return tracker != null ? tracker.getServices() : null;
+    }
+
+    public void open() {
+        for (SingleServiceTracker tracker : singleTrackers.values()) {
+            tracker.open();
+        }
+        for (MultiServiceTracker tracker : multiTrackers.values()) {
+            tracker.open();
+        }
+        found();
+    }
+
+    public void close() {
+        lost();
+        for (MultiServiceTracker tracker : multiTrackers.values()) {
+            tracker.close();
+        }
+        for (SingleServiceTracker tracker : singleTrackers.values()) {
+            tracker.close();
+        }
+    }
+
+    public boolean isSatisfied() {
+        return count.get() == singleTrackers.size() + multiTrackers.size();
+    }
+
+    public List<String> getMissingServices() {
+        List<String> missing = new ArrayList<String>();
+        for (SingleServiceTracker tracker : singleTrackers.values()) {
+            if (!tracker.isSatisfied()) {
+                missing.add(tracker.getClassName());
+            }
+        }
+        for (MultiServiceTracker tracker : multiTrackers.values()) {
+            if (!tracker.isSatisfied()) {
+                missing.add("List<" + tracker.getClassName() + ">");
+            }
+        }
+        return missing;
+    }
+
+    @Override
+    public void found() {
+        if (count.incrementAndGet() == singleTrackers.size() + multiTrackers.size()) {
+            satisfiable.found();
+        }
+    }
+
+    @Override
+    public void updated() {
+        if (count.get() == singleTrackers.size() + multiTrackers.size()) {
+            satisfiable.updated();
+        }
+    }
+
+    @Override
+    public void lost() {
+        if (count.getAndDecrement() == singleTrackers.size() + multiTrackers.size()) {
+            satisfiable.lost();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/1c29cbc9/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/CommandExtension.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/CommandExtension.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/CommandExtension.java
index b1a953b..865933f 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/CommandExtension.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/CommandExtension.java
@@ -55,7 +55,7 @@ public class CommandExtension implements Extension, Satisfiable {
     private final ManagerImpl manager;
     private final Registry registry;
     private final CountDownLatch started;
-    private final MultiServiceTracker tracker;
+    private final AggregateServiceTracker tracker;
     private final List<Satisfiable> satisfiables = new ArrayList<Satisfiable>();
 
 
@@ -66,7 +66,7 @@ public class CommandExtension implements Extension, Satisfiable {
         this.manager = new ManagerImpl(this.registry, registry);
         this.registry.register(this.manager);
         this.started = new CountDownLatch(1);
-        this.tracker = new MultiServiceTracker(bundle.getBundleContext(), this);
+        this.tracker = new AggregateServiceTracker(bundle.getBundleContext(), this);
     }
 
     @Override
@@ -142,7 +142,7 @@ public class CommandExtension implements Extension, Satisfiable {
         for (Class<?> cl = clazz; cl != Object.class; cl = cl.getSuperclass()) {
             for (Field field : cl.getDeclaredFields()) {
                 if (field.getAnnotation(Reference.class) != null) {
-                    GenericType type = new GenericType(field.getType());
+                    GenericType type = new GenericType(field.getGenericType());
                     Class clazzRef = type.getRawClass() == List.class ? type.getActualTypeArgument(0).getRawClass() : type.getRawClass();
                     if (clazzRef != BundleContext.class
                             && clazzRef != Session.class
@@ -151,7 +151,7 @@ public class CommandExtension implements Extension, Satisfiable {
                             && clazzRef != Registry.class
                             && clazzRef != SessionFactory.class
                             && !registry.hasService(clazzRef)) {
-                        track(clazzRef);
+                        track(type);
                     }
                 }
             }
@@ -159,14 +159,26 @@ public class CommandExtension implements Extension, Satisfiable {
         satisfiables.add(new AutoRegister(clazz));
     }
 
-    protected void track(final Class clazzRef) {
-        tracker.track(clazzRef);
-        registry.register(new Callable() {
-            @Override
-            public Object call() throws Exception {
-                return tracker.getService(clazzRef);
-            }
-        }, clazzRef);
+    protected void track(final GenericType type) {
+        if (type.getRawClass() == List.class) {
+            final Class clazzRef = type.getActualTypeArgument(0).getRawClass();
+            tracker.track(clazzRef, true);
+            registry.register(new Callable() {
+                @Override
+                public Object call() throws Exception {
+                    return tracker.getServices(clazzRef);
+                }
+            }, clazzRef);
+        } else {
+            final Class clazzRef = type.getRawClass();
+            tracker.track(clazzRef, false);
+            registry.register(new Callable() {
+                @Override
+                public Object call() throws Exception {
+                    return tracker.getService(clazzRef);
+                }
+            }, clazzRef);
+        }
     }
 
     public class AutoRegister implements Satisfiable {

http://git-wip-us.apache.org/repos/asf/karaf/blob/1c29cbc9/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/MultiServiceTracker.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/MultiServiceTracker.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/MultiServiceTracker.java
index a762957..1b918b9 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/MultiServiceTracker.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/MultiServiceTracker.java
@@ -20,87 +20,121 @@ package org.apache.karaf.shell.impl.action.osgi;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
 
 /**
- * Track multiple services by their type
+ * Track multiple service by its type.
+ *
+ * @param <T>
  */
-public class MultiServiceTracker implements Satisfiable {
+public final class MultiServiceTracker<T> {
 
-    private final BundleContext bundleContext;
-    private final Satisfiable satisfiable;
-    private final ConcurrentMap<Class, SingleServiceTracker> trackers = new ConcurrentHashMap<Class, SingleServiceTracker>();
-    private final AtomicInteger count = new AtomicInteger(-1);
+    private final BundleContext ctx;
+    private final String className;
+    private final List<T> services = new CopyOnWriteArrayList<T>();
+    private final List<ServiceReference> refs = new CopyOnWriteArrayList<ServiceReference>();
+    private final AtomicBoolean open = new AtomicBoolean(false);
+    private final Satisfiable serviceListener;
+    private Filter filter;
 
-    public MultiServiceTracker(BundleContext bundleContext, Satisfiable satisfiable) {
-        this.bundleContext = bundleContext;
-        this.satisfiable = satisfiable;
+    private final ServiceListener listener = new ServiceListener() {
+        public void serviceChanged(ServiceEvent event) {
+            if (open.get()) {
+                if (event.getType() == ServiceEvent.UNREGISTERING) {
+                    removeRef(event.getServiceReference());
+                } else if (event.getType() == ServiceEvent.REGISTERED) {
+                    addRef(event.getServiceReference());
+                }
+            }
+        }
+    };
+
+    public MultiServiceTracker(BundleContext context, Class<T> clazz, Satisfiable sl) {
+        ctx = context;
+        this.className = clazz.getName();
+        serviceListener = sl;
     }
 
-    @SuppressWarnings("unchecked")
-    public void track(Class service) {
-        if (trackers.get(service) == null) {
-            SingleServiceTracker tracker = new SingleServiceTracker(bundleContext, service, this);
-            trackers.putIfAbsent(service, tracker);
-        }
+    public List<T> getServices() {
+        return services;
     }
 
-    public <T> T getService(Class<T> clazz) {
-        SingleServiceTracker tracker = trackers.get(clazz);
-        return tracker != null ? clazz.cast(tracker.getService()) : null;
+    public List<ServiceReference> getServiceReferences() {
+        return refs;
     }
 
     public void open() {
-        for (SingleServiceTracker tracker : trackers.values()) {
-            tracker.open();
+        if (open.compareAndSet(false, true)) {
+            try {
+                String filterString = '(' + Constants.OBJECTCLASS + '=' + className + ')';
+                if (filter != null) filterString = "(&" + filterString + filter + ')';
+                ctx.addServiceListener(listener, filterString);
+                ServiceReference[] refs = ctx.getServiceReferences(className, filter != null ? filter.toString() : null);
+                if (refs != null) {
+                    for (ServiceReference ref : refs) {
+                        addRef(ref);
+                    }
+                }
+            } catch (InvalidSyntaxException e) {
+                // this can never happen. (famous last words :)
+            }
+            serviceListener.found();
         }
-        found();
     }
 
-    public void close() {
-        lost();
-        for (SingleServiceTracker tracker : trackers.values()) {
-            tracker.close();
+    private void addRef(ServiceReference ref) {
+        T service = (T) ctx.getService(ref);
+        synchronized (refs) {
+            if (refs.add(ref)) {
+                services.add(service);
+                return;
+            }
         }
+        ctx.ungetService(ref);
+        serviceListener.updated();
     }
 
-    public boolean isSatisfied() {
-        return count.get() == trackers.size();
-    }
-
-    public List<String> getMissingServices() {
-        List<String> missing = new ArrayList<String>();
-        for (SingleServiceTracker tracker : trackers.values()) {
-            if (!tracker.isSatisfied()) {
-                missing.add(tracker.getClassName());
+    private void removeRef(ServiceReference ref) {
+        synchronized (refs) {
+            if (!refs.remove(ref)) {
+                return;
             }
         }
-        return missing;
+        ctx.ungetService(ref);
+        serviceListener.updated();
     }
 
-    @Override
-    public void found() {
-        if (count.incrementAndGet() == trackers.size()) {
-            satisfiable.found();
+    public void close() {
+        if (open.compareAndSet(true, false)) {
+            ctx.removeServiceListener(listener);
+
+            List<ServiceReference> oldRefs;
+            synchronized (refs) {
+                oldRefs = new ArrayList<ServiceReference>(refs);
+                refs.clear();
+                services.clear();
+            }
+            for (ServiceReference ref : oldRefs) {
+                ctx.ungetService(ref);
+            }
         }
     }
 
-    @Override
-    public void updated() {
-        if (count.get() == trackers.size()) {
-            satisfiable.updated();
-        }
+    public boolean isSatisfied() {
+        return true;
     }
 
-    @Override
-    public void lost() {
-        if (count.getAndDecrement() == trackers.size()) {
-            satisfiable.lost();
-        }
+    public String getClassName() {
+        return className;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/1c29cbc9/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
index 38b56ed..38f750a 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/action/osgi/RegistryImpl.java
@@ -44,7 +44,7 @@ public class RegistryImpl implements Registry {
     @Override
     public <T> void register(Callable<T> factory, Class<T> clazz) {
         synchronized (services) {
-            services.put(factory, new Factory<T>(clazz, factory));
+            services.put(clazz, new Factory<T>(clazz, factory));
         }
     }
 
@@ -70,7 +70,14 @@ public class RegistryImpl implements Registry {
                     if (clazz.isAssignableFrom(((Factory) service).clazz)) {
                         if (isVisible(service)) {
                             try {
-                                return clazz.cast(((Factory) service).callable.call());
+                                Object value = ((Factory) service).callable.call();
+                                if (value instanceof List) {
+                                    for (Object v : (List) value) {
+                                        return clazz.cast(v);
+                                    }
+                                } else {
+                                    return clazz.cast(value);
+                                }
                             } catch (Exception e) {
                                 // TODO: log exception
                             }
@@ -98,7 +105,14 @@ public class RegistryImpl implements Registry {
                     if (clazz.isAssignableFrom(((Factory) service).clazz)) {
                         if (isVisible(service)) {
                             try {
-                                list.add(clazz.cast(((Factory) service).callable.call()));
+                                Object value = ((Factory) service).callable.call();
+                                if (value instanceof List) {
+                                    for (Object v : (List) value) {
+                                        list.add(clazz.cast(v));
+                                    }
+                                } else {
+                                    list.add(clazz.cast(value));
+                                }
                             } catch (Exception e) {
                                 // TODO: log exception
                             }


[3/6] [KARAF-2805] Convert remaining commands to the new model

Posted by gn...@apache.org.
http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ServicesIdCompleter.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ServicesIdCompleter.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ServicesIdCompleter.java
index c56490b..c7cdb80 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ServicesIdCompleter.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ServicesIdCompleter.java
@@ -16,10 +16,12 @@
  */
 package org.apache.karaf.jndi.command.completers;
 
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -36,7 +38,8 @@ public class ServicesIdCompleter implements Completer {
     @Reference
     private BundleContext bundleContext;
 
-    public int complete(String buffer, int cursor, List candidates) {
+    @Override
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         Bundle[] bundles = bundleContext.getBundles();
         for (Bundle bundle : bundles) {
@@ -49,7 +52,7 @@ public class ServicesIdCompleter implements Completer {
                 }
             }
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public BundleContext getBundleContext() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/resources/OSGI-INF/blueprint/jndi-command.xml
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/resources/OSGI-INF/blueprint/jndi-command.xml b/jndi/command/src/main/resources/OSGI-INF/blueprint/jndi-command.xml
deleted file mode 100644
index f59750b..0000000
--- a/jndi/command/src/main/resources/OSGI-INF/blueprint/jndi-command.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-        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.
-    -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.jndi.command.*" />
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/kar/command/pom.xml
----------------------------------------------------------------------
diff --git a/kar/command/pom.xml b/kar/command/pom.xml
index 67d18f5..431c0e4 100644
--- a/kar/command/pom.xml
+++ b/kar/command/pom.xml
@@ -39,12 +39,6 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.karaf.kar</groupId>
             <artifactId>org.apache.karaf.kar.core</artifactId>
         </dependency>
@@ -53,10 +47,6 @@
             <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.karaf.features</groupId>
             <artifactId>org.apache.karaf.features.command</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/kar/command/src/main/java/org/apache/karaf/kar/command/ListKarCommand.java
----------------------------------------------------------------------
diff --git a/kar/command/src/main/java/org/apache/karaf/kar/command/ListKarCommand.java b/kar/command/src/main/java/org/apache/karaf/kar/command/ListKarCommand.java
index 853a743..98813ff 100644
--- a/kar/command/src/main/java/org/apache/karaf/kar/command/ListKarCommand.java
+++ b/kar/command/src/main/java/org/apache/karaf/kar/command/ListKarCommand.java
@@ -17,12 +17,12 @@
 package org.apache.karaf.kar.command;
 
 import org.apache.karaf.kar.KarService;
-import org.apache.karaf.shell.table.ShellTable;
 import org.apache.karaf.shell.api.action.Action;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Reference;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "kar", name = "list", description = "List the installed KAR files.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/pom.xml
----------------------------------------------------------------------
diff --git a/log/command/pom.xml b/log/command/pom.xml
index 363c733..550a3be 100644
--- a/log/command/pom.xml
+++ b/log/command/pom.xml
@@ -44,17 +44,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
 
         <dependency>
@@ -105,7 +95,15 @@
                         <Import-Package>
                             *
                         </Import-Package>
-                        <Private-Package>org.apache.karaf.log.command*</Private-Package>
+                        <Export-Package>
+                            !*
+                        </Export-Package>
+                        <Private-Package>
+                            org.apache.karaf.log.command*
+                        </Private-Package>
+                        <Karaf-Commands>
+                            org.apache.karaf.log.command*
+                        </Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/ClearLog.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/ClearLog.java b/log/command/src/main/java/org/apache/karaf/log/command/ClearLog.java
index 8733568..75a48d6 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/ClearLog.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/ClearLog.java
@@ -16,17 +16,24 @@
  */
 package org.apache.karaf.log.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.log.core.LogService;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 /**
  * Clear the last log entries.
  */
 @Command(scope = "log", name = "clear", description = "Clear log entries.")
 @Service
-public class ClearLog extends LogCommandSupport {
-   
-    protected Object doExecute() throws Exception {
+public class ClearLog implements Action {
+
+    @Reference
+    LogService logService;
+
+    @Override
+    public Object execute() throws Exception {
         logService.clearEvents();
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/DisplayException.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/DisplayException.java b/log/command/src/main/java/org/apache/karaf/log/command/DisplayException.java
index d8cb4b5..52a2661 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/DisplayException.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/DisplayException.java
@@ -16,19 +16,26 @@
  */
 package org.apache.karaf.log.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.log.core.LogService;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
 @Command(scope = "log", name = "exception-display", description = "Displays the last occurred exception from the log.")
 @Service
-public class DisplayException extends LogCommandSupport {
+public class DisplayException implements Action {
 
     @Argument(index = 0, name = "logger", description = "The name of the logger. This can be ROOT, ALL, or the name of a logger specified in the org.ops4j.pax.logger.cfg file.", required = false, multiValued = false)
     String logger;
-    
-    protected Object doExecute() throws Exception {
+
+    @Reference
+    LogService logService;
+
+    @Override
+    public Object execute() throws Exception {
         PaxLoggingEvent throwableEvent = logService.getLastException(logger);
         if (throwableEvent != null) {
             for (String r : throwableEvent.getThrowableStrRep()) {
@@ -38,7 +45,5 @@ public class DisplayException extends LogCommandSupport {
         }
         return null;
     }
-        
-
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/DisplayLog.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/DisplayLog.java b/log/command/src/main/java/org/apache/karaf/log/command/DisplayLog.java
index f17e775..813eea5 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/DisplayLog.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/DisplayLog.java
@@ -19,11 +19,13 @@ package org.apache.karaf.log.command;
 import java.io.PrintStream;
 
 import org.apache.karaf.log.core.LogEventFormatter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.log.core.LogService;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
 /**
@@ -31,28 +33,28 @@ import org.ops4j.pax.logging.spi.PaxLoggingEvent;
  */
 @Command(scope = "log", name = "display", description = "Displays log entries.")
 @Service
-public class DisplayLog extends LogCommandSupport {
+public class DisplayLog implements Action {
 
     @Option(name = "-n", aliases = {}, description="Number of entries to display", required = false, multiValued = false)
-    protected int entries;
+    int entries;
 
     @Option(name = "-p", aliases = {}, description="Pattern for formatting the output", required = false, multiValued = false)
-    protected String overridenPattern;
+    String overridenPattern;
 
     @Option(name = "--no-color", description="Disable syntax coloring of log events", required = false, multiValued = false)
-    protected boolean noColor;
+    boolean noColor;
 
     @Argument(index = 0, name = "logger", description = "The name of the logger. This can be ROOT, ALL, or the name of a logger specified in the org.ops4j.pax.logger.cfg file.", required = false, multiValued = false)
     String logger;
 
     @Reference
-    protected LogEventFormatter formatter;
-    
-    public void setFormatter(LogEventFormatter formatter) {
-        this.formatter = formatter;
-    }
+    LogService logService;
+
+    @Reference
+    LogEventFormatter formatter;
 
-    protected Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         
         final PrintStream out = System.out;
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/GetLogLevel.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/GetLogLevel.java b/log/command/src/main/java/org/apache/karaf/log/command/GetLogLevel.java
index 290fffb..83e5003 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/GetLogLevel.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/GetLogLevel.java
@@ -16,22 +16,23 @@
  */
 package org.apache.karaf.log.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
-
-import java.util.Enumeration;
-import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.karaf.log.core.LogService;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
+
 /**
  * Get the log level
  */
 @Command(scope = "log", name = "get", description = "Shows the currently set log level.")
 @Service
-public class GetLogLevel extends LogCommandSupport {
+public class GetLogLevel implements Action {
 
     @Argument(index = 0, name = "logger", description = "The name of the logger, ALL or ROOT (default)", required = false, multiValued = false)
     String logger;
@@ -39,7 +40,11 @@ public class GetLogLevel extends LogCommandSupport {
     @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false)
     boolean noFormat;
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    LogService logService;
+
+    @Override
+    public Object execute() throws Exception {
         Map<String, String> loggers = logService.getLevel(logger);
 
         ShellTable table = new ShellTable();

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/LogCommandSupport.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/LogCommandSupport.java b/log/command/src/main/java/org/apache/karaf/log/command/LogCommandSupport.java
deleted file mode 100644
index 9ce0f8c..0000000
--- a/log/command/src/main/java/org/apache/karaf/log/command/LogCommandSupport.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.log.command;
-
-import org.apache.karaf.log.core.LogService;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.karaf.shell.inject.Reference;
-
-public abstract class LogCommandSupport extends AbstractAction {
-
-    @Reference
-    protected LogService logService;
-
-    public void setLogService(LogService logService) {
-        this.logService = logService;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/LogEntry.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/LogEntry.java b/log/command/src/main/java/org/apache/karaf/log/command/LogEntry.java
index d2c1786..d7c17a9 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/LogEntry.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/LogEntry.java
@@ -16,14 +16,14 @@
  */
 package org.apache.karaf.log.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 import org.osgi.service.log.LogService;
 
 import java.util.HashMap;
@@ -31,31 +31,30 @@ import java.util.Map;
 
 @Command(scope = "log", name = "log", description = "Log a message.")
 @Service
-public class LogEntry extends AbstractAction {
+public class LogEntry implements Action {
 
     @Argument(index = 0, name = "message", description = "The message to log", required = true, multiValued = false)
     private String message;
 
     @Option(name = "--level", aliases = {"-l"}, description = "The level the message will be logged at", required = false, multiValued = false)
-    @Completer(value = StringsCompleter.class, values = { "DEBUG", "INFO", "WARNING", "ERROR" })
+    @Completion(value = StringsCompleter.class, values = { "DEBUG", "INFO", "WARNING", "ERROR" })
     private String level = "INFO";
 
     @Reference
-    private LogService logService;
+    LogService logService;
 
     private final Map<String,Integer> mappings = new HashMap<String,Integer>();
 
     public LogEntry() {
-        mappings.put("ERROR",1);
-        mappings.put("WARNING",2);
-        mappings.put("INFO",3);
-        mappings.put("DEBUG",4);
+        mappings.put("ERROR", 1);
+        mappings.put("WARNING", 2);
+        mappings.put("INFO", 3);
+        mappings.put("DEBUG", 4);
     }
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         logService.log(toLevel(level.toUpperCase()), message);
-
         return null;
     }
 
@@ -67,7 +66,4 @@ public class LogEntry extends AbstractAction {
         return level;
     }
 
-    public void setLogService(LogService logService) {
-        this.logService = logService;
-    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java
index a79b8a9..bf2801e 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java
@@ -18,10 +18,16 @@ package org.apache.karaf.log.command;
 
 import java.io.IOException;
 import java.io.PrintStream;
-import java.util.concurrent.*;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.log.core.LogService;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.Session;
 import org.ops4j.pax.logging.spi.PaxAppender;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
@@ -29,9 +35,16 @@ import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 @Service
 public class LogTail extends DisplayLog {
 
+    @Reference
+    Session session;
+
+    @Reference
+    LogService logService;
+
     private ExecutorService executorService = Executors.newSingleThreadExecutor();
-    
-    protected Object doExecute() throws Exception {
+
+    @Override
+    public Object execute() throws Exception {
         PrintEventThread printThread = new PrintEventThread();
         executorService.execute(printThread);
         new Thread(new ReadKeyBoardThread(this, Thread.currentThread())).start();

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/java/org/apache/karaf/log/command/SetLogLevel.java
----------------------------------------------------------------------
diff --git a/log/command/src/main/java/org/apache/karaf/log/command/SetLogLevel.java b/log/command/src/main/java/org/apache/karaf/log/command/SetLogLevel.java
index 4bdf5d8..b1145b4 100644
--- a/log/command/src/main/java/org/apache/karaf/log/command/SetLogLevel.java
+++ b/log/command/src/main/java/org/apache/karaf/log/command/SetLogLevel.java
@@ -16,27 +16,35 @@
  */
 package org.apache.karaf.log.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Service;
+
+import org.apache.karaf.log.core.LogService;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 /**
  * Set the log level for a given logger
  */
 @Command(scope = "log", name = "set", description = "Sets the log level.")
 @Service
-public class SetLogLevel extends LogCommandSupport {
+public class SetLogLevel implements Action {
     
     @Argument(index = 0, name = "level", description = "The log level to set (TRACE, DEBUG, INFO, WARN, ERROR) or DEFAULT to unset", required = true, multiValued = false)
-    @Completer(value = StringsCompleter.class, values = { "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "DEFAULT" })
+    @Completion(value = StringsCompleter.class, values = { "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "DEFAULT" })
     String level;
 
     @Argument(index = 1, name = "logger", description = "Logger name or ROOT (default)", required = false, multiValued = false)
     String logger;
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    LogService logService;
+
+    @Override
+    public Object execute() throws Exception {
         logService.setLevel(logger, level);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/log/command/src/main/resources/OSGI-INF/blueprint/shell-log.xml
----------------------------------------------------------------------
diff --git a/log/command/src/main/resources/OSGI-INF/blueprint/shell-log.xml b/log/command/src/main/resources/OSGI-INF/blueprint/shell-log.xml
deleted file mode 100644
index d074489..0000000
--- a/log/command/src/main/resources/OSGI-INF/blueprint/shell-log.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
-           default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.log.command.*" />
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/pom.xml
----------------------------------------------------------------------
diff --git a/obr/command/pom.xml b/obr/command/pom.xml
index a622eb6..73ae804 100644
--- a/obr/command/pom.xml
+++ b/obr/command/pom.xml
@@ -40,12 +40,6 @@
     <dependencies>
 
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
             <groupId>commons-collections</groupId>
             <artifactId>commons-collections</artifactId>
             <scope>provided</scope>
@@ -69,13 +63,9 @@
 
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-        </dependency>
-        
+
         <dependency>
             <groupId>org.easymock</groupId>
             <artifactId>easymock</artifactId>
@@ -113,6 +103,7 @@
                         <Export-Package>
                             !*
                         </Export-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/AddUrlCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/AddUrlCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/AddUrlCommand.java
index 416639f..5aaf13a 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/AddUrlCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/AddUrlCommand.java
@@ -19,9 +19,9 @@ package org.apache.karaf.obr.command;
 import java.util.List;
 
 import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "url-add", description = "Adds a list of repository URLs to the OBR service.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/DeployCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/DeployCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/DeployCommand.java
index 48e42d6..a852c70 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/DeployCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/DeployCommand.java
@@ -19,10 +19,10 @@ package org.apache.karaf.obr.command;
 import java.util.List;
 
 import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "deploy", description = "Deploys a list of bundles using OBR service.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/FindCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/FindCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/FindCommand.java
index cfa4c53..fad967b 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/FindCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/FindCommand.java
@@ -20,9 +20,9 @@ import org.apache.felix.bundlerepository.Capability;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 import java.io.PrintStream;
 import java.lang.reflect.Array;

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/InfoCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/InfoCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/InfoCommand.java
index e2efa16..bacc61b 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/InfoCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/InfoCommand.java
@@ -26,9 +26,9 @@ import org.apache.felix.bundlerepository.Capability;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "info", description = "Prints information about OBR bundles.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/ListCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/ListCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/ListCommand.java
index 71df53f..45db82f 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/ListCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/ListCommand.java
@@ -20,14 +20,11 @@ import java.util.List;
 
 import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.shell.commands.Action;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "obr", name = "list", description = "Lists OBR bundles, optionally providing the given packages.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/ListUrlCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/ListUrlCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/ListUrlCommand.java
index e03477b..1c07236 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/ListUrlCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/ListUrlCommand.java
@@ -18,10 +18,10 @@ package org.apache.karaf.obr.command;
 
 import org.apache.felix.bundlerepository.Repository;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "obr", name = "url-list", description = "Displays the repository URLs currently associated with the OBR service.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java b/obr/command/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java
index 9b70875..5f038b4 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/ObrCommandSupport.java
@@ -32,25 +32,29 @@ import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.Version;
 
-public abstract class ObrCommandSupport extends OsgiCommandSupport {
+public abstract class ObrCommandSupport implements Action {
 
     protected static final char VERSION_DELIM = ',';
 
     @Reference
     private RepositoryAdmin repositoryAdmin;
 
+    @Reference
+    BundleContext bundleContext;
+
     public void setRepositoryAdmin(RepositoryAdmin repositoryAdmin) {
         this.repositoryAdmin = repositoryAdmin;
     }
 
-    protected Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         doExecute(repositoryAdmin);
         return null;
     }
@@ -60,7 +64,7 @@ public abstract class ObrCommandSupport extends OsgiCommandSupport {
     protected Resource[] searchRepository(RepositoryAdmin admin, String targetId, String targetVersion) throws InvalidSyntaxException {
         // Try to see if the targetId is a bundle ID.
         try {
-            Bundle bundle = getBundleContext().getBundle(Long.parseLong(targetId));
+            Bundle bundle = bundleContext.getBundle(Long.parseLong(targetId));
             targetId = bundle.getSymbolicName();
         } catch (NumberFormatException ex) {
             // It was not a number, so ignore.

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/RefreshUrlCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/RefreshUrlCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/RefreshUrlCommand.java
index 9610b97..20a65ed 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/RefreshUrlCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/RefreshUrlCommand.java
@@ -20,10 +20,10 @@ import java.util.List;
 
 import org.apache.felix.bundlerepository.Repository;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "url-refresh", description = "Reloads the repositories to obtain a fresh list of bundles.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/RemoveUrlCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/RemoveUrlCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/RemoveUrlCommand.java
index dd183d1..2d41519 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/RemoveUrlCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/RemoveUrlCommand.java
@@ -20,10 +20,10 @@ import java.util.List;
 
 import org.apache.felix.bundlerepository.Repository;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "url-remove", description = "Removes a list of repository URLs from the OBR service.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/ResolveCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/ResolveCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/ResolveCommand.java
index edbf11f..ab1bd04 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/ResolveCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/ResolveCommand.java
@@ -26,10 +26,10 @@ import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Requirement;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "resolve", description = "Shows the resolution output for a given set of requirements.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/SourceCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/SourceCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/SourceCommand.java
index 8c2eb89..161ba82 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/SourceCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/SourceCommand.java
@@ -22,10 +22,10 @@ import java.util.List;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Resource;
 import org.apache.karaf.obr.command.util.FileUtil;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "obr", name = "source", description = "Downloads the sources for an OBR bundle.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/java/org/apache/karaf/obr/command/StartCommand.java
----------------------------------------------------------------------
diff --git a/obr/command/src/main/java/org/apache/karaf/obr/command/StartCommand.java b/obr/command/src/main/java/org/apache/karaf/obr/command/StartCommand.java
index 9947986..0465bae 100644
--- a/obr/command/src/main/java/org/apache/karaf/obr/command/StartCommand.java
+++ b/obr/command/src/main/java/org/apache/karaf/obr/command/StartCommand.java
@@ -17,10 +17,10 @@
 package org.apache.karaf.obr.command;
 
 import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 import java.util.List;
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/obr/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/obr/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 941d890..0000000
--- a/obr/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.obr.command.*" />
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/obr/command/src/test/java/org/apache/karaf/obr/command/ListCommandTest.java
----------------------------------------------------------------------
diff --git a/obr/command/src/test/java/org/apache/karaf/obr/command/ListCommandTest.java b/obr/command/src/test/java/org/apache/karaf/obr/command/ListCommandTest.java
index 46b5e38..a4bbb17 100644
--- a/obr/command/src/test/java/org/apache/karaf/obr/command/ListCommandTest.java
+++ b/obr/command/src/test/java/org/apache/karaf/obr/command/ListCommandTest.java
@@ -44,7 +44,7 @@ public class ListCommandTest {
 			andReturn(resources);
 		
 		control.replay();
-		command.execute(null);
+		command.execute();
 		control.verify();
 	}
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/package/command/pom.xml
----------------------------------------------------------------------
diff --git a/package/command/pom.xml b/package/command/pom.xml
index 70b66c0..377769b 100644
--- a/package/command/pom.xml
+++ b/package/command/pom.xml
@@ -40,23 +40,12 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.package</groupId>
             <artifactId>org.apache.karaf.package.core</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
@@ -108,6 +97,9 @@
                             org.apache.felix.utils.manifest;-split-package:=merge-first,
                             !*
                         </Private-Package>
+                        <Karaf-Commands>
+                            org.apache.karaf.packages.command
+                        </Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java
----------------------------------------------------------------------
diff --git a/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java b/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java
index 72d1af2..c09a5f6 100644
--- a/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java
+++ b/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java
@@ -24,21 +24,22 @@ import java.util.TreeMap;
 
 import org.apache.karaf.packages.core.PackageService;
 import org.apache.karaf.packages.core.PackageVersion;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.Col;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Col;
+import org.apache.karaf.shell.support.table.ShellTable;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.Version;
 import org.osgi.framework.wiring.BundleCapability;
 import org.osgi.framework.wiring.BundleRevision;
 
 @Command(scope = "package", name = "exports", description = "Lists exported packages and the bundles that export them")
 @Service
-public class Exports extends OsgiCommandSupport {
+public class Exports implements Action {
 
     @Option(name = "-d", description = "Only show packages that are exported by more than one bundle", required = false, multiValued = false)
     private boolean onlyDuplicates;
@@ -49,11 +50,11 @@ public class Exports extends OsgiCommandSupport {
     @Reference
     private PackageService packageService;
 
-    public void setPackageService(PackageService packageService) {
-        this.packageService = packageService;
-    }
+    @Reference
+    private BundleContext bundleContext;
 
-    protected Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
     	if (onlyDuplicates) {
     		checkDuplicateExports();
     	} else {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/package/command/src/main/java/org/apache/karaf/packages/command/Imports.java
----------------------------------------------------------------------
diff --git a/package/command/src/main/java/org/apache/karaf/packages/command/Imports.java b/package/command/src/main/java/org/apache/karaf/packages/command/Imports.java
index e5ea17a..3d086e9 100644
--- a/package/command/src/main/java/org/apache/karaf/packages/command/Imports.java
+++ b/package/command/src/main/java/org/apache/karaf/packages/command/Imports.java
@@ -20,18 +20,18 @@ import java.util.SortedMap;
 
 import org.apache.karaf.packages.core.PackageRequirement;
 import org.apache.karaf.packages.core.PackageService;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.Col;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Col;
+import org.apache.karaf.shell.support.table.ShellTable;
 import org.osgi.framework.Bundle;
 
 @Command(scope = "package", name = "imports", description = "Lists imported packages and the bundles that import them")
 @Service
-public class Imports extends OsgiCommandSupport {
+public class Imports implements Action {
     
     @Option(name = "-p", description = "Only show package instead of full filter", required = false, multiValued = false)
     boolean onlyPackage;
@@ -42,11 +42,8 @@ public class Imports extends OsgiCommandSupport {
     @Reference
     private PackageService packageService;
 
-    public void setPackageService(PackageService packageService) {
-        this.packageService = packageService;
-    }
-
-    protected Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         SortedMap<String, PackageRequirement> imports = packageService.getImports();
         ShellTable table = new ShellTable();
         table.column(new Col(onlyPackage ? "Package name" : "Filter"));

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/package/command/src/main/resources/OSGI-INF/blueprint/shell-bundles.xml
----------------------------------------------------------------------
diff --git a/package/command/src/main/resources/OSGI-INF/blueprint/shell-bundles.xml b/package/command/src/main/resources/OSGI-INF/blueprint/shell-bundles.xml
deleted file mode 100644
index e66dd06..0000000
--- a/package/command/src/main/resources/OSGI-INF/blueprint/shell-bundles.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.packages.command.*" />
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/package/core/pom.xml
----------------------------------------------------------------------
diff --git a/package/core/pom.xml b/package/core/pom.xml
index 5244dc8..90349a0 100644
--- a/package/core/pom.xml
+++ b/package/core/pom.xml
@@ -92,12 +92,8 @@
                 <configuration>
                     <instructions>
                         <Export-Package>
-                            org.apache.karaf.packages.core
+                            org.apache.karaf.packages.core;-noimport:=true
                         </Export-Package>
-                        <Import-Package>
-                            org.apache.felix.service.command;status=provisional,
-                            *
-                        </Import-Package>
                         <Private-Package>
                             org.apache.karaf.packages.core.internal,
                             org.apache.felix.utils.version,

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/pom.xml
----------------------------------------------------------------------
diff --git a/region/command/pom.xml b/region/command/pom.xml
index 79bda61..6e08938 100644
--- a/region/command/pom.xml
+++ b/region/command/pom.xml
@@ -42,16 +42,9 @@
             <artifactId>org.osgi.core</artifactId>
             <scope>provided</scope>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.aries</groupId>
@@ -95,6 +88,11 @@
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Karaf-Commands>*</Karaf-Commands>
+                    </instructions>
+                </configuration>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/src/main/java/org/apache/karaf/region/commands/AddBundleCommand.java
----------------------------------------------------------------------
diff --git a/region/command/src/main/java/org/apache/karaf/region/commands/AddBundleCommand.java b/region/command/src/main/java/org/apache/karaf/region/commands/AddBundleCommand.java
index ed7c28f..30af1e0 100644
--- a/region/command/src/main/java/org/apache/karaf/region/commands/AddBundleCommand.java
+++ b/region/command/src/main/java/org/apache/karaf/region/commands/AddBundleCommand.java
@@ -18,9 +18,9 @@ package org.apache.karaf.region.commands;
 
 import java.util.List;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.eclipse.equinox.region.Region;
 import org.eclipse.equinox.region.RegionDigraph;
 import org.osgi.framework.Bundle;
@@ -40,7 +40,7 @@ public class AddBundleCommand extends RegionCommandSupport {
         for (Long id : ids) {
             for (Region existing: regionDigraph.getRegions()) {
                 if (existing.contains(id)) {
-                    Bundle b = getBundleContext().getBundle(id);
+                    Bundle b = bundleContext.getBundle(id);
                     System.out.println("Removing bundle " + id + " from region " + existing.getName());
                     existing.removeBundle(b);
                     break;

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/src/main/java/org/apache/karaf/region/commands/AddFilterCommand.java
----------------------------------------------------------------------
diff --git a/region/command/src/main/java/org/apache/karaf/region/commands/AddFilterCommand.java b/region/command/src/main/java/org/apache/karaf/region/commands/AddFilterCommand.java
index bbe35b6..ec3766d 100644
--- a/region/command/src/main/java/org/apache/karaf/region/commands/AddFilterCommand.java
+++ b/region/command/src/main/java/org/apache/karaf/region/commands/AddFilterCommand.java
@@ -22,9 +22,9 @@ import java.util.Map;
 
 import org.apache.aries.util.VersionRange;
 import org.apache.aries.util.manifest.ManifestHeaderProcessor;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.eclipse.equinox.region.Region;
 import org.eclipse.equinox.region.RegionDigraph;
 import org.eclipse.equinox.region.RegionFilter;
@@ -50,7 +50,7 @@ public class AddFilterCommand extends RegionCommandSupport {
         Region rFrom = getRegion(regionDigraph, fromRegion);
         Region rTo = getRegion(regionDigraph, toRegion);
         RegionFilterBuilder builder = regionDigraph.createRegionFilterBuilder();
-        BundleContext framework = getBundleContext().getBundle(0).getBundleContext();
+        BundleContext framework = bundleContext.getBundle(0).getBundleContext();
         if (items != null) {
             for (String item : items) {
                 try {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/src/main/java/org/apache/karaf/region/commands/AddRegionCommand.java
----------------------------------------------------------------------
diff --git a/region/command/src/main/java/org/apache/karaf/region/commands/AddRegionCommand.java b/region/command/src/main/java/org/apache/karaf/region/commands/AddRegionCommand.java
index 0daeea3..22c817b 100644
--- a/region/command/src/main/java/org/apache/karaf/region/commands/AddRegionCommand.java
+++ b/region/command/src/main/java/org/apache/karaf/region/commands/AddRegionCommand.java
@@ -18,9 +18,9 @@ package org.apache.karaf.region.commands;
 
 import java.util.List;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.eclipse.equinox.region.RegionDigraph;
 
 @Command(scope = "region", name = "region-add", description = "Adds a list of regions to the region digraph service.")

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/src/main/java/org/apache/karaf/region/commands/InfoCommand.java
----------------------------------------------------------------------
diff --git a/region/command/src/main/java/org/apache/karaf/region/commands/InfoCommand.java b/region/command/src/main/java/org/apache/karaf/region/commands/InfoCommand.java
index 0843538..7c71e36 100644
--- a/region/command/src/main/java/org/apache/karaf/region/commands/InfoCommand.java
+++ b/region/command/src/main/java/org/apache/karaf/region/commands/InfoCommand.java
@@ -20,10 +20,10 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.eclipse.equinox.region.Region;
 import org.eclipse.equinox.region.RegionDigraph;
 import org.eclipse.equinox.region.RegionFilter;
@@ -73,7 +73,7 @@ public class InfoCommand extends RegionCommandSupport {
         System.out.println(region.getName());
         if (verbose || bundles) {
             for (Long id : region.getBundleIds()) {
-                Bundle b = getBundleContext().getBundle(id);
+                Bundle b = bundleContext.getBundle(id);
                 System.out.println("  " + id + "  " + getStateString(b) + b);
             }
         }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/src/main/java/org/apache/karaf/region/commands/RegionCommandSupport.java
----------------------------------------------------------------------
diff --git a/region/command/src/main/java/org/apache/karaf/region/commands/RegionCommandSupport.java b/region/command/src/main/java/org/apache/karaf/region/commands/RegionCommandSupport.java
index f94b2d1..bcdfb6c 100644
--- a/region/command/src/main/java/org/apache/karaf/region/commands/RegionCommandSupport.java
+++ b/region/command/src/main/java/org/apache/karaf/region/commands/RegionCommandSupport.java
@@ -18,25 +18,31 @@ package org.apache.karaf.region.commands;
 
 import java.io.PrintStream;
 
-import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
 import org.eclipse.equinox.region.Region;
 import org.eclipse.equinox.region.RegionDigraph;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.ServiceReference;
 
-public abstract class RegionCommandSupport extends OsgiCommandSupport {
+public abstract class RegionCommandSupport implements Action {
 
     protected static final char VERSION_DELIM = ',';
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    BundleContext bundleContext;
+
+    @Override
+    public Object execute() throws Exception {
         // Get repository instance service.
-        ServiceReference ref = getBundleContext().getServiceReference(RegionDigraph.class.getName());
+        ServiceReference ref = bundleContext.getServiceReference(RegionDigraph.class.getName());
         if (ref == null) {
             System.out.println("RegionDigraph service is unavailable.");
             return null;
         }
         try {
-            RegionDigraph admin = (RegionDigraph) getBundleContext().getService(ref);
+            RegionDigraph admin = (RegionDigraph) bundleContext.getService(ref);
             if (admin == null) {
                 System.out.println("RegionDigraph service is unavailable.");
                 return null;
@@ -45,7 +51,7 @@ public abstract class RegionCommandSupport extends OsgiCommandSupport {
             doExecute(admin);
         }
         finally {
-            getBundleContext().ungetService(ref);
+            bundleContext.ungetService(ref);
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/region/command/src/main/resources/OSGI-INF/blueprint/region-commands.xml
----------------------------------------------------------------------
diff --git a/region/command/src/main/resources/OSGI-INF/blueprint/region-commands.xml b/region/command/src/main/resources/OSGI-INF/blueprint/region-commands.xml
deleted file mode 100644
index e769ff2..0000000
--- a/region/command/src/main/resources/OSGI-INF/blueprint/region-commands.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-    default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.region.commands.*" />
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/pom.xml
----------------------------------------------------------------------
diff --git a/service/command/pom.xml b/service/command/pom.xml
index 69b485b..fa73662 100644
--- a/service/command/pom.xml
+++ b/service/command/pom.xml
@@ -40,14 +40,8 @@
     <dependencies>
 
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -92,6 +86,11 @@
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Karaf-Commands>org.apache.karaf.service.command</Karaf-Commands>
+                    </instructions>
+                </configuration>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/src/main/java/org/apache/karaf/service/command/ListServices.java
----------------------------------------------------------------------
diff --git a/service/command/src/main/java/org/apache/karaf/service/command/ListServices.java b/service/command/src/main/java/org/apache/karaf/service/command/ListServices.java
index 0b12db1..caf546b 100644
--- a/service/command/src/main/java/org/apache/karaf/service/command/ListServices.java
+++ b/service/command/src/main/java/org/apache/karaf/service/command/ListServices.java
@@ -23,14 +23,14 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.felix.service.command.Function;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.util.ShellUtil;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.ShellUtil;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -38,11 +38,11 @@ import org.osgi.framework.ServiceReference;
 
 @Command(scope = "service", name = "list", description = "Lists OSGi services.")
 @Service
-public class ListServices extends OsgiCommandSupport {
+public class ListServices implements Action {
 
     @Argument(index = 0, name = "objectClass", description = "Name of service objectClass to filter for", required = false,
         multiValued = false)
-    @Completer(ObjectClassCompleter.class)
+    @Completion(ObjectClassCompleter.class)
     String objectClass;
     
     @Option(name = "-a", aliases = {}, description = "Shows all services. (By default Karaf commands are hidden)", required = false, multiValued = false)
@@ -51,13 +51,17 @@ public class ListServices extends OsgiCommandSupport {
     @Option(name = "-n", aliases = {}, description = "Shows only service class names", required = false, multiValued = false)
     boolean onlyNames;
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    BundleContext bundleContext;
+
+    @Override
+    public Object execute() throws Exception {
         if (onlyNames) {
             listNames();
             return null;
         }
         List<ServiceReference<?>> serviceRefs = new ArrayList<ServiceReference<?>>();
-        Bundle[] bundles = getBundleContext().getBundles();
+        Bundle[] bundles = bundleContext.getBundles();
         for (Bundle bundle : bundles) {
             ServiceReference<?>[] services = bundle.getRegisteredServices();
             if (services != null) {
@@ -81,7 +85,7 @@ public class ListServices extends OsgiCommandSupport {
     }
     
     private void listNames() {
-        Map<String, Integer> serviceNames = getServiceNamesMap(getBundleContext());
+        Map<String, Integer> serviceNames = getServiceNamesMap(bundleContext);
         ArrayList<String> serviceNamesList = new ArrayList<String>(serviceNames.keySet());
         Collections.sort(serviceNamesList);
         for (String name : serviceNamesList) {
@@ -129,7 +133,7 @@ public class ListServices extends OsgiCommandSupport {
 
     private boolean isCommand(String[] objectClasses) {
         for (String objectClass : objectClasses) {
-            if (objectClass.equals(Function.class.getName())) {
+            if (objectClass.equals("org.apache.felix.service.command.Function")) {
                 return true;
             }
         }
@@ -152,5 +156,8 @@ public class ListServices extends OsgiCommandSupport {
             return classes1[0].compareTo(classes2[0]);
         }
     }
-    
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/src/main/java/org/apache/karaf/service/command/ObjectClassCompleter.java
----------------------------------------------------------------------
diff --git a/service/command/src/main/java/org/apache/karaf/service/command/ObjectClassCompleter.java b/service/command/src/main/java/org/apache/karaf/service/command/ObjectClassCompleter.java
index 9533215..6b62b0c 100644
--- a/service/command/src/main/java/org/apache/karaf/service/command/ObjectClassCompleter.java
+++ b/service/command/src/main/java/org/apache/karaf/service/command/ObjectClassCompleter.java
@@ -24,10 +24,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 import org.osgi.framework.BundleContext;
 
 @Service
@@ -41,7 +43,8 @@ public class ObjectClassCompleter implements Completer {
     }
 
     @SuppressWarnings("rawtypes")
-    public int complete(final String buffer, final int cursor, final List candidates) {
+    @Override
+    public int complete(final Session session, final CommandLine commandLine, final List<String> candidates) {
         Map<String, Integer> serviceNamesMap = ListServices.getServiceNamesMap(context);
         Set<String> serviceNames = serviceNamesMap.keySet();
         List<String> strings = new ArrayList<String>();
@@ -49,7 +52,7 @@ public class ObjectClassCompleter implements Completer {
             strings.add(ObjectClassMatcher.getShortName(name));
         }
         strings.addAll(serviceNames);
-        return new StringsCompleter(strings).complete(buffer, cursor, candidates);
+        return new StringsCompleter(strings).complete(session, commandLine, candidates);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/src/main/java/org/apache/karaf/service/command/Wait.java
----------------------------------------------------------------------
diff --git a/service/command/src/main/java/org/apache/karaf/service/command/Wait.java b/service/command/src/main/java/org/apache/karaf/service/command/Wait.java
index fb9794f..9a0d286 100644
--- a/service/command/src/main/java/org/apache/karaf/service/command/Wait.java
+++ b/service/command/src/main/java/org/apache/karaf/service/command/Wait.java
@@ -18,11 +18,13 @@ package org.apache.karaf.service.command;
 
 import java.util.concurrent.TimeoutException;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkUtil;
@@ -34,7 +36,7 @@ import org.osgi.util.tracker.ServiceTracker;
  */
 @Command(scope = "service", name = "wait", description = "Wait for a given OSGi service.")
 @Service
-public class Wait extends OsgiCommandSupport {
+public class Wait implements Action {
 
     @Option(name = "-e", aliases = { "--exception" }, description = "throw an exception if the service is not found after the timeout")
     boolean exception;
@@ -45,9 +47,12 @@ public class Wait extends OsgiCommandSupport {
     @Argument(name = "service", description="The service class or filter", required = true, multiValued = false)
     String service;
 
+    @Reference
+    BundleContext bundleContext;
+
     @Override
-    protected Object doExecute() throws Exception {
-        ServiceTracker tracker = null;
+    public Object execute() throws Exception {
+        ServiceTracker<?,?> tracker = null;
         try {
             String filter = service;
             if (!filter.startsWith("(")) {
@@ -57,7 +62,7 @@ public class Wait extends OsgiCommandSupport {
                 filter = "(" + filter + ")";
             }
             Filter osgiFilter = FrameworkUtil.createFilter(filter);
-            tracker = new ServiceTracker(bundleContext, osgiFilter, null);
+            tracker = new ServiceTracker<Object, Object>(bundleContext, osgiFilter, null);
             tracker.open(true);
             Object svc = tracker.getService();
             if (timeout >= 0) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/src/main/resources/OSGI-INF/blueprint/shell-services.xml
----------------------------------------------------------------------
diff --git a/service/command/src/main/resources/OSGI-INF/blueprint/shell-services.xml b/service/command/src/main/resources/OSGI-INF/blueprint/shell-services.xml
deleted file mode 100644
index 80d4fbe..0000000
--- a/service/command/src/main/resources/OSGI-INF/blueprint/shell-services.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.service.command.*" />
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/src/test/java/org/apache/karaf/service/command/ListServiceNamesTest.java
----------------------------------------------------------------------
diff --git a/service/command/src/test/java/org/apache/karaf/service/command/ListServiceNamesTest.java b/service/command/src/test/java/org/apache/karaf/service/command/ListServiceNamesTest.java
index 71b6db5..9f42147 100644
--- a/service/command/src/test/java/org/apache/karaf/service/command/ListServiceNamesTest.java
+++ b/service/command/src/test/java/org/apache/karaf/service/command/ListServiceNamesTest.java
@@ -28,7 +28,7 @@ public class ListServiceNamesTest {
         ListServices listServices = new ListServices();
         listServices.setBundleContext(new TestBundleFactory().createBundleContext());
         listServices.onlyNames = true;
-        listServices.doExecute();
+        listServices.execute();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/service/command/src/test/java/org/apache/karaf/service/command/ListServicesTest.java
----------------------------------------------------------------------
diff --git a/service/command/src/test/java/org/apache/karaf/service/command/ListServicesTest.java b/service/command/src/test/java/org/apache/karaf/service/command/ListServicesTest.java
index 9560717..510de6c 100644
--- a/service/command/src/test/java/org/apache/karaf/service/command/ListServicesTest.java
+++ b/service/command/src/test/java/org/apache/karaf/service/command/ListServicesTest.java
@@ -28,7 +28,7 @@ public class ListServicesTest {
     public void listAll() throws Exception {
         ListServices listServices = new ListServices();
         listServices.setBundleContext(new TestBundleFactory().createBundleContext());
-        listServices.doExecute();
+        listServices.execute();
     }
     
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/pom.xml
----------------------------------------------------------------------
diff --git a/shell/commands/pom.xml b/shell/commands/pom.xml
index 6609cd5..3e0b7d6 100644
--- a/shell/commands/pom.xml
+++ b/shell/commands/pom.xml
@@ -43,20 +43,10 @@
             <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.jledit</groupId>
             <artifactId>core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.karaf</groupId>
             <artifactId>org.apache.karaf.util</artifactId>
             <scope>provided</scope>
@@ -106,7 +96,7 @@
                 <configuration>
                     <instructions>
                         <Export-Package>
-                        	!org.apache.karaf.shell.commands.impl*
+                        	org.apache.karaf.shell.commands.info;-noimport:=true
                         </Export-Package>
                         <Private-Package>
                             org.apache.karaf.util.process;-split-package:=merge-first,

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoProvider.java
----------------------------------------------------------------------
diff --git a/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoProvider.java b/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoProvider.java
deleted file mode 100644
index a69f824..0000000
--- a/shell/commands/src/main/java/org/apache/karaf/shell/commands/InfoProvider.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.commands;
-
-import java.util.Properties;
-
-/**
- * A bundle can publish a service with this interface to offer some informations for the shell:info command
- */
-public interface InfoProvider {
-
-    public String getName();
-
-    public Properties getProperties();
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java
----------------------------------------------------------------------
diff --git a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java
index dfa811d..c116861 100644
--- a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java
+++ b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java
@@ -37,7 +37,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.Callable;
 
-import org.apache.karaf.shell.commands.InfoProvider;
+import org.apache.karaf.shell.commands.info.InfoProvider;
 import org.apache.karaf.shell.api.action.Action;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Service;

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/ThreadsAction.java
----------------------------------------------------------------------
diff --git a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/ThreadsAction.java b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/ThreadsAction.java
index fbf6692..24156c5 100644
--- a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/ThreadsAction.java
+++ b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/ThreadsAction.java
@@ -32,7 +32,7 @@ import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 /**
  * Command for showing the full tree of bundles that have been used to resolve

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/InfoBundleTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/InfoBundleTrackerCustomizer.java b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/InfoBundleTrackerCustomizer.java
index 86a3849..a674ad8 100644
--- a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/InfoBundleTrackerCustomizer.java
+++ b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/InfoBundleTrackerCustomizer.java
@@ -16,7 +16,7 @@
  */
 package org.apache.karaf.shell.commands.impl.info;
 
-import org.apache.karaf.shell.commands.InfoProvider;
+import org.apache.karaf.shell.commands.info.InfoProvider;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;


[5/6] git commit: [KARAF-2805] Convert remaining commands to the new model

Posted by gn...@apache.org.
[KARAF-2805] Convert remaining commands to the new model

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/571c6f99
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/571c6f99
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/571c6f99

Branch: refs/heads/master
Commit: 571c6f998181fc8e325ea55b388efea09a0bc319
Parents: 1c29cbc
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Wed Mar 5 23:21:46 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Wed Mar 5 23:21:46 2014 +0100

----------------------------------------------------------------------
 bundle/command/pom.xml                          |  4 --
 .../karaf/bundle/command/ListBundles.java       |  2 +-
 bundle/core/pom.xml                             |  8 ++-
 config/command/pom.xml                          | 13 +++--
 .../karaf/config/command/CancelCommand.java     |  4 +-
 .../config/command/ConfigCommandSupport.java    | 20 ++++++--
 .../command/ConfigPropertyCommandSupport.java   |  6 +--
 .../karaf/config/command/DeleteCommand.java     | 12 ++---
 .../karaf/config/command/EditCommand.java       | 12 ++---
 .../karaf/config/command/ListCommand.java       |  6 +--
 .../karaf/config/command/PropAppendCommand.java | 10 ++--
 .../karaf/config/command/PropDelCommand.java    |  7 +--
 .../karaf/config/command/PropListCommand.java   |  5 +-
 .../karaf/config/command/PropSetCommand.java    | 10 ++--
 .../karaf/config/command/UpdateCommand.java     |  4 +-
 .../completers/ConfigurationCompleter.java      | 32 +++++++++---
 .../ConfigurationPropertyCompleter.java         | 35 ++++++-------
 .../OSGI-INF/blueprint/shell-config.xml         | 28 ----------
 .../karaf/config/command/EditCommandTest.java   | 28 ++++------
 .../config/command/MockCommandSession.java      | 54 +++++++++++++++-----
 .../karaf/config/command/UpdateCommandTest.java | 23 +++------
 diagnostic/command/pom.xml                      | 16 +-----
 .../karaf/diagnostic/command/DumpCommand.java   | 24 +++++----
 .../OSGI-INF/blueprint/shell-diagnostic.xml     | 25 ---------
 features/command/pom.xml                        |  5 --
 .../command/ListFeatureVersionsCommand.java     |  2 +-
 .../features/command/ListFeaturesCommand.java   |  2 +-
 .../karaf/features/command/RepoListCommand.java |  2 +-
 http/command/pom.xml                            | 22 +-------
 .../karaf/http/command/ServletListCommand.java  | 18 +++----
 .../resources/OSGI-INF/blueprint/blueprint.xml  | 25 ---------
 instance/command/pom.xml                        | 11 ----
 .../karaf/instance/command/ListCommand.java     |  2 +-
 jaas/command/pom.xml                            | 24 ++-------
 .../karaf/jaas/command/CancelCommand.java       | 10 ++--
 .../karaf/jaas/command/GroupAddCommand.java     |  6 +--
 .../karaf/jaas/command/GroupDeleteCommand.java  |  6 +--
 .../karaf/jaas/command/GroupRoleAddCommand.java |  6 +--
 .../jaas/command/GroupRoleDeleteCommand.java    |  6 +--
 .../karaf/jaas/command/JaasCommandSupport.java  | 50 +++++++++---------
 .../karaf/jaas/command/ListPendingCommand.java  | 13 ++---
 .../karaf/jaas/command/ListRealmsCommand.java   | 18 +++----
 .../karaf/jaas/command/ListUsersCommand.java    | 19 +++----
 .../karaf/jaas/command/ManageRealmCommand.java  | 26 +++++-----
 .../karaf/jaas/command/RoleAddCommand.java      |  6 +--
 .../karaf/jaas/command/RoleDeleteCommand.java   |  6 +--
 .../karaf/jaas/command/UpdateCommand.java       | 15 +++---
 .../karaf/jaas/command/UserAddCommand.java      |  6 +--
 .../karaf/jaas/command/UserDeleteCommand.java   |  6 +--
 .../completers/LoginModuleNameCompleter.java    | 25 +++++----
 .../jaas/command/completers/RealmCompleter.java | 27 +++++-----
 .../OSGI-INF/blueprint/jaas-command.xml         | 39 --------------
 .../jaas/command/ManageRealmCommandTest.java    | 31 +++++------
 jdbc/command/pom.xml                            |  7 +--
 .../karaf/jdbc/command/CreateCommand.java       | 17 +++---
 .../karaf/jdbc/command/DataSourcesCommand.java  | 11 ++--
 .../karaf/jdbc/command/DeleteCommand.java       | 13 ++---
 .../karaf/jdbc/command/ExecuteCommand.java      | 13 ++---
 .../apache/karaf/jdbc/command/InfoCommand.java  | 15 +++---
 .../karaf/jdbc/command/JdbcCommandSupport.java  |  8 ++-
 .../apache/karaf/jdbc/command/QueryCommand.java | 21 ++++----
 .../karaf/jdbc/command/TablesCommand.java       | 21 ++++----
 .../DataSourcesFileNameCompleter.java           | 14 ++---
 .../completers/DataSourcesNameCompleter.java    | 14 ++---
 .../OSGI-INF/blueprint/jdbc-command.xml         | 23 ---------
 jms/command/pom.xml                             |  7 +--
 .../apache/karaf/jms/command/BrowseCommand.java | 17 +++---
 .../jms/command/ConnectionFactoriesCommand.java | 11 ++--
 .../karaf/jms/command/ConsumeCommand.java       | 11 ++--
 .../apache/karaf/jms/command/CountCommand.java  | 12 +++--
 .../apache/karaf/jms/command/CreateCommand.java | 19 +++----
 .../apache/karaf/jms/command/DeleteCommand.java | 14 ++---
 .../apache/karaf/jms/command/InfoCommand.java   | 10 ++--
 .../karaf/jms/command/JmsCommandSupport.java    |  6 +--
 .../command/JmsConnectionCommandSupport.java    |  8 +--
 .../apache/karaf/jms/command/MoveCommand.java   | 12 +++--
 .../apache/karaf/jms/command/QueuesCommand.java | 10 ++--
 .../apache/karaf/jms/command/SendCommand.java   | 12 +++--
 .../apache/karaf/jms/command/TopicsCommand.java | 10 ++--
 .../ConnectionFactoriesFileNameCompleter.java   | 18 ++++---
 .../ConnectionFactoriesNameCompleter.java       | 18 ++++---
 .../OSGI-INF/blueprint/jms-command.xml          | 23 ---------
 jndi/command/pom.xml                            |  7 +--
 .../apache/karaf/jndi/command/AliasCommand.java | 25 +++++----
 .../apache/karaf/jndi/command/BindCommand.java  | 25 +++++----
 .../karaf/jndi/command/ContextsCommand.java     | 27 ++++++----
 .../karaf/jndi/command/CreateCommand.java       | 23 ++++++---
 .../karaf/jndi/command/DeleteCommand.java       | 23 ++++++---
 .../karaf/jndi/command/JndiCommandSupport.java  | 38 --------------
 .../apache/karaf/jndi/command/NamesCommand.java | 27 ++++++----
 .../karaf/jndi/command/UnbindCommand.java       | 23 ++++++---
 .../command/completers/ContextsCompleter.java   | 15 +++---
 .../jndi/command/completers/NamesCompleter.java | 15 +++---
 .../command/completers/ServicesIdCompleter.java | 15 +++---
 .../OSGI-INF/blueprint/jndi-command.xml         | 23 ---------
 kar/command/pom.xml                             | 10 ----
 .../karaf/kar/command/ListKarCommand.java       |  2 +-
 log/command/pom.xml                             | 22 ++++----
 .../org/apache/karaf/log/command/ClearLog.java  | 17 ++++--
 .../karaf/log/command/DisplayException.java     | 21 +++++---
 .../apache/karaf/log/command/DisplayLog.java    | 32 ++++++------
 .../apache/karaf/log/command/GetLogLevel.java   | 25 +++++----
 .../karaf/log/command/LogCommandSupport.java    | 32 ------------
 .../org/apache/karaf/log/command/LogEntry.java  | 36 ++++++-------
 .../org/apache/karaf/log/command/LogTail.java   | 23 +++++++--
 .../apache/karaf/log/command/SetLogLevel.java   | 24 ++++++---
 .../resources/OSGI-INF/blueprint/shell-log.xml  | 27 ----------
 obr/command/pom.xml                             | 15 ++----
 .../apache/karaf/obr/command/AddUrlCommand.java |  6 +--
 .../apache/karaf/obr/command/DeployCommand.java |  8 +--
 .../apache/karaf/obr/command/FindCommand.java   |  6 +--
 .../apache/karaf/obr/command/InfoCommand.java   |  6 +--
 .../apache/karaf/obr/command/ListCommand.java   | 13 ++---
 .../karaf/obr/command/ListUrlCommand.java       |  8 +--
 .../karaf/obr/command/ObrCommandSupport.java    | 16 +++---
 .../karaf/obr/command/RefreshUrlCommand.java    |  8 +--
 .../karaf/obr/command/RemoveUrlCommand.java     |  8 +--
 .../karaf/obr/command/ResolveCommand.java       |  8 +--
 .../apache/karaf/obr/command/SourceCommand.java |  8 +--
 .../apache/karaf/obr/command/StartCommand.java  |  8 +--
 .../resources/OSGI-INF/blueprint/blueprint.xml  | 25 ---------
 .../karaf/obr/command/ListCommandTest.java      |  2 +-
 package/command/pom.xml                         | 16 ++----
 .../apache/karaf/packages/command/Exports.java  | 25 ++++-----
 .../apache/karaf/packages/command/Imports.java  | 23 ++++-----
 .../OSGI-INF/blueprint/shell-bundles.xml        | 25 ---------
 package/core/pom.xml                            |  6 +--
 region/command/pom.xml                          | 14 +++--
 .../karaf/region/commands/AddBundleCommand.java |  8 +--
 .../karaf/region/commands/AddFilterCommand.java |  8 +--
 .../karaf/region/commands/AddRegionCommand.java |  6 +--
 .../karaf/region/commands/InfoCommand.java      | 10 ++--
 .../region/commands/RegionCommandSupport.java   | 18 ++++---
 .../OSGI-INF/blueprint/region-commands.xml      | 26 ----------
 service/command/pom.xml                         | 13 +++--
 .../karaf/service/command/ListServices.java     | 37 ++++++++------
 .../service/command/ObjectClassCompleter.java   | 15 +++---
 .../org/apache/karaf/service/command/Wait.java  | 23 +++++----
 .../OSGI-INF/blueprint/shell-services.xml       | 26 ----------
 .../service/command/ListServiceNamesTest.java   |  2 +-
 .../karaf/service/command/ListServicesTest.java |  2 +-
 shell/commands/pom.xml                          | 12 +----
 .../karaf/shell/commands/InfoProvider.java      | 30 -----------
 .../karaf/shell/commands/impl/InfoAction.java   |  2 +-
 .../shell/commands/impl/ThreadsAction.java      |  2 +-
 .../impl/info/InfoBundleTrackerCustomizer.java  |  2 +-
 .../commands/impl/info/PojoInfoProvider.java    |  2 +-
 .../karaf/shell/commands/info/InfoProvider.java | 30 +++++++++++
 system/command/pom.xml                          | 17 +-----
 .../system/commands/AbstractSystemAction.java   | 33 ------------
 .../karaf/system/commands/FrameworkOptions.java | 18 ++++---
 .../org/apache/karaf/system/commands/Name.java  | 18 +++++--
 .../apache/karaf/system/commands/Shutdown.java  | 26 ++++++----
 .../karaf/system/commands/StartLevel.java       | 17 +++---
 .../karaf/system/commands/SystemProperty.java   | 34 ++++++++----
 .../apache/karaf/system/commands/Version.java   | 15 ++++--
 .../OSGI-INF/blueprint/system-commands.xml      | 25 ---------
 web/command/pom.xml                             | 15 +-----
 .../org/apache/karaf/web/commands/List.java     | 22 ++++----
 .../org/apache/karaf/web/commands/Start.java    | 17 +++---
 .../org/apache/karaf/web/commands/Stop.java     | 19 +++----
 .../OSGI-INF/blueprint/web-commands.xml         | 25 ---------
 162 files changed, 1109 insertions(+), 1494 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/bundle/command/pom.xml
----------------------------------------------------------------------
diff --git a/bundle/command/pom.xml b/bundle/command/pom.xml
index d6bd26a..f1a0867 100644
--- a/bundle/command/pom.xml
+++ b/bundle/command/pom.xml
@@ -40,10 +40,6 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
             <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/bundle/command/src/main/java/org/apache/karaf/bundle/command/ListBundles.java
----------------------------------------------------------------------
diff --git a/bundle/command/src/main/java/org/apache/karaf/bundle/command/ListBundles.java b/bundle/command/src/main/java/org/apache/karaf/bundle/command/ListBundles.java
index 4ab0af9..107e578 100644
--- a/bundle/command/src/main/java/org/apache/karaf/bundle/command/ListBundles.java
+++ b/bundle/command/src/main/java/org/apache/karaf/bundle/command/ListBundles.java
@@ -19,12 +19,12 @@ package org.apache.karaf.bundle.command;
 import org.apache.karaf.bundle.core.BundleInfo;
 import org.apache.karaf.bundle.core.BundleService;
 import org.apache.karaf.bundle.core.BundleState;
-import org.apache.karaf.shell.table.ShellTable;
 import org.apache.karaf.shell.api.action.Action;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Reference;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.startlevel.FrameworkStartLevel;

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/bundle/core/pom.xml
----------------------------------------------------------------------
diff --git a/bundle/core/pom.xml b/bundle/core/pom.xml
index e1ba3fa..dbcd62a 100644
--- a/bundle/core/pom.xml
+++ b/bundle/core/pom.xml
@@ -107,11 +107,9 @@
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
-                        <Export-Package>org.apache.karaf.bundle.core</Export-Package>
-                        <Import-Package>
-                            org.apache.felix.service.command;status=provisional,
-                            *
-                        </Import-Package>
+                        <Export-Package>
+                            org.apache.karaf.bundle.core;-noimport:=true
+                        </Export-Package>
                         <Private-Package>
                             org.apache.karaf.bundle.core.internal,
                             org.apache.karaf.util.maven,

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/pom.xml
----------------------------------------------------------------------
diff --git a/config/command/pom.xml b/config/command/pom.xml
index 2a3636f..35f7e1e 100644
--- a/config/command/pom.xml
+++ b/config/command/pom.xml
@@ -44,13 +44,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
 
         <dependency>
@@ -97,6 +91,11 @@
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Karaf-Commands>*</Karaf-Commands>
+                    </instructions>
+                </configuration>
             </plugin>
         </plugins>
     </build>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/CancelCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/CancelCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/CancelCommand.java
index d3274dd..dff43fa 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/CancelCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/CancelCommand.java
@@ -16,8 +16,8 @@
  */
 package org.apache.karaf.config.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "config", name = "cancel", description = "Cancels the changes to the configuration being edited.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/ConfigCommandSupport.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/ConfigCommandSupport.java b/config/command/src/main/java/org/apache/karaf/config/command/ConfigCommandSupport.java
index 9111b53..fe0ca93 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/ConfigCommandSupport.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/ConfigCommandSupport.java
@@ -19,8 +19,9 @@ package org.apache.karaf.config.command;
 import java.util.Dictionary;
 
 import org.apache.karaf.config.core.ConfigRepository;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.console.Session;
 
 /**
  * Abstract class from which all commands related to the ConfigurationAdmin
@@ -28,7 +29,7 @@ import org.apache.karaf.shell.console.OsgiCommandSupport;
  * This command retrieves a reference to the ConfigurationAdmin service before
  * calling another method to actually process the command.
  */
-public abstract class ConfigCommandSupport extends OsgiCommandSupport {
+public abstract class ConfigCommandSupport implements Action {
 
     public static final String PROPERTY_CONFIG_PID = "ConfigCommand.PID";
     public static final String PROPERTY_CONFIG_PROPS = "ConfigCommand.Props";
@@ -37,6 +38,16 @@ public abstract class ConfigCommandSupport extends OsgiCommandSupport {
     @Reference
     protected ConfigRepository configRepository;
 
+    @Reference
+    protected Session session;
+
+    @Override
+    public Object execute() throws Exception {
+        return doExecute();
+    }
+
+    protected abstract Object doExecute() throws Exception;
+
     @SuppressWarnings("rawtypes")
     protected Dictionary getEditedProps() throws Exception {
         return (Dictionary) this.session.get(PROPERTY_CONFIG_PROPS);
@@ -46,4 +57,7 @@ public abstract class ConfigCommandSupport extends OsgiCommandSupport {
         this.configRepository = configRepository;
     }
 
+    public void setSession(Session session) {
+        this.session = session;
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java b/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java
index 3e6af04..619c224 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/ConfigPropertyCommandSupport.java
@@ -20,8 +20,8 @@ import java.util.Dictionary;
 import java.util.Properties;
 
 import org.apache.karaf.config.command.completers.ConfigurationCompleter;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
 
 /**
  * Abstract class which commands that are related to property processing should extend.
@@ -29,7 +29,7 @@ import org.apache.karaf.shell.commands.Option;
 public abstract class ConfigPropertyCommandSupport extends ConfigCommandSupport {
 
     @Option(name = "-p", aliases = "--pid", description = "The configuration pid", required = false, multiValued = false)
-    @Completer(ConfigurationCompleter.class)
+    @Completion(ConfigurationCompleter.class)
     protected String pid;
 
     @SuppressWarnings("rawtypes")

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/DeleteCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/DeleteCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/DeleteCommand.java
index 506ce48..6953ef0 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/DeleteCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/DeleteCommand.java
@@ -17,18 +17,18 @@
 package org.apache.karaf.config.command;
 
 import org.apache.karaf.config.command.completers.ConfigurationCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "config", name = "delete", description = "Delete a configuration.")
 @Service
 public class DeleteCommand extends ConfigCommandSupport {
 
     @Argument(index = 0, name = "pid", description = "PID of the configuration", required = true, multiValued = false)
-    @Completer(ConfigurationCompleter.class)
+    @Completion(ConfigurationCompleter.class)
     String pid;
 
     @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/EditCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/EditCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/EditCommand.java
index aeaede3..8c48b83 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/EditCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/EditCommand.java
@@ -19,11 +19,11 @@ package org.apache.karaf.config.command;
 import java.util.Dictionary;
 
 import org.apache.karaf.config.command.completers.ConfigurationCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.osgi.service.cm.Configuration;
 
 @Command(scope = "config", name = "edit", description = "Creates or edits a configuration.", detailedDescription="classpath:edit.txt")
@@ -31,7 +31,7 @@ import org.osgi.service.cm.Configuration;
 public class EditCommand extends ConfigCommandSupport {
 
     @Argument(index = 0, name = "pid", description = "PID of the configuration or of the factory if --factory is given. Pid can also be specified as ldap query", required = true, multiValued = false)
-    @Completer(ConfigurationCompleter.class)
+    @Completion(ConfigurationCompleter.class)
     String pid;
 
     @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/ListCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/ListCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/ListCommand.java
index 8589e72..eff3476 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/ListCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/ListCommand.java
@@ -19,9 +19,9 @@ package org.apache.karaf.config.command;
 import java.util.Dictionary;
 import java.util.Enumeration;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.osgi.service.cm.Configuration;
 
 @Command(scope = "config", name = "list", description = "Lists existing configurations.")

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/PropAppendCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/PropAppendCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/PropAppendCommand.java
index 6d13e13..f021146 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/PropAppendCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/PropAppendCommand.java
@@ -19,17 +19,17 @@ package org.apache.karaf.config.command;
 import java.util.Dictionary;
 
 import org.apache.karaf.config.command.completers.ConfigurationPropertyCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "config", name = "property-append", description = "Appends the given value to an existing property or creates the property with the specified name and value.")
 @Service
 public class PropAppendCommand extends ConfigPropertyCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The name of the property", required = true, multiValued = false)
-    @Completer(ConfigurationPropertyCompleter.class)
+    @Completion(ConfigurationPropertyCompleter.class)
     String prop;
 
     @Argument(index = 1, name = "value", description = "The value to append to the property", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/PropDelCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/PropDelCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/PropDelCommand.java
index 3280454..e416cf6 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/PropDelCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/PropDelCommand.java
@@ -18,9 +18,10 @@ package org.apache.karaf.config.command;
 
 import java.util.Dictionary;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+
 
 @Command(scope = "config", name = "property-delete", description = "Deletes a property from the configuration being edited.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/PropListCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/PropListCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/PropListCommand.java
index d0b208b..a0d3a61 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/PropListCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/PropListCommand.java
@@ -18,8 +18,9 @@ package org.apache.karaf.config.command;
 
 import java.util.Dictionary;
 import java.util.Enumeration;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "config", name = "property-list", description = "Lists properties from the currently edited configuration.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/PropSetCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/PropSetCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/PropSetCommand.java
index 16e58b9..8337f6a 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/PropSetCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/PropSetCommand.java
@@ -19,17 +19,17 @@ package org.apache.karaf.config.command;
 import java.util.Dictionary;
 
 import org.apache.karaf.config.command.completers.ConfigurationPropertyCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "config", name = "property-set", description = "Sets a property in the currently edited configuration.")
 @Service
 public class PropSetCommand extends ConfigPropertyCommandSupport {
 
     @Argument(index = 0, name = "property", description = "The name of the property to set", required = true, multiValued = false)
-    @Completer(ConfigurationPropertyCompleter.class)
+    @Completion(ConfigurationPropertyCompleter.class)
     String prop;
 
     @Argument(index = 1, name = "value", description = "The value of the property", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java b/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java
index ae48722..cc368b8 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/UpdateCommand.java
@@ -18,8 +18,8 @@ package org.apache.karaf.config.command;
 
 import java.util.Dictionary;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "config", name = "update", description = "Saves and propagates changes from the configuration being edited.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationCompleter.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationCompleter.java b/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationCompleter.java
index 3122ca2..fe60c56 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationCompleter.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationCompleter.java
@@ -23,11 +23,16 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.karaf.shell.inject.Init;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.console.Completer;
+import org.apache.karaf.shell.api.action.lifecycle.Destroy;
+import org.apache.karaf.shell.api.action.lifecycle.Init;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.cm.ConfigurationEvent;
@@ -47,12 +52,19 @@ public class ConfigurationCompleter implements Completer, ConfigurationListener
     @Reference
     private ConfigurationAdmin admin;
 
+    @Reference
+    private BundleContext bundleContext;
+
+    private ServiceRegistration<ConfigurationListener> registration;
+
     public void setAdmin(ConfigurationAdmin admin) {
         this.admin = admin;
     }
 
     @Init
     public void init() {
+        registration = bundleContext.registerService(ConfigurationListener.class, this, null);
+
         Configuration[] configs;
         try {
             configs = admin.listConfigurations(null);
@@ -71,9 +83,13 @@ public class ConfigurationCompleter implements Completer, ConfigurationListener
         delegate.getStrings().addAll(pids);
     }
 
-    @SuppressWarnings("rawtypes")
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        return delegate.complete(buffer, cursor, candidates);
+    @Destroy
+    public void destroy() {
+        registration.unregister();
+    }
+
+    public int complete(final Session session, final CommandLine commandLine, final List<String> candidates) {
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public void configurationEvent(ConfigurationEvent configurationEvent) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationPropertyCompleter.java
----------------------------------------------------------------------
diff --git a/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationPropertyCompleter.java b/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationPropertyCompleter.java
index 2d98098..2b43fec 100644
--- a/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationPropertyCompleter.java
+++ b/config/command/src/main/java/org/apache/karaf/config/command/completers/ConfigurationPropertyCompleter.java
@@ -27,14 +27,13 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.felix.service.command.CommandSession;
 import org.apache.karaf.config.command.ConfigCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.console.CommandSessionHolder;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.ArgumentCompleter;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
@@ -57,30 +56,26 @@ public class ConfigurationPropertyCompleter implements Completer {
     private ConfigurationAdmin configAdmin;
 
     @SuppressWarnings("rawtypes")
-    public int complete(final String buffer, final int cursor, final List candidates) {
-        CommandSession session = CommandSessionHolder.getSession();
+    public int complete(final Session session, final CommandLine commandLine, final List<String> candidates) {
         if (session != null) {
-            String pid = getPid(session);
+            String pid = getPid(session, commandLine);
             Set<String> propertyNames = getPropertyNames(pid);
             delegate.getStrings().clear();
             if (propertyNames != null && !propertyNames.isEmpty()) {
                 delegate.getStrings().addAll(propertyNames);
             }
         }
-        return delegate.complete(buffer,cursor,candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     /**
-     * Retrieves the pid stored in the {@link CommandSession} or passed as an argument.
-     * Argument takes precedence from pid stored in the {@link CommandSession}.
-     * @param commandSession
-     * @return
+     * Retrieves the pid stored in the {@link Session} or passed as an argument.
+     * Argument takes precedence from pid stored in the {@link Session}.
      */
-    private String getPid(CommandSession commandSession) {
-        String pid = (String) commandSession.get(ConfigCommandSupport.PROPERTY_CONFIG_PID);
-        ArgumentCompleter.ArgumentList list = (ArgumentCompleter.ArgumentList) commandSession.get(ArgumentCompleter.ARGUMENTS_LIST);
-        if (list != null && list.getArguments() != null && list.getArguments().length > 0) {
-            List<String> arguments = Arrays.asList(list.getArguments());
+    private String getPid(Session session, CommandLine commandLine) {
+        String pid = (String) session.get(ConfigCommandSupport.PROPERTY_CONFIG_PID);
+        if (commandLine.getArguments().length > 0) {
+            List<String> arguments = Arrays.asList(commandLine.getArguments());
             if (arguments.contains(OPTION)) {
                 int index = arguments.indexOf(OPTION);
                 if (arguments.size() > index) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/main/resources/OSGI-INF/blueprint/shell-config.xml
----------------------------------------------------------------------
diff --git a/config/command/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/config/command/src/main/resources/OSGI-INF/blueprint/shell-config.xml
deleted file mode 100644
index 4e91d25..0000000
--- a/config/command/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
-           default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.config.command.*" />
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java
----------------------------------------------------------------------
diff --git a/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java b/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java
index c019644..09dc000 100644
--- a/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java
+++ b/config/command/src/test/java/org/apache/karaf/config/command/EditCommandTest.java
@@ -16,24 +16,20 @@
  */
 package org.apache.karaf.config.command;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-
 import java.util.Dictionary;
 import java.util.Properties;
 
 import junit.framework.TestCase;
-
-import org.apache.felix.service.command.CommandSession;
-import org.apache.karaf.config.command.ConfigCommandSupport;
-import org.apache.karaf.config.command.EditCommand;
 import org.apache.karaf.config.core.impl.ConfigRepositoryImpl;
-import org.easymock.EasyMock;
+import org.apache.karaf.shell.api.console.Session;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
 /**
  * Test cases for {@link EditCommand}
  */
@@ -44,23 +40,17 @@ public class EditCommandTest extends TestCase {
     private EditCommand command;
     private BundleContext context;
     private ConfigurationAdmin admin;
-    private CommandSession session;
+    private Session session;
 
     @Override
     protected void setUp() throws Exception {
         command = new EditCommand();
 
-        
-        context = EasyMock.createMock(BundleContext.class);
-        command.setBundleContext(context);
-        
         admin = createMock(ConfigurationAdmin.class);
         command.setConfigRepository(new ConfigRepositoryImpl(admin));
-        expect(context.getBundle(0)).andReturn(null).anyTimes();
 
-        replay(context);
-        
         session = new MockCommandSession();
+        command.setSession(session);
     }
     
     public void testExecuteOnExistingPid() throws Exception {        
@@ -74,7 +64,7 @@ public class EditCommandTest extends TestCase {
         replay(config);
         
         command.pid = PID; 
-        command.execute(session);
+        command.execute();
         
         // the PID and Dictionary should have been set on the session
         assertEquals("The PID should be set on the session",
@@ -94,7 +84,7 @@ public class EditCommandTest extends TestCase {
         replay(config);
         
         command.pid = PID; 
-        command.execute(session);
+        command.execute();
 
         // the PID and an empty Dictionary should have been set on the session        
         assertEquals("The PID should be set on the session",

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/test/java/org/apache/karaf/config/command/MockCommandSession.java
----------------------------------------------------------------------
diff --git a/config/command/src/test/java/org/apache/karaf/config/command/MockCommandSession.java b/config/command/src/test/java/org/apache/karaf/config/command/MockCommandSession.java
index 8982de1..7fa430b 100644
--- a/config/command/src/test/java/org/apache/karaf/config/command/MockCommandSession.java
+++ b/config/command/src/test/java/org/apache/karaf/config/command/MockCommandSession.java
@@ -16,17 +16,22 @@
  */
 package org.apache.karaf.config.command;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.felix.service.command.CommandSession;
+import org.apache.karaf.shell.api.console.History;
+import org.apache.karaf.shell.api.console.Registry;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.api.console.SessionFactory;
+import org.apache.karaf.shell.api.console.Terminal;
 
 /*
  * A mock CommandSession implementation that only cares about the properties set on the session
  */
-class MockCommandSession implements CommandSession {
+class MockCommandSession implements Session {
 
     private Map<String, Object> properties = new HashMap<String, Object>();
 
@@ -34,21 +39,11 @@ class MockCommandSession implements CommandSession {
         // not implemented
     }
 
-    public Object convert(Class<?> type, Object instance) {
-        // not implemented
-        return null;
-    }
-
     public Object execute(CharSequence commandline) throws Exception {
         // not implemented
         return null;
     }
 
-    public CharSequence format(Object target, int level) {
-        // not implemented
-        return null;
-    }
-
     public Object get(String name) {
         return properties.get(name);
     }
@@ -66,4 +61,39 @@ class MockCommandSession implements CommandSession {
     public void put(String name, Object value) {
         properties.put(name, value);
     }
+
+    @Override
+    public String readLine(String prompt, Character mask) throws IOException {
+        return null;
+    }
+
+    @Override
+    public Terminal getTerminal() {
+        return null;
+    }
+
+    @Override
+    public History getHistory() {
+        return null;
+    }
+
+    @Override
+    public Registry getRegistry() {
+        return null;
+    }
+
+    @Override
+    public SessionFactory getFactory() {
+        return null;
+    }
+
+    @Override
+    public String resolveCommand(String name) {
+        return null;
+    }
+
+    @Override
+    public void run() {
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java
----------------------------------------------------------------------
diff --git a/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java b/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java
index 64d92ac..e3f58b5 100644
--- a/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java
+++ b/config/command/src/test/java/org/apache/karaf/config/command/UpdateCommandTest.java
@@ -27,7 +27,6 @@ import junit.framework.TestCase;
 
 import org.apache.karaf.config.core.ConfigRepository;
 import org.easymock.EasyMock;
-import org.osgi.framework.BundleContext;
 
 /**
  * Test cases for {@link EditCommand}
@@ -41,40 +40,34 @@ public class UpdateCommandTest extends TestCase {
 		Dictionary<String, Object> props = new Hashtable<String, Object>();
 
         UpdateCommand command = new UpdateCommand();
-        BundleContext context = EasyMock.createMock(BundleContext.class);
-        command.setBundleContext(context);
         ConfigRepository configRepo = EasyMock.createMock(ConfigRepository.class);
         configRepo.update(EasyMock.eq(PID), EasyMock.eq(props));
         EasyMock.expectLastCall();
 		command.setConfigRepository(configRepo);
-        expect(context.getBundle(0)).andReturn(null).anyTimes();
-        
+
         MockCommandSession session = createMockSessionForFactoryEdit(PID, false, props);
-        replay(context);
+        command.setSession(session);
         replay(configRepo);
 
-        command.execute(session);
-        EasyMock.verify(context, configRepo);
+        command.execute();
+        EasyMock.verify(configRepo);
     }
     
     public void testupdateOnNewFactoryPid() throws Exception {
 		Dictionary<String, Object> props = new Hashtable<String, Object>();
 
         UpdateCommand command = new UpdateCommand();
-        BundleContext context = EasyMock.createMock(BundleContext.class);
-        command.setBundleContext(context);
         ConfigRepository configRepo = EasyMock.createMock(ConfigRepository.class);
         expect(configRepo.createFactoryConfiguration(EasyMock.eq(FACTORY_PID), EasyMock.eq(props)))
         	.andReturn(PID + ".35326647");
 		command.setConfigRepository(configRepo);
-        expect(context.getBundle(0)).andReturn(null).anyTimes();
-        
+
         MockCommandSession session = createMockSessionForFactoryEdit(FACTORY_PID, true, props);
-        replay(context);
+        command.setSession(session);
         replay(configRepo);
 
-        command.execute(session);
-        EasyMock.verify(context, configRepo);
+        command.execute();
+        EasyMock.verify(configRepo);
     }
 
 	private MockCommandSession createMockSessionForFactoryEdit(String pid, boolean isFactory, 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/diagnostic/command/pom.xml
----------------------------------------------------------------------
diff --git a/diagnostic/command/pom.xml b/diagnostic/command/pom.xml
index 741b472..710b9c5 100644
--- a/diagnostic/command/pom.xml
+++ b/diagnostic/command/pom.xml
@@ -43,13 +43,6 @@
             <artifactId>org.osgi.core</artifactId>
             <scope>provided</scope>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
@@ -61,7 +54,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
     </dependencies>
 
@@ -87,12 +80,7 @@
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
-                        <Import-Package>
-                            org.apache.aries.blueprint,
-                            org.osgi.service.blueprint.container,
-                            org.osgi.service.blueprint.reflect,
-                            *
-                        </Import-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
----------------------------------------------------------------------
diff --git a/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java b/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
index 9a0af4c..3f6c607 100644
--- a/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
+++ b/diagnostic/command/src/main/java/org/apache/karaf/diagnostic/command/DumpCommand.java
@@ -22,22 +22,23 @@ import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.diagnostic.core.DumpDestination;
 import org.apache.karaf.diagnostic.core.DumpProvider;
 import org.apache.karaf.diagnostic.core.common.DirectoryDumpDestination;
 import org.apache.karaf.diagnostic.core.common.ZipDumpDestination;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 /**
  * Command to create dump from shell.
  */
 @Command(scope = "dev", name = "dump-create", description = "Creates zip archive with diagnostic info.")
 @Service
-public class DumpCommand extends OsgiCommandSupport {
+public class DumpCommand implements Action {
 
     /**
      * Output format of the filename if not defined otherwise
@@ -56,14 +57,15 @@ public class DumpCommand extends OsgiCommandSupport {
     @Argument(name = "name", description = "Name of created zip or directory", required = false)
     String fileName;
 
+    @Reference
+    List<DumpProvider> providers;
+
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         DumpDestination destination;
 
-        List<DumpProvider> providers = getAllServices(DumpProvider.class);
-
         if (providers.isEmpty()) {
-            session.getConsole().println("Unable to create dump. No providers were found");
+            System.out.println("Unable to create dump. No providers were found");
             return null;
         }
 
@@ -87,7 +89,7 @@ public class DumpCommand extends OsgiCommandSupport {
             provider.createDump(destination);
         }
         destination.save();
-        session.getConsole().println("Diagnostic dump created at " + target.getAbsolutePath() + ".");
+        System.out.println("Diagnostic dump created at " + target.getAbsolutePath() + ".");
 
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml
----------------------------------------------------------------------
diff --git a/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml b/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml
deleted file mode 100644
index ff508d7..0000000
--- a/diagnostic/command/src/main/resources/OSGI-INF/blueprint/shell-diagnostic.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.diagnostic.command.*" />
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/features/command/pom.xml
----------------------------------------------------------------------
diff --git a/features/command/pom.xml b/features/command/pom.xml
index debe123..1aedcde 100644
--- a/features/command/pom.xml
+++ b/features/command/pom.xml
@@ -49,11 +49,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.apache.karaf.features</groupId>
             <artifactId>org.apache.karaf.features.core</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java
----------------------------------------------------------------------
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java
index 792825c..b2c5e42 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/ListFeatureVersionsCommand.java
@@ -22,12 +22,12 @@ import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Repository;
 import org.apache.karaf.features.command.completers.AllFeatureCompleter;
-import org.apache.karaf.shell.table.ShellTable;
 import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Completion;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "feature", name = "version-list", description = "Lists all versions of a feature available from the currently available repositories.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
----------------------------------------------------------------------
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
index 0cb6d3c..40c45b4 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
@@ -24,10 +24,10 @@ import java.util.List;
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Repository;
-import org.apache.karaf.shell.table.ShellTable;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "feature", name = "list", description = "Lists all existing features available from the defined repositories.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/features/command/src/main/java/org/apache/karaf/features/command/RepoListCommand.java
----------------------------------------------------------------------
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/RepoListCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/RepoListCommand.java
index af180bd..a735aa6 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/RepoListCommand.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/RepoListCommand.java
@@ -21,11 +21,11 @@ import java.util.List;
 
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Repository;
-import org.apache.karaf.shell.table.ShellTable;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.shell.support.MultiException;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "feature", name = "repo-list", description = "Displays a list of all defined repositories.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/http/command/pom.xml
----------------------------------------------------------------------
diff --git a/http/command/pom.xml b/http/command/pom.xml
index 0e7e06e..3189101 100644
--- a/http/command/pom.xml
+++ b/http/command/pom.xml
@@ -38,25 +38,15 @@
 	</properties>
 
 	<dependencies>
-	    <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-        </dependency>
 		<dependency>
 			<groupId>org.apache.karaf.shell</groupId>
-			<artifactId>org.apache.karaf.shell.console</artifactId>
+			<artifactId>org.apache.karaf.shell.core</artifactId>
 		</dependency>
         <dependency>
             <groupId>org.apache.karaf.http</groupId>
             <artifactId>org.apache.karaf.http.core</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-		
 		<dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
@@ -108,20 +98,12 @@
 					<instructions>
 						<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
 						<Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
-						<Import-Package>
-                            org.apache.aries.blueprint,
-                            org.osgi.service.blueprint.container,
-                            org.osgi.service.blueprint.reflect,
-							org.apache.felix.service.command,
-							org.apache.karaf.shell.commands,
-							org.apache.karaf.shell.console,
-							*
-                        </Import-Package>
 						<Private-Package>
 							org.apache.felix.utils.version,
 							org.apache.felix.utils.manifest,
 							org.apache.karaf.util;-split-package:=merge-first
                         </Private-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
 						<_versionpolicy>${bnd.version.policy}</_versionpolicy>
 					</instructions>
 				</configuration>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/http/command/src/main/java/org/apache/karaf/http/command/ServletListCommand.java
----------------------------------------------------------------------
diff --git a/http/command/src/main/java/org/apache/karaf/http/command/ServletListCommand.java b/http/command/src/main/java/org/apache/karaf/http/command/ServletListCommand.java
index 6fe7313..1932499 100644
--- a/http/command/src/main/java/org/apache/karaf/http/command/ServletListCommand.java
+++ b/http/command/src/main/java/org/apache/karaf/http/command/ServletListCommand.java
@@ -20,17 +20,17 @@ import java.util.Arrays;
 
 import org.apache.karaf.http.core.ServletInfo;
 import org.apache.karaf.http.core.ServletService;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.Col;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Col;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "http", name = "list", description = "Lists details for servlets.")
 @Service
-public class ServletListCommand extends OsgiCommandSupport {
+public class ServletListCommand implements Action {
 
     @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false)
     boolean noFormat;
@@ -39,7 +39,7 @@ public class ServletListCommand extends OsgiCommandSupport {
     private ServletService servletService;
     
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
         table.column(new Col("ID"));
         table.column(new Col("Servlet"));

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/http/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/http/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/http/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 4c9f164..0000000
--- a/http/command/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-	<command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.http.command.*" />
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/instance/command/pom.xml
----------------------------------------------------------------------
diff --git a/instance/command/pom.xml b/instance/command/pom.xml
index 52058cd..7240ddd 100644
--- a/instance/command/pom.xml
+++ b/instance/command/pom.xml
@@ -39,23 +39,12 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
             <scope>provided</scope>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java
----------------------------------------------------------------------
diff --git a/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java b/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java
index 368259a..fe571a8 100644
--- a/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java
+++ b/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java
@@ -17,10 +17,10 @@
 package org.apache.karaf.instance.command;
 
 import org.apache.karaf.instance.core.Instance;
-import org.apache.karaf.shell.table.ShellTable;
 import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.Option;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "instance", name = "list", description = "Lists all existing container instances.")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/pom.xml
----------------------------------------------------------------------
diff --git a/jaas/command/pom.xml b/jaas/command/pom.xml
index 3e4278c..56871dd 100644
--- a/jaas/command/pom.xml
+++ b/jaas/command/pom.xml
@@ -44,12 +44,6 @@
             <scope>provided</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
     	<dependency>
             <groupId>org.apache.karaf.jaas</groupId>
             <artifactId>org.apache.karaf.jaas.config</artifactId>
@@ -65,12 +59,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-            <scope>provided</scope>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
 
         <dependency>
@@ -104,16 +93,11 @@
                     <instructions>
                         <Export-Package>${project.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
-                            javax.management,
-                            javax.management.loading,
-                            org.apache.aries.blueprint,
-                            org.osgi.service.blueprint.container,
-                            org.osgi.service.blueprint.reflect,
-                            org.apache.felix.service.command,
-                            org.apache.karaf.shell.commands,
-                            org.apache.karaf.shell.console,
                             *
                         </Import-Package>
+                        <Karaf-Commands>
+                            org.apache.karaf.jaas.command.*
+                        </Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java
index 7ad63b1..44fd833 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/CancelCommand.java
@@ -15,18 +15,18 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
-
 import java.util.LinkedList;
 
+import org.apache.karaf.jaas.modules.BackingEngine;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+
 @Command(scope = "jaas", name = "cancel", description = "Cancel the modification of a JAAS realm")
 @Service
 public class CancelCommand extends JaasCommandSupport {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         //Cleanup the session
         session.put(JAAS_REALM, null);
         session.put(JAAS_ENTRY, null);

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupAddCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupAddCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupAddCommand.java
index 3e0341e..78ecede 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupAddCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupAddCommand.java
@@ -16,9 +16,9 @@
 package org.apache.karaf.jaas.command;
 
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "group-add", description = "Make a user part of a group")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupDeleteCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupDeleteCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupDeleteCommand.java
index e1122d1..bea4194 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupDeleteCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupDeleteCommand.java
@@ -16,9 +16,9 @@
 package org.apache.karaf.jaas.command;
 
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "group-delete", description = "Remove a user from a group")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleAddCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleAddCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleAddCommand.java
index 13aa9bf..17bb0fa 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleAddCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleAddCommand.java
@@ -16,9 +16,9 @@
 package org.apache.karaf.jaas.command;
 
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "group-role-add", description = "Add a role to a group")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleDeleteCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleDeleteCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleDeleteCommand.java
index 869a797..13b05d7 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleDeleteCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/GroupRoleDeleteCommand.java
@@ -16,9 +16,9 @@
 package org.apache.karaf.jaas.command;
 
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "group-role-delete", description = "Remove a role from a group")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
index ca89696..cbfb6d1 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/JaasCommandSupport.java
@@ -15,33 +15,41 @@
  */
 package org.apache.karaf.jaas.command;
 
+import java.util.List;
+import java.util.Queue;
+
+import javax.security.auth.login.AppConfigurationEntry;
+
 import org.apache.karaf.jaas.boot.ProxyLoginModule;
 import org.apache.karaf.jaas.config.JaasRealm;
 import org.apache.karaf.jaas.modules.BackingEngine;
 import org.apache.karaf.jaas.modules.BackingEngineFactory;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.List;
-import java.util.Queue;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.console.Session;
 
-public abstract class JaasCommandSupport extends OsgiCommandSupport {
+public abstract class JaasCommandSupport implements Action {
 
     public static final String JAAS_REALM = "JaasCommand.REALM";
     public static final String JAAS_ENTRY = "JaasCommand.ENTRY";
     public static final String JAAS_CMDS = "JaasCommand.COMMANDS";
 
-    private List<JaasRealm> realms;
+    @Reference
+    List<BackingEngineFactory> engineFactories;
+
+    @Reference
+    List<JaasRealm> realms;
+
+    @Reference
+    Session session;
 
     protected abstract Object doExecute(BackingEngine engine) throws Exception;
 
     /**
      * Add the command to the command queue.
-     *
-     * @return
-     * @throws Exception
      */
-    protected Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
         AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
         @SuppressWarnings("unchecked")
@@ -57,20 +65,7 @@ public abstract class JaasCommandSupport extends OsgiCommandSupport {
         return null;
     }
 
-    public void setRealms(List<JaasRealm> realms) {
-        this.realms = realms;
-    }
-
-    public List<JaasRealm> getRealms() {
-        if (realms == null) {
-            return getAllServices(JaasRealm.class);
-        } else {
-            return realms;
-        }
-    }
-
     public BackingEngine getBackingEngine(AppConfigurationEntry entry) {
-        List<BackingEngineFactory> engineFactories = getAllServices(BackingEngineFactory.class);
         if (engineFactories != null) {
             for (BackingEngineFactory factory : engineFactories) {
                 String loginModuleClass = (String) entry.getOptions().get(ProxyLoginModule.PROPERTY_MODULE);
@@ -82,4 +77,11 @@ public abstract class JaasCommandSupport extends OsgiCommandSupport {
         return null;
     }
 
+    public void setRealms(List<JaasRealm> realms) {
+        this.realms = realms;
+    }
+
+    public void setSession(Session session) {
+        this.session = session;
+    }
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java
index f6f8232..51a8d40 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListPendingCommand.java
@@ -15,21 +15,22 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Command;
+import java.util.Queue;
+
+import javax.security.auth.login.AppConfigurationEntry;
+
 import org.apache.karaf.jaas.boot.ProxyLoginModule;
 import org.apache.karaf.jaas.config.JaasRealm;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.Queue;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "pending-list", description = "List the pending modification on the active JAAS Realm/Login Module")
 @Service
 public class ListPendingCommand extends JaasCommandSupport {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
         AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
         @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
index 64efe54..25cfe14 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListRealmsCommand.java
@@ -15,16 +15,15 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Command;
+import javax.security.auth.login.AppConfigurationEntry;
+
 import org.apache.karaf.jaas.boot.ProxyLoginModule;
 import org.apache.karaf.jaas.config.JaasRealm;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.List;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "jaas", name = "realm-list", description = "List JAAS realms")
 @Service
@@ -38,9 +37,8 @@ public class ListRealmsCommand extends JaasCommandSupport {
         return null;
     }
 
-    protected Object doExecute() throws Exception {
-        List<JaasRealm> realms = getRealms();
-
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
         table.column("Index");
         table.column("Realm Name");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java
index cd8c359..13a0031 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ListUsersCommand.java
@@ -15,19 +15,20 @@
  */
 package org.apache.karaf.jaas.command;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.security.auth.login.AppConfigurationEntry;
+
 import org.apache.karaf.jaas.boot.principal.GroupPrincipal;
 import org.apache.karaf.jaas.boot.principal.RolePrincipal;
-import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.jaas.boot.principal.UserPrincipal;
 import org.apache.karaf.jaas.config.JaasRealm;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "jaas", name = "user-list", description = "List the users of the selected JAAS realm/login module")
 @Service
@@ -37,7 +38,7 @@ public class ListUsersCommand extends JaasCommandSupport {
     boolean noFormat;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
         AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
index a0647e3..a9fa13b 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/ManageRealmCommand.java
@@ -15,34 +15,34 @@
  */
 package org.apache.karaf.jaas.command;
 
+import java.util.LinkedList;
+import java.util.Queue;
+
+import javax.security.auth.login.AppConfigurationEntry;
+
 import org.apache.karaf.jaas.boot.ProxyLoginModule;
 import org.apache.karaf.jaas.command.completers.LoginModuleNameCompleter;
 import org.apache.karaf.jaas.command.completers.RealmCompleter;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.jaas.config.JaasRealm;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
-
-import javax.security.auth.login.AppConfigurationEntry;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "realm-manage", description = "Manage users and roles of a JAAS Realm")
 @Service
 public class ManageRealmCommand extends JaasCommandSupport {
 
     @Option(name = "--realm", description = "JAAS Realm", required = false, multiValued = false)
-    @Completer(RealmCompleter.class)
+    @Completion(RealmCompleter.class)
     String realmName;
 
     @Option(name = "--index", description = "Realm Index", required = false, multiValued = false)
     int index;
 
     @Option(name = "--module", description = "JAAS Login Module Class Name", required = false, multiValued = false)
-    @Completer(LoginModuleNameCompleter.class)
+    @Completion(LoginModuleNameCompleter.class)
     String moduleName;
 
     @Option(name = "-f", aliases = { "--force" }, description = "Force the management of this realm, even if another one was under management", required = false, multiValued = false)
@@ -50,7 +50,7 @@ public class ManageRealmCommand extends JaasCommandSupport {
 
     @SuppressWarnings("unchecked")
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         if (realmName == null && index <= 0) {
             System.err.println("A valid realm or the realm index need to be specified");
             return null;
@@ -69,7 +69,6 @@ public class ManageRealmCommand extends JaasCommandSupport {
 
             if (index > 0) {
                 // user provided the index, get the realm AND entry from the index
-                List<JaasRealm> realms = getRealms();
                 if (realms != null && realms.size() > 0) {
                     int i = 1;
                     realms_loop: for (JaasRealm r : realms) {
@@ -88,7 +87,6 @@ public class ManageRealmCommand extends JaasCommandSupport {
                     }
                 }
             } else {
-                List<JaasRealm> realms = getRealms();
                 if (realms != null && realms.size() > 0) {
                     for (JaasRealm r : realms) {
                         if (r.getName().equals(realmName)) {


[4/6] [KARAF-2805] Convert remaining commands to the new model

Posted by gn...@apache.org.
http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java
index 2b0593a..f943be9 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleAddCommand.java
@@ -15,10 +15,10 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "role-add", description = "Add a role to a user")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java
index faf7053..8a9d223 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/RoleDeleteCommand.java
@@ -15,10 +15,10 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "role-delete", description = "Delete a role from a user")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java
index efd163c..c979cba 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/UpdateCommand.java
@@ -15,21 +15,22 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
-
-import javax.security.auth.login.AppConfigurationEntry;
 import java.util.LinkedList;
 import java.util.Queue;
 
+import javax.security.auth.login.AppConfigurationEntry;
+
+import org.apache.karaf.jaas.config.JaasRealm;
+import org.apache.karaf.jaas.modules.BackingEngine;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+
 @Command(scope = "jaas", name = "update", description = "Apply pending modification on the edited JAAS Realm")
 @Service
 public class UpdateCommand extends JaasCommandSupport {
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         JaasRealm realm = (JaasRealm) session.get(JAAS_REALM);
         AppConfigurationEntry entry = (AppConfigurationEntry) session.get(JAAS_ENTRY);
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java
index 9cafa5d..3854f1d 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserAddCommand.java
@@ -15,10 +15,10 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "user-add", description = "Add a user")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java
index d7b7529..ba4631f 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/UserDeleteCommand.java
@@ -15,10 +15,10 @@
  */
 package org.apache.karaf.jaas.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.jaas.modules.BackingEngine;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jaas", name = "user-delete", description = "Delete a usergit s")
 @Service

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java
index 50e543b..3b9655d 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/LoginModuleNameCompleter.java
@@ -18,19 +18,26 @@ package org.apache.karaf.jaas.command.completers;
 
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.security.auth.login.AppConfigurationEntry;
+
 import org.apache.karaf.jaas.boot.ProxyLoginModule;
 import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 @Service
 public class LoginModuleNameCompleter implements Completer {
 
+    @Reference
     private List<JaasRealm> realms;
 
-    public int complete(String buffer, int cursor, List<String> candidates) {
+    @Override
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             if (realms != null && !realms.isEmpty())
@@ -42,7 +49,7 @@ public class LoginModuleNameCompleter implements Completer {
         } catch (Exception e) {
             // Ignore
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     /**
@@ -62,12 +69,4 @@ public class LoginModuleNameCompleter implements Completer {
         return moduleClassNames;
     }
 
-    public List<JaasRealm> getRealms() {
-        return realms;
-    }
-
-    public void setRealms(List<JaasRealm> realms) {
-        this.realms = realms;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java b/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java
index e251527..a71ef97 100644
--- a/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java
+++ b/jaas/command/src/main/java/org/apache/karaf/jaas/command/completers/RealmCompleter.java
@@ -16,19 +16,24 @@
  */
 package org.apache.karaf.jaas.command.completers;
 
-import org.apache.karaf.jaas.config.JaasRealm;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Service;
-
 import java.util.List;
 
+import org.apache.karaf.jaas.config.JaasRealm;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
+
 @Service
 public class RealmCompleter implements Completer {
 
+    @Reference
     private List<JaasRealm> realms;
 
-    public int complete(String buffer, int cursor, List<String> candidates) {
+    @Override
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             if (realms != null && !realms.isEmpty())
@@ -38,15 +43,7 @@ public class RealmCompleter implements Completer {
         } catch (Exception e) {
             // Ignore
         }
-        return delegate.complete(buffer, cursor, candidates);
-    }
-
-    public List<JaasRealm> getRealms() {
-        return realms;
-    }
-
-    public void setRealms(List<JaasRealm> realms) {
-        this.realms = realms;
+        return delegate.complete(session, commandLine, candidates);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
----------------------------------------------------------------------
diff --git a/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml b/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
deleted file mode 100644
index c361e48..0000000
--- a/jaas/command/src/main/resources/OSGI-INF/blueprint/jaas-command.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.jaas.command" />
-
-    <!-- JAAS Realms -->
-    <reference-list id="realms" interface="org.apache.karaf.jaas.config.JaasRealm" availability="optional"/>
-
-    <!-- Completers -->
-    <bean id="realmCompleter" class="org.apache.karaf.jaas.command.completers.RealmCompleter">
-        <property name="realms" ref="realms"/>
-    </bean>
-    <service ref="realmCompleter" auto-export="all-classes"/>
-
-    <bean id="loginModuleNameCompleter" class="org.apache.karaf.jaas.command.completers.LoginModuleNameCompleter">
-        <property name="realms" ref="realms"/>
-    </bean>
-    <service ref="loginModuleNameCompleter" auto-export="all-classes"/>
-
-</blueprint>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jaas/command/src/test/java/org/apache/karaf/jaas/command/ManageRealmCommandTest.java
----------------------------------------------------------------------
diff --git a/jaas/command/src/test/java/org/apache/karaf/jaas/command/ManageRealmCommandTest.java b/jaas/command/src/test/java/org/apache/karaf/jaas/command/ManageRealmCommandTest.java
index 1171c99..d9458c7 100644
--- a/jaas/command/src/test/java/org/apache/karaf/jaas/command/ManageRealmCommandTest.java
+++ b/jaas/command/src/test/java/org/apache/karaf/jaas/command/ManageRealmCommandTest.java
@@ -15,23 +15,23 @@
  */
 package org.apache.karaf.jaas.command;
 
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
+import java.util.Arrays;
+import java.util.Properties;
 
-import org.apache.felix.service.command.CommandSession;
 import org.apache.karaf.jaas.config.JaasRealm;
 import org.apache.karaf.jaas.config.impl.Config;
 import org.apache.karaf.jaas.config.impl.Module;
+import org.apache.karaf.shell.api.console.Session;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
-import java.util.Arrays;
-import java.util.Properties;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
 
 public class ManageRealmCommandTest {
 
@@ -63,15 +63,16 @@ public class ManageRealmCommandTest {
      */
     private void doVerifyIndex(ManageRealmCommand cmd, int index, Config[] realms) throws Exception {
 
-        // prepare command
-        cmd.index = index;
-        cmd.setRealms(Arrays.<JaasRealm> asList(realms));
-
         // prepare mocks
-        CommandSession session = createMock(CommandSession.class);
+        Session session = createMock(Session.class);
         BundleContext bundleContext = createMock(BundleContext.class);
         Bundle bundle = createMock(Bundle.class);
 
+        // prepare command
+        cmd.index = index;
+        cmd.setRealms(Arrays.<JaasRealm> asList(realms));
+        cmd.setSession(session);
+
         for (Config realm : realms)
             realm.setBundleContext(bundleContext);
 
@@ -90,7 +91,7 @@ public class ManageRealmCommandTest {
 
         // start the test
         replay(mocks);
-        cmd.execute(session);
+        cmd.execute();
         verify(mocks);
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/pom.xml
----------------------------------------------------------------------
diff --git a/jdbc/command/pom.xml b/jdbc/command/pom.xml
index 08edade..18441f3 100644
--- a/jdbc/command/pom.xml
+++ b/jdbc/command/pom.xml
@@ -50,11 +50,7 @@
 
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
     </dependencies>
 
@@ -81,6 +77,7 @@
                 <configuration>
                     <instructions>
                         <Export-Package>!*</Export-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
index fa629da..39f638e5 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/CreateCommand.java
@@ -16,12 +16,12 @@
  */
 package org.apache.karaf.jdbc.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 @Command(scope = "jdbc", name = "create", description = "Create a JDBC datasource")
 @Service
@@ -31,7 +31,7 @@ public class CreateCommand extends JdbcCommandSupport {
     String name;
 
     @Option(name = "-t", aliases = { "--type" }, description = "The JDBC datasource type (generic, MySQL, Oracle, Postgres, H2, HSQL, Derby)", required = false, multiValued = false)
-    @Completer(value = StringsCompleter.class, values = { "db2", "derby", "generic", "h2", "hsql", "mysql", "oracle", "postgres" })
+    @Completion(value = StringsCompleter.class, values = { "db2", "derby", "generic", "h2", "hsql", "mysql", "oracle", "postgres" })
     String type;
 
     @Option(name = "-d", aliases = { "--driver" }, description = "The classname of the JDBC driver to use. NB: this option is used only the type generic", required = false, multiValued = false)
@@ -52,7 +52,8 @@ public class CreateCommand extends JdbcCommandSupport {
     @Option(name = "-i", aliases = { "--install-bundles" }, description = "Try to install the bundles providing the JDBC driver", required = false, multiValued = false)
     boolean installBundles = false;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         this.getJdbcService().create(name, type, driver, version, url, username, password, installBundles);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DataSourcesCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DataSourcesCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DataSourcesCommand.java
index e314c9c..cb3edad 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DataSourcesCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DataSourcesCommand.java
@@ -16,18 +16,19 @@
  */
 package org.apache.karaf.jdbc.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
-
 import java.util.List;
 import java.util.Map;
 
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
+
 @Command(scope = "jdbc", name = "datasources", description = "List the JDBC datasources")
 @Service
 public class DataSourcesCommand extends JdbcCommandSupport {
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         table.column("Name");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DeleteCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DeleteCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DeleteCommand.java
index 3b6aa16..6bf7236 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DeleteCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/DeleteCommand.java
@@ -17,20 +17,21 @@
 package org.apache.karaf.jdbc.command;
 
 import org.apache.karaf.jdbc.command.completers.DataSourcesFileNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jdbc", name = "delete", description = "Delete a JDBC datasource")
 @Service
 public class DeleteCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The JDBC datasource name (the one used at creation time)", required = true, multiValued = false)
-    @Completer(DataSourcesFileNameCompleter.class)
+    @Completion(DataSourcesFileNameCompleter.class)
     String name;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         this.getJdbcService().delete(name);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/ExecuteCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/ExecuteCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/ExecuteCommand.java
index 48bd412..480ab51 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/ExecuteCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/ExecuteCommand.java
@@ -17,23 +17,24 @@
 package org.apache.karaf.jdbc.command;
 
 import org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jdbc", name = "execute", description = "Execute a SQL command on a given JDBC datasource")
 @Service
 public class ExecuteCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "datasource", description = "The JDBC datasource", required = true, multiValued = false)
-    @Completer(DataSourcesNameCompleter.class)
+    @Completion(DataSourcesNameCompleter.class)
     String datasource;
 
     @Argument(index = 1, name = "command", description = "The SQL command to execute", required = true, multiValued = false)
     String command;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         this.getJdbcService().execute(datasource, command);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/InfoCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/InfoCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/InfoCommand.java
index 14df91b..e53bbab 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/InfoCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/InfoCommand.java
@@ -17,11 +17,11 @@
 package org.apache.karaf.jdbc.command;
 
 import org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 import java.util.Map;
 
@@ -30,10 +30,11 @@ import java.util.Map;
 public class InfoCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "datasource", description = "The JDBC datasource name", required = true, multiValued = false)
-    @Completer(DataSourcesNameCompleter.class)
+    @Completion(DataSourcesNameCompleter.class)
     String datasource;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         table.column("Property");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/JdbcCommandSupport.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/JdbcCommandSupport.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/JdbcCommandSupport.java
index f274cfb..cf1eb58 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/JdbcCommandSupport.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/JdbcCommandSupport.java
@@ -17,16 +17,14 @@
 package org.apache.karaf.jdbc.command;
 
 import org.apache.karaf.jdbc.JdbcService;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
 
-public abstract class JdbcCommandSupport extends OsgiCommandSupport {
+public abstract class JdbcCommandSupport implements Action {
 
     @Reference
     private JdbcService jdbcService;
 
-    public abstract Object doExecute() throws Exception;
-
     public JdbcService getJdbcService() {
         return jdbcService;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/QueryCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/QueryCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/QueryCommand.java
index f591cd9..297288b 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/QueryCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/QueryCommand.java
@@ -16,29 +16,30 @@
  */
 package org.apache.karaf.jdbc.command;
 
-import org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.Row;
-import org.apache.karaf.shell.table.ShellTable;
-
 import java.util.List;
 import java.util.Map;
 
+import org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Row;
+import org.apache.karaf.shell.support.table.ShellTable;
+
 @Command(scope = "jdbc", name = "query", description = "Execute a SQL query on a JDBC datasource")
 @Service
 public class QueryCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "datasource", description = "The JDBC datasource to use", required = true, multiValued = false)
-    @Completer(DataSourcesNameCompleter.class)
+    @Completion(DataSourcesNameCompleter.class)
     String datasource;
 
     @Argument(index = 1, name = "query", description = "The SQL query to execute", required = true, multiValued = false)
     String query;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         Map<String, List<String>> map = this.getJdbcService().query(datasource, query);

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/TablesCommand.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/TablesCommand.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/TablesCommand.java
index 8a7acdd..04baa70 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/TablesCommand.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/TablesCommand.java
@@ -16,26 +16,27 @@
  */
 package org.apache.karaf.jdbc.command;
 
-import org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.Row;
-import org.apache.karaf.shell.table.ShellTable;
-
 import java.util.List;
 import java.util.Map;
 
+import org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Row;
+import org.apache.karaf.shell.support.table.ShellTable;
+
 @Command(scope = "jdbc", name = "tables", description = "List the tables on a given JDBC datasource")
 @Service
 public class TablesCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "datasource", description = "The JDBC datasource to use", required = true, multiValued = false)
-    @Completer(DataSourcesNameCompleter.class)
+    @Completion(DataSourcesNameCompleter.class)
     String datasource;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         Map<String, List<String>> map = this.getJdbcService().tables(datasource);

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesFileNameCompleter.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesFileNameCompleter.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesFileNameCompleter.java
index 3eb7eb6..8ba0fe9 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesFileNameCompleter.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesFileNameCompleter.java
@@ -17,10 +17,12 @@
 package org.apache.karaf.jdbc.command.completers;
 
 import org.apache.karaf.jdbc.JdbcService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 import java.util.List;
 
@@ -34,7 +36,7 @@ public class DataSourcesFileNameCompleter implements Completer {
     private JdbcService jdbcService;
 
     @Override
-    public int complete(String buffer, int cursor, List<String> candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             for (String datasourceFileName : jdbcService.datasourceFileNames()) {
@@ -43,7 +45,7 @@ public class DataSourcesFileNameCompleter implements Completer {
         } catch (Exception e) {
             // nothing to do
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public JdbcService getJdbcService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesNameCompleter.java
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesNameCompleter.java b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesNameCompleter.java
index af4c0e3..238910f 100644
--- a/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesNameCompleter.java
+++ b/jdbc/command/src/main/java/org/apache/karaf/jdbc/command/completers/DataSourcesNameCompleter.java
@@ -17,10 +17,12 @@
 package org.apache.karaf.jdbc.command.completers;
 
 import org.apache.karaf.jdbc.JdbcService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 import java.util.List;
 
@@ -34,7 +36,7 @@ public class DataSourcesNameCompleter implements Completer {
     private JdbcService jdbcService;
 
     @Override
-    public int complete(String buffer, int cursor, List<String> candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             for (String datasource : jdbcService.datasources()) {
@@ -43,7 +45,7 @@ public class DataSourcesNameCompleter implements Completer {
         } catch (Exception e) {
             // nothing to do
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public JdbcService getJdbcService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jdbc/command/src/main/resources/OSGI-INF/blueprint/jdbc-command.xml
----------------------------------------------------------------------
diff --git a/jdbc/command/src/main/resources/OSGI-INF/blueprint/jdbc-command.xml b/jdbc/command/src/main/resources/OSGI-INF/blueprint/jdbc-command.xml
deleted file mode 100644
index fe843fc..0000000
--- a/jdbc/command/src/main/resources/OSGI-INF/blueprint/jdbc-command.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-        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.
-    -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.jdbc.command.*" />
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/pom.xml
----------------------------------------------------------------------
diff --git a/jms/command/pom.xml b/jms/command/pom.xml
index 204e2c6..a8c6d76 100644
--- a/jms/command/pom.xml
+++ b/jms/command/pom.xml
@@ -49,11 +49,7 @@
 
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
     </dependencies>
 
@@ -80,6 +76,7 @@
                 <configuration>
                     <instructions>
                         <Export-Package>!*</Export-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/BrowseCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/BrowseCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/BrowseCommand.java
index 49bd545..cb86aa6 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/BrowseCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/BrowseCommand.java
@@ -16,15 +16,15 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.jms.JmsMessage;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
-
 import java.util.List;
 
+import org.apache.karaf.jms.JmsMessage;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
+
 @Command(scope = "jms", name = "browse", description = "Browse a JMS queue")
 @Service
 public class BrowseCommand extends JmsConnectionCommandSupport {
@@ -38,7 +38,8 @@ public class BrowseCommand extends JmsConnectionCommandSupport {
     @Option(name = "-v", aliases = { "--verbose" }, description = "Display JMS properties", required = false, multiValued = false)
     boolean verbose = false;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
 
         ShellTable table = new ShellTable();
         table.column("Message ID");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/ConnectionFactoriesCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/ConnectionFactoriesCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/ConnectionFactoriesCommand.java
index 91182e7..b698336 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/ConnectionFactoriesCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/ConnectionFactoriesCommand.java
@@ -16,17 +16,18 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
-
 import java.util.List;
 
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
+
 @Command(scope = "jms", name = "connectionfactories", description = "List the JMS connection factories")
 @Service
 public class ConnectionFactoriesCommand extends JmsCommandSupport {
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
 
         ShellTable table = new ShellTable();
         table.column("JMS Connection Factory");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/ConsumeCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/ConsumeCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/ConsumeCommand.java
index a1b3855..cd8caaf 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/ConsumeCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/ConsumeCommand.java
@@ -16,10 +16,10 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jms", name = "consume", description = "Consume messages from a JMS queue.")
 @Service
@@ -31,7 +31,8 @@ public class ConsumeCommand extends JmsConnectionCommandSupport {
     @Option(name = "-s", aliases = { "--selector" }, description = "The selector to use to select the messages to consume", required = false, multiValued = false)
     String selector;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         System.out.println(getJmsService().consume(connectionFactory, queue, selector, username, password) + " message(s) consumed");
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/CountCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/CountCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/CountCommand.java
index 600477a..576e8dd 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/CountCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/CountCommand.java
@@ -16,10 +16,11 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "jms", name = "count", description = "Count the number of messages on a JMS queue.")
 @Service
@@ -28,7 +29,8 @@ public class CountCommand extends JmsConnectionCommandSupport {
     @Argument(index = 1, name = "queue", description = "The JMS queue name", required = true, multiValued = false)
     String queue;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
         table.column("Messages Count");
         table.addRow().addContent(getJmsService().count(connectionFactory, queue, username, password));

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/CreateCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/CreateCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/CreateCommand.java
index 0750a57..c2c7eca 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/CreateCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/CreateCommand.java
@@ -16,12 +16,12 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 @Command(scope = "jms", name = "create", description = "Create a JMS connection factory.")
 @Service
@@ -31,13 +31,14 @@ public class CreateCommand extends JmsCommandSupport {
     String name;
 
     @Option(name = "-t", aliases = { "--type" }, description = "The JMS connection factory type (ActiveMQ or WebsphereMQ)", required = false, multiValued = false)
-    @Completer(value = StringsCompleter.class, values = { "activemq", "webspheremq" })
+    @Completion(value = StringsCompleter.class, values = { "activemq", "webspheremq" })
     String type = "ActiveMQ";
 
     @Option(name = "--url", description = "URL of the JMS broker. For WebsphereMQ type, the URL is hostname/port/queuemanager/channel", required = false, multiValued = false)
     String url = "tcp://localhost:61616";
-    
-    public Object doExecute() throws Exception {
+
+    @Override
+    public Object execute() throws Exception {
         getJmsService().create(name, type, url);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/DeleteCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/DeleteCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/DeleteCommand.java
index 2cd701f..cab3123 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/DeleteCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/DeleteCommand.java
@@ -16,21 +16,23 @@
  */
 package org.apache.karaf.jms.command;
 
+
 import org.apache.karaf.jms.command.completers.ConnectionFactoriesFileNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jms", name = "delete", description = "Delete a JMS connection factory")
 @Service
 public class DeleteCommand extends JmsCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The JMS connection factory name", required = true, multiValued = false)
-    @Completer(ConnectionFactoriesFileNameCompleter.class)
+    @Completion(ConnectionFactoriesFileNameCompleter.class)
     String name;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         getJmsService().delete(name);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/InfoCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/InfoCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/InfoCommand.java
index 732a164..354db39 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/InfoCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/InfoCommand.java
@@ -16,17 +16,19 @@
  */
 package org.apache.karaf.jms.command;
 
+
 import java.util.Map;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "jms", name = "info", description = "Provides details about a JMS connection factory.")
 @Service
 public class InfoCommand extends JmsConnectionCommandSupport {
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
         table.column("Property");
         table.column("Value");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/JmsCommandSupport.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/JmsCommandSupport.java b/jms/command/src/main/java/org/apache/karaf/jms/command/JmsCommandSupport.java
index e4d514c..2f5df8f 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/JmsCommandSupport.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/JmsCommandSupport.java
@@ -17,10 +17,10 @@
 package org.apache.karaf.jms.command;
 
 import org.apache.karaf.jms.JmsService;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
 
-public abstract class JmsCommandSupport extends OsgiCommandSupport {
+public abstract class JmsCommandSupport implements Action {
 
     @Reference
     private JmsService jmsService;

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/JmsConnectionCommandSupport.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/JmsConnectionCommandSupport.java b/jms/command/src/main/java/org/apache/karaf/jms/command/JmsConnectionCommandSupport.java
index cb89717..64adfe4 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/JmsConnectionCommandSupport.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/JmsConnectionCommandSupport.java
@@ -17,9 +17,9 @@
 package org.apache.karaf.jms.command;
 
 import org.apache.karaf.jms.command.completers.ConnectionFactoriesNameCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.commands.Option;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.Option;
 
 /**
  * For commands that need a connection factory and authentication information 
@@ -27,7 +27,7 @@ import org.apache.karaf.shell.commands.Option;
 public abstract class JmsConnectionCommandSupport extends JmsCommandSupport {
 
     @Argument(index = 0, name = "connectionFactory", description = "The JMS connection factory name", required = true, multiValued = false)
-    @Completer(ConnectionFactoriesNameCompleter.class)
+    @Completion(ConnectionFactoriesNameCompleter.class)
     String connectionFactory;
 
     @Option(name = "-u", aliases = { "--username" }, description = "Username to connect to the JMS broker", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/MoveCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/MoveCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/MoveCommand.java
index 8afe253..a4c8d12 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/MoveCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/MoveCommand.java
@@ -16,10 +16,11 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jms", name = "move", description = "Move messages from one JMS queue to another one.")
 @Service
@@ -34,7 +35,8 @@ public class MoveCommand extends JmsConnectionCommandSupport {
     @Option(name = "-s", aliases = { "--selector" }, description = "Selector to move only some messages", required = false, multiValued = false)
     String selector;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         System.out.println(getJmsService().move(connectionFactory, source, destination, selector, username, password) + " message(s) moved");
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/QueuesCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/QueuesCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/QueuesCommand.java
index 105eeb2..7cf1dac 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/QueuesCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/QueuesCommand.java
@@ -16,15 +16,17 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "jms", name = "queues", description = "List the JMS queues.")
 @Service
 public class QueuesCommand extends JmsConnectionCommandSupport {
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         table.column("JMS Queues");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/SendCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/SendCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/SendCommand.java
index 3af7436..63d3f4a 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/SendCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/SendCommand.java
@@ -16,10 +16,11 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jms", name = "send", description = "Send a message to ")
 @Service
@@ -34,7 +35,8 @@ public class SendCommand extends JmsConnectionCommandSupport {
     @Option(name = "-r", aliases = { "--replyTo" }, description = "Set the message ReplyTo", required = false, multiValued = false)
     String replyTo;
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         getJmsService().send(connectionFactory, queue, message, replyTo, username, password);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/TopicsCommand.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/TopicsCommand.java b/jms/command/src/main/java/org/apache/karaf/jms/command/TopicsCommand.java
index 7a0b707..b583bc4 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/TopicsCommand.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/TopicsCommand.java
@@ -16,15 +16,17 @@
  */
 package org.apache.karaf.jms.command;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 @Command(scope = "jms", name = "topics", description = "List the JMS topics.")
 @Service
 public class TopicsCommand extends JmsConnectionCommandSupport {
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         table.column("JMS Topics");

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesFileNameCompleter.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesFileNameCompleter.java b/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesFileNameCompleter.java
index 12c42bd..c33ff62 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesFileNameCompleter.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesFileNameCompleter.java
@@ -16,14 +16,16 @@
  */
 package org.apache.karaf.jms.command.completers;
 
-import org.apache.karaf.jms.JmsService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-
 import java.util.List;
 
+import org.apache.karaf.jms.JmsService;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
+
 /**
  * Completer on the JMS connection factory file names.
  */
@@ -34,7 +36,7 @@ public class ConnectionFactoriesFileNameCompleter implements Completer {
     private JmsService jmsService;
 
     @Override
-    public int complete(String buffer, int cursor, List<String> candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             for (String connectionFactory : jmsService.connectionFactoryFileNames()) {
@@ -43,7 +45,7 @@ public class ConnectionFactoriesFileNameCompleter implements Completer {
         } catch (Exception e) {
             // nothing to do
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public JmsService getJmsService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesNameCompleter.java
----------------------------------------------------------------------
diff --git a/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesNameCompleter.java b/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesNameCompleter.java
index 3437c8e..98f97b3 100644
--- a/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesNameCompleter.java
+++ b/jms/command/src/main/java/org/apache/karaf/jms/command/completers/ConnectionFactoriesNameCompleter.java
@@ -16,14 +16,16 @@
  */
 package org.apache.karaf.jms.command.completers;
 
-import org.apache.karaf.jms.JmsService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-
 import java.util.List;
 
+import org.apache.karaf.jms.JmsService;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
+
 /**
  * Completer on the JMS connection factories name.
  */
@@ -34,7 +36,7 @@ public class ConnectionFactoriesNameCompleter implements Completer {
     private JmsService jmsService;
 
     @Override
-    public int complete(String buffer, int cursor, List<String> candidates) {
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             for (String connectionFactory : jmsService.connectionFactories()) {
@@ -43,7 +45,7 @@ public class ConnectionFactoriesNameCompleter implements Completer {
         } catch (Exception e) {
             // nothing to do
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public JmsService getJmsService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jms/command/src/main/resources/OSGI-INF/blueprint/jms-command.xml
----------------------------------------------------------------------
diff --git a/jms/command/src/main/resources/OSGI-INF/blueprint/jms-command.xml b/jms/command/src/main/resources/OSGI-INF/blueprint/jms-command.xml
deleted file mode 100644
index b5a912f..0000000
--- a/jms/command/src/main/resources/OSGI-INF/blueprint/jms-command.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-        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.
-    -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.jms.command.*" />
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/pom.xml
----------------------------------------------------------------------
diff --git a/jndi/command/pom.xml b/jndi/command/pom.xml
index 0b06a24..81eabf5 100644
--- a/jndi/command/pom.xml
+++ b/jndi/command/pom.xml
@@ -50,11 +50,7 @@
 
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
     </dependencies>
 
@@ -81,6 +77,7 @@
                 <configuration>
                     <instructions>
                         <Export-Package>!*</Export-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/AliasCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/AliasCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/AliasCommand.java
index 3733858..08e3912 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/AliasCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/AliasCommand.java
@@ -16,27 +16,34 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.ContextsCompleter;
 import org.apache.karaf.jndi.command.completers.NamesCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jndi", name = "alias", description = "Create a JNDI alias on a given name.")
 @Service
-public class AliasCommand extends JndiCommandSupport {
+public class AliasCommand implements Action {
 
     @Argument(index = 0, name = "name", description = "The JNDI name", required = true, multiValued = false)
-    @Completer(NamesCompleter.class)
+    @Completion(NamesCompleter.class)
     String name;
 
     @Argument(index = 1, name = "alias", description = "The JNDI alias", required = true, multiValued = false)
-    @Completer(ContextsCompleter.class)
+    @Completion(ContextsCompleter.class)
     String alias;
 
-    public Object doExecute() throws Exception {
-        getJndiService().alias(name, alias);
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
+        jndiService.alias(name, alias);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/BindCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/BindCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/BindCommand.java
index 5192853..b181762 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/BindCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/BindCommand.java
@@ -16,27 +16,34 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.ContextsCompleter;
 import org.apache.karaf.jndi.command.completers.ServicesIdCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jndi", name = "bind", description = "Bind an OSGi service in the JNDI context")
 @Service
-public class BindCommand extends JndiCommandSupport {
+public class BindCommand implements Action {
 
     @Argument(index = 0, name = "service", description = "The ID of the OSGi service to bind", required = true, multiValued = false)
-    @Completer(ServicesIdCompleter.class)
+    @Completion(ServicesIdCompleter.class)
     Long serviceId;
 
     @Argument(index = 1, name = "name", description = "The JNDI name to bind the OSGi service", required = true, multiValued = false)
-    @Completer(ContextsCompleter.class)
+    @Completion(ContextsCompleter.class)
     String name;
 
-    public Object doExecute() throws Exception {
-        this.getJndiService().bind(serviceId, name);
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
+        jndiService.bind(serviceId, name);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/ContextsCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/ContextsCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/ContextsCommand.java
index 34def8f..2209479 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/ContextsCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/ContextsCommand.java
@@ -16,33 +16,40 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.ContextsCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 import java.util.List;
 
 @Command(scope = "jndi", name = "contexts", description = "List the JNDI sub-contexts.")
 @Service
-public class ContextsCommand extends JndiCommandSupport {
+public class ContextsCommand implements Action {
 
     @Argument(index = 0, name = "context", description = "The base JNDI context", required = false, multiValued = false)
-    @Completer(ContextsCompleter.class)
+    @Completion(ContextsCompleter.class)
     String context;
 
-    public Object doExecute() throws Exception {
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         table.column("JNDI Sub-Context");
 
         List<String> contexts;
         if (context == null) {
-            contexts = this.getJndiService().contexts();
+            contexts = jndiService.contexts();
         } else {
-            contexts = this.getJndiService().contexts(context);
+            contexts = jndiService.contexts(context);
         }
 
         for (String c : contexts) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/CreateCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/CreateCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/CreateCommand.java
index d8627a3..86663bf 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/CreateCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/CreateCommand.java
@@ -16,22 +16,29 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.ContextsCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jndi",  name = "create", description = "Create a new JNDI sub-context.")
 @Service
-public class CreateCommand extends JndiCommandSupport {
+public class CreateCommand implements Action {
 
     @Argument(index = 0, name = "context", description = "The JNDI sub-context name", required = true, multiValued = false)
-    @Completer(ContextsCompleter.class)
+    @Completion(ContextsCompleter.class)
     String context;
 
-    public Object doExecute() throws Exception {
-        this.getJndiService().create(context);
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
+        jndiService.create(context);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/DeleteCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/DeleteCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/DeleteCommand.java
index 7e8a631..3cd3a40 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/DeleteCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/DeleteCommand.java
@@ -16,22 +16,29 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.ContextsCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jndi", name = "delete", description = "Delete a JNDI sub-context.")
 @Service
-public class DeleteCommand extends JndiCommandSupport {
+public class DeleteCommand implements Action {
 
     @Argument(index = 0, name = "context", description = "The JNDI sub-context name", required = true, multiValued = false)
-    @Completer(ContextsCompleter.class)
+    @Completion(ContextsCompleter.class)
     String context;
 
-    public Object doExecute() throws Exception {
-        this.getJndiService().delete(context);
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
+        jndiService.delete(context);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/JndiCommandSupport.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/JndiCommandSupport.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/JndiCommandSupport.java
deleted file mode 100644
index e3e4e48..0000000
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/JndiCommandSupport.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.jndi.command;
-
-import org.apache.karaf.jndi.JndiService;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-
-public abstract class JndiCommandSupport extends OsgiCommandSupport {
-
-    @Reference
-    private JndiService jndiService;
-
-    public JndiService getJndiService() {
-        return jndiService;
-    }
-
-    public void setJndiService(JndiService jndiService) {
-        this.jndiService = jndiService;
-    }
-
-    public abstract Object doExecute() throws Exception;
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/NamesCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/NamesCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/NamesCommand.java
index c893843..0345f11 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/NamesCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/NamesCommand.java
@@ -16,24 +16,31 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.ContextsCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
 
 import java.util.Map;
 
 @Command(scope = "jndi", name = "names", description = "List the JNDI names.")
 @Service
-public class NamesCommand extends JndiCommandSupport {
+public class NamesCommand implements Action {
 
     @Argument(index = 0, name = "context", description = "The JNDI context to display the names", required = false, multiValued = false)
-    @Completer(ContextsCompleter.class)
+    @Completion(ContextsCompleter.class)
     String context;
 
-    public Object doExecute() throws Exception {
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
         ShellTable table = new ShellTable();
 
         table.column("JNDI Name");
@@ -41,9 +48,9 @@ public class NamesCommand extends JndiCommandSupport {
 
         Map<String, String> names;
         if (context == null) {
-            names = this.getJndiService().names();
+            names = jndiService.names();
         } else {
-            names = this.getJndiService().names(context);
+            names = jndiService.names(context);
         }
 
         for (String name : names.keySet()) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/UnbindCommand.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/UnbindCommand.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/UnbindCommand.java
index 058a822..b93c7b9 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/UnbindCommand.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/UnbindCommand.java
@@ -16,22 +16,29 @@
  */
 package org.apache.karaf.jndi.command;
 
+import org.apache.karaf.jndi.JndiService;
 import org.apache.karaf.jndi.command.completers.NamesCompleter;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Completer;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 
 @Command(scope = "jndi", name = "unbind", description = "Unbind a JNDI name.")
 @Service
-public class UnbindCommand extends JndiCommandSupport {
+public class UnbindCommand implements Action {
 
     @Argument(index = 0, name = "name", description = "The JNDI name to unbind", required = true, multiValued = false)
-    @Completer(NamesCompleter.class)
+    @Completion(NamesCompleter.class)
     String name;
 
-    public Object doExecute() throws Exception {
-        getJndiService().unbind(name);
+    @Reference
+    JndiService jndiService;
+
+    @Override
+    public Object execute() throws Exception {
+        jndiService.unbind(name);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ContextsCompleter.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ContextsCompleter.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ContextsCompleter.java
index deab19b..8f2ac29 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ContextsCompleter.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/ContextsCompleter.java
@@ -17,10 +17,12 @@
 package org.apache.karaf.jndi.command.completers;
 
 import org.apache.karaf.jndi.JndiService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 import java.util.List;
 
@@ -33,7 +35,8 @@ public class ContextsCompleter implements Completer {
     @Reference
     private JndiService jndiService;
 
-    public int complete(String buffer, int cursor, List candidates) {
+    @Override
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             List<String> contexts = jndiService.contexts();
@@ -43,7 +46,7 @@ public class ContextsCompleter implements Completer {
         } catch (Exception e) {
             // nothing to do
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public JndiService getJndiService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/NamesCompleter.java
----------------------------------------------------------------------
diff --git a/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/NamesCompleter.java b/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/NamesCompleter.java
index 618977a..d94e3f4 100644
--- a/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/NamesCompleter.java
+++ b/jndi/command/src/main/java/org/apache/karaf/jndi/command/completers/NamesCompleter.java
@@ -17,10 +17,12 @@
 package org.apache.karaf.jndi.command.completers;
 
 import org.apache.karaf.jndi.JndiService;
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.CommandLine;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Session;
+import org.apache.karaf.shell.support.completers.StringsCompleter;
 
 import java.util.List;
 
@@ -33,7 +35,8 @@ public class NamesCompleter implements Completer {
     @Reference
     private JndiService jndiService;
 
-    public int complete(String buffer, int cursor, List candidates) {
+    @Override
+    public int complete(Session session, CommandLine commandLine, List<String> candidates) {
         StringsCompleter delegate = new StringsCompleter();
         try {
             for (String name : jndiService.names().keySet()) {
@@ -42,7 +45,7 @@ public class NamesCompleter implements Completer {
         } catch (Exception e) {
             // nothing to do
         }
-        return delegate.complete(buffer, cursor, candidates);
+        return delegate.complete(session, commandLine, candidates);
     }
 
     public JndiService getJndiService() {


[2/6] [KARAF-2805] Convert remaining commands to the new model

Posted by gn...@apache.org.
http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/PojoInfoProvider.java
----------------------------------------------------------------------
diff --git a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/PojoInfoProvider.java b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/PojoInfoProvider.java
index b929475..c6a131e 100644
--- a/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/PojoInfoProvider.java
+++ b/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/info/PojoInfoProvider.java
@@ -20,7 +20,7 @@ package org.apache.karaf.shell.commands.impl.info;
 
 import java.util.Properties;
 
-import org.apache.karaf.shell.commands.InfoProvider;
+import org.apache.karaf.shell.commands.info.InfoProvider;
 
 public class PojoInfoProvider implements InfoProvider {
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java
----------------------------------------------------------------------
diff --git a/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java b/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java
new file mode 100644
index 0000000..b66cfae
--- /dev/null
+++ b/shell/commands/src/main/java/org/apache/karaf/shell/commands/info/InfoProvider.java
@@ -0,0 +1,30 @@
+/*
+ * 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.commands.info;
+
+import java.util.Properties;
+
+/**
+ * A bundle can publish a service with this interface to offer some informations for the shell:info command
+ */
+public interface InfoProvider {
+
+    public String getName();
+
+    public Properties getProperties();
+
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/pom.xml
----------------------------------------------------------------------
diff --git a/system/command/pom.xml b/system/command/pom.xml
index eb2c5d7..cf17321 100644
--- a/system/command/pom.xml
+++ b/system/command/pom.xml
@@ -46,15 +46,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
@@ -84,13 +77,7 @@
                 <artifactId>maven-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
-                        <Import-Package>
-                            org.apache.karaf.system,
-                            org.apache.felix.service.command,
-                            org.apache.karaf.shell.commands,
-                            org.apache.karaf.shell.console,
-                            *
-                        </Import-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/AbstractSystemAction.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/AbstractSystemAction.java b/system/command/src/main/java/org/apache/karaf/system/commands/AbstractSystemAction.java
deleted file mode 100644
index 0ffdae9..0000000
--- a/system/command/src/main/java/org/apache/karaf/system/commands/AbstractSystemAction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.system.commands;
-
-import org.apache.karaf.shell.console.AbstractAction;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.system.SystemService;
-
-public abstract class AbstractSystemAction extends OsgiCommandSupport {
-
-    @Reference
-    protected SystemService systemService;
-
-    public void setSystemService(SystemService systemService) {
-        this.systemService = systemService;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/FrameworkOptions.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/FrameworkOptions.java b/system/command/src/main/java/org/apache/karaf/system/commands/FrameworkOptions.java
index 13f7d42..9e16a7d 100644
--- a/system/command/src/main/java/org/apache/karaf/system/commands/FrameworkOptions.java
+++ b/system/command/src/main/java/org/apache/karaf/system/commands/FrameworkOptions.java
@@ -16,18 +16,21 @@
  */
 package org.apache.karaf.system.commands;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.system.FrameworkType;
+import org.apache.karaf.system.SystemService;
 
 /**
  * Command for enabling/disabling debug logging on the OSGi framework
  */
 @Command(scope = "system", name = "framework", description = "OSGi Framework options.")
 @Service
-public class FrameworkOptions extends AbstractSystemAction {
+public class FrameworkOptions implements Action {
 
     @Option(name = "-debug", aliases={"--enable-debug"}, description="Enable debug for the OSGi framework", required = false, multiValued = false)
     boolean debug;
@@ -38,8 +41,11 @@ public class FrameworkOptions extends AbstractSystemAction {
     @Argument(name = "framework", required = false, description = "Name of the OSGi framework to use")
     String framework;
 
+    @Reference
+    SystemService systemService;
+
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
 
         if (!debug^nodebug && framework == null) {
             System.out.printf("Current OSGi framework is %s%n", systemService.getFramework().name());

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/Name.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/Name.java b/system/command/src/main/java/org/apache/karaf/system/commands/Name.java
index 6e6eb41..a716d82 100644
--- a/system/command/src/main/java/org/apache/karaf/system/commands/Name.java
+++ b/system/command/src/main/java/org/apache/karaf/system/commands/Name.java
@@ -16,21 +16,29 @@
  */
 package org.apache.karaf.system.commands;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.system.SystemService;
 
 /**
  * Command to shut down Karaf container.
  */
 @Command(scope = "system", name = "name", description = "Show or change Karaf instance name.")
 @Service
-public class Name extends AbstractSystemAction {
+public class Name implements Action {
 
     @Argument(name = "name", index = 0, description = "New name for the instance", required = false, multiValued = false)
     String name;
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    SystemService systemService;
+
+    @Override
+    public Object execute() throws Exception {
         if (name == null) {
             System.out.println(systemService.getName());
         } else {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/Shutdown.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/Shutdown.java b/system/command/src/main/java/org/apache/karaf/system/commands/Shutdown.java
index a95b9d0..b8b4b41 100644
--- a/system/command/src/main/java/org/apache/karaf/system/commands/Shutdown.java
+++ b/system/command/src/main/java/org/apache/karaf/system/commands/Shutdown.java
@@ -16,11 +16,13 @@
  */
 package org.apache.karaf.system.commands;
 
-import jline.console.ConsoleReader;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.api.console.Session;
 import org.apache.karaf.system.SystemService;
 
 /**
@@ -28,7 +30,7 @@ import org.apache.karaf.system.SystemService;
  */
 @Command(scope = "system", name = "shutdown", description = "Shutdown Karaf.")
 @Service
-public class Shutdown extends AbstractSystemAction {
+public class Shutdown implements Action {
 
     @Option(name = "-f", aliases = "--force", description = "Force the shutdown without confirmation message.", required = false, multiValued = false)
     boolean force = false;
@@ -52,7 +54,14 @@ public class Shutdown extends AbstractSystemAction {
             " to wait. The word now is an alias for +0.", required = false, multiValued = false)
     String time;
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    SystemService systemService;
+
+    @Reference
+    Session session;
+
+    @Override
+    public Object execute() throws Exception {
 
         if (force) {
             if (reboot) {
@@ -71,8 +80,7 @@ public class Shutdown extends AbstractSystemAction {
             } else {
                 msg = String.format("Confirm: halt instance %s (yes/no): ", karafName);
             }
-            ConsoleReader reader = (ConsoleReader) session.get(".jline.reader");
-            String str = reader.readLine(msg);
+            String str = session.readLine(msg, null);
             if (str.equalsIgnoreCase("yes")) {
                 if (reboot) {
                     systemService.reboot(time, determineSwipeType());

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/StartLevel.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/StartLevel.java b/system/command/src/main/java/org/apache/karaf/system/commands/StartLevel.java
index 1d7dfdf..e91c15a 100644
--- a/system/command/src/main/java/org/apache/karaf/system/commands/StartLevel.java
+++ b/system/command/src/main/java/org/apache/karaf/system/commands/StartLevel.java
@@ -16,10 +16,11 @@
  */
 package org.apache.karaf.system.commands;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.system.SystemService;
 
 /**
@@ -27,12 +28,16 @@ import org.apache.karaf.system.SystemService;
  */
 @Command(scope = "system", name = "start-level", description = "Gets or sets the system start level.")
 @Service
-public class StartLevel extends AbstractSystemAction {
+public class StartLevel implements Action {
 
     @Argument(index = 0, name = "level", description = "The new system start level to set", required = false, multiValued = false)
     Integer level;
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    SystemService systemService;
+
+    @Override
+    public Object execute() throws Exception {
         if (level == null) {
             System.out.println("Level " + systemService.getStartLevel());
         } else {

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/SystemProperty.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/SystemProperty.java b/system/command/src/main/java/org/apache/karaf/system/commands/SystemProperty.java
index b03d40f..37c2a1e 100644
--- a/system/command/src/main/java/org/apache/karaf/system/commands/SystemProperty.java
+++ b/system/command/src/main/java/org/apache/karaf/system/commands/SystemProperty.java
@@ -16,24 +16,32 @@
  */
 package org.apache.karaf.system.commands;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.inject.Service;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-
 import java.io.File;
 import java.io.PrintStream;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.Set;
+import java.util.Vector;
+
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.system.SystemService;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 
 /**
  * Command that allow access to system properties easily.
  */
 @Command(scope = "system", name = "property", description = "Get or set a system property.")
 @Service
-public class SystemProperty extends AbstractSystemAction {
+public class SystemProperty implements Action {
 
     @Option(name = "-p", aliases = {"--persistent"}, description = "Persist the new value to the etc/system.properties file")
     boolean persistent;
@@ -50,8 +58,14 @@ public class SystemProperty extends AbstractSystemAction {
     @Argument(index = 1, name = "value", required = false, description = "New value for the system property")
     String value;
 
+    @Reference
+    BundleContext bundleContext;
+
+    @Reference
+    SystemService systemService;
+
     @Override
-    protected Object doExecute() throws Exception {
+    public Object execute() throws Exception {
         if (key == null && value == null) {
             Properties props = (Properties) System.getProperties().clone();
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/java/org/apache/karaf/system/commands/Version.java
----------------------------------------------------------------------
diff --git a/system/command/src/main/java/org/apache/karaf/system/commands/Version.java b/system/command/src/main/java/org/apache/karaf/system/commands/Version.java
index 4dd0d2c..9837aaa 100644
--- a/system/command/src/main/java/org/apache/karaf/system/commands/Version.java
+++ b/system/command/src/main/java/org/apache/karaf/system/commands/Version.java
@@ -16,14 +16,21 @@
  */
 package org.apache.karaf.system.commands;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.system.SystemService;
 
 @Command(scope = "system", name = "version", description = "Display the instance version")
 @Service
-public class Version extends AbstractSystemAction {
+public class Version implements Action {
 
-    protected Object doExecute() throws Exception {
+    @Reference
+    SystemService systemService;
+
+    @Override
+    public Object execute() throws Exception {
         System.out.println(systemService.getVersion());
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/system/command/src/main/resources/OSGI-INF/blueprint/system-commands.xml
----------------------------------------------------------------------
diff --git a/system/command/src/main/resources/OSGI-INF/blueprint/system-commands.xml b/system/command/src/main/resources/OSGI-INF/blueprint/system-commands.xml
deleted file mode 100644
index 6c9f328..0000000
--- a/system/command/src/main/resources/OSGI-INF/blueprint/system-commands.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.system.commands.*" />
-
-</blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/web/command/pom.xml
----------------------------------------------------------------------
diff --git a/web/command/pom.xml b/web/command/pom.xml
index 7c76a98..738cb9b 100644
--- a/web/command/pom.xml
+++ b/web/command/pom.xml
@@ -47,16 +47,9 @@
         </dependency>
         <dependency>
             <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
+            <artifactId>org.apache.karaf.shell.core</artifactId>
             <scope>provided</scope>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
@@ -72,11 +65,6 @@
             <artifactId>org.apache.karaf.util</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.table</artifactId>
-            <scope>provided</scope>
-        </dependency>
     </dependencies>
 
     <build>
@@ -107,6 +95,7 @@
                         <Private-Package>
                             org.apache.karaf.web.commands
                         </Private-Package>
+                        <Karaf-Commands>*</Karaf-Commands>
                     </instructions>
                 </configuration>
             </plugin>

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/web/command/src/main/java/org/apache/karaf/web/commands/List.java
----------------------------------------------------------------------
diff --git a/web/command/src/main/java/org/apache/karaf/web/commands/List.java b/web/command/src/main/java/org/apache/karaf/web/commands/List.java
index c2508ad..a862a45 100644
--- a/web/command/src/main/java/org/apache/karaf/web/commands/List.java
+++ b/web/command/src/main/java/org/apache/karaf/web/commands/List.java
@@ -16,20 +16,19 @@
  */
 package org.apache.karaf.web.commands;
 
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
-import org.apache.karaf.shell.table.Col;
-import org.apache.karaf.shell.table.ShellTable;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.Col;
+import org.apache.karaf.shell.support.table.ShellTable;
 import org.apache.karaf.web.WebBundle;
 import org.apache.karaf.web.WebContainerService;
 
-
 @Command(scope = "web", name = "list", description = "Lists details for war bundles.")
 @Service
-public class List extends OsgiCommandSupport {
+public class List implements Action {
 
     @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false)
     boolean noFormat;
@@ -40,8 +39,9 @@ public class List extends OsgiCommandSupport {
     public void setWebContainerService(WebContainerService webContainerService) {
         this.webContainerService = webContainerService;
     }
-    
-    public Object doExecute() throws Exception {
+
+    @Override
+    public Object execute() throws Exception {
     	ShellTable table = new ShellTable();
         table.column(new Col("ID"));
         table.column(new Col("State"));

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/web/command/src/main/java/org/apache/karaf/web/commands/Start.java
----------------------------------------------------------------------
diff --git a/web/command/src/main/java/org/apache/karaf/web/commands/Start.java b/web/command/src/main/java/org/apache/karaf/web/commands/Start.java
index f87846e..41d6634 100644
--- a/web/command/src/main/java/org/apache/karaf/web/commands/Start.java
+++ b/web/command/src/main/java/org/apache/karaf/web/commands/Start.java
@@ -16,16 +16,16 @@
  */
 package org.apache.karaf.web.commands;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.web.WebContainerService;
 
 @Command(scope = "web", name = "start", description = "Start the web context of given bundles.")
 @Service
-public class Start extends OsgiCommandSupport {
+public class Start implements Action {
 
     @Argument(index = 0, name = "ids", description = "The list of bundle IDs separated by whitespaces", required = true, multiValued = true)
     java.util.List<Long> ids;
@@ -36,8 +36,9 @@ public class Start extends OsgiCommandSupport {
     public void setWebContainerService(WebContainerService webContainerService) {
         this.webContainerService = webContainerService;
     }
-    
-    public Object doExecute() throws Exception {
+
+    @Override
+    public Object execute() throws Exception {
         webContainerService.start(ids);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/web/command/src/main/java/org/apache/karaf/web/commands/Stop.java
----------------------------------------------------------------------
diff --git a/web/command/src/main/java/org/apache/karaf/web/commands/Stop.java b/web/command/src/main/java/org/apache/karaf/web/commands/Stop.java
index bff6180..76fd141 100644
--- a/web/command/src/main/java/org/apache/karaf/web/commands/Stop.java
+++ b/web/command/src/main/java/org/apache/karaf/web/commands/Stop.java
@@ -16,20 +16,16 @@
  */
 package org.apache.karaf.web.commands;
 
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
-import org.apache.karaf.shell.inject.Reference;
-import org.apache.karaf.shell.inject.Service;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.web.WebContainerService;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
 
 @Command(scope = "web", name = "stop", description = "Stop the web context of given bundles.")
 @Service
-public class Stop extends OsgiCommandSupport {
+public class Stop implements Action {
 
     @Argument(index = 0, name = "ids", description = "The list of bundle IDs separated by whitespaces", required = true, multiValued = true)
     java.util.List<Long> ids;
@@ -41,7 +37,8 @@ public class Stop extends OsgiCommandSupport {
         this.webContainerService = webContainerService;
     }
 
-    public Object doExecute() throws Exception {
+    @Override
+    public Object execute() throws Exception {
         webContainerService.stop(ids);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/571c6f99/web/command/src/main/resources/OSGI-INF/blueprint/web-commands.xml
----------------------------------------------------------------------
diff --git a/web/command/src/main/resources/OSGI-INF/blueprint/web-commands.xml b/web/command/src/main/resources/OSGI-INF/blueprint/web-commands.xml
deleted file mode 100644
index b00ac40..0000000
--- a/web/command/src/main/resources/OSGI-INF/blueprint/web-commands.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->        
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
-                    scan="org.apache.karaf.web.commands.*" />
-
-</blueprint>        
\ No newline at end of file


[6/6] git commit: [KARAF-2806] The bundle:watch commands fails when updating o.a.k.bundle.core bundle

Posted by gn...@apache.org.
[KARAF-2806] The bundle:watch commands fails when updating o.a.k.bundle.core bundle

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/d2249e43
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/d2249e43
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/d2249e43

Branch: refs/heads/master
Commit: d2249e439e4f107d7ca7dcfdffd63a1eacb02218
Parents: 571c6f9
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Wed Mar 5 23:23:37 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Wed Mar 5 23:23:37 2014 +0100

----------------------------------------------------------------------
 .../org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/d2249e43/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java
----------------------------------------------------------------------
diff --git a/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java b/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java
index 1a9b076..665dc1b 100644
--- a/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java
+++ b/bundle/core/src/main/java/org/apache/karaf/bundle/core/internal/BundleWatcherImpl.java
@@ -97,6 +97,8 @@ public class BundleWatcherImpl implements Runnable, BundleListener, BundleWatche
                 }
             }
             if (watchedBundles.size() > 0) {
+                // Get the wiring before any in case of a refresh of a dependency
+                FrameworkWiring wiring = bundleContext.getBundle(0).adapt(FrameworkWiring.class);
                 File localRepository = this.localRepoDetector.getLocalRepository();
                 List<Bundle> updated = new ArrayList<Bundle>();
                 for (Bundle bundle : watchedBundles) {
@@ -110,7 +112,6 @@ public class BundleWatcherImpl implements Runnable, BundleListener, BundleWatche
                 }
                 try {
                     final CountDownLatch latch = new CountDownLatch(1);
-                    FrameworkWiring wiring = bundleContext.getBundle(0).adapt(FrameworkWiring.class);
                     wiring.refreshBundles(updated, new FrameworkListener() {
                         public void frameworkEvent(FrameworkEvent event) {
                             latch.countDown();