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/02/18 09:28:28 UTC

[4/6] [KARAF-2763] Leverage blueprint support for bundle, config, http, instance, jdbc, mms, jndi, car, log, orb, package, region, service, system, web and wrapper commands

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/itests/src/test/java/org/apache/karaf/itests/RegionTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/RegionTest.java b/itests/src/test/java/org/apache/karaf/itests/RegionTest.java
index 07e05fd..3d7d6b0 100644
--- a/itests/src/test/java/org/apache/karaf/itests/RegionTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/RegionTest.java
@@ -35,7 +35,7 @@ public class RegionTest extends KarafTestSupport {
 
     @Test
     public void addRegionCommand() throws Exception {
-        System.out.println(executeCommand("region:addregion itest"));
+        System.out.println(executeCommand("region:region-add itest"));
         String infoOutput = executeCommand("region:info");
         System.out.println(infoOutput);
         assertTrue("Region itest should be present", infoOutput.contains("itest"));

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 775f9ad..fa629da 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
@@ -21,8 +21,10 @@ 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;
 
 @Command(scope = "jdbc", name = "create", description = "Create a JDBC datasource")
+@Service
 public class CreateCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The JDBC datasource name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 36df691..e314c9c 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
@@ -17,12 +17,14 @@
 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;
 
 @Command(scope = "jdbc", name = "datasources", description = "List the JDBC datasources")
+@Service
 public class DataSourcesCommand extends JdbcCommandSupport {
 
     public Object doExecute() throws Exception {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 20982bb..3b6aa16 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
@@ -20,8 +20,10 @@ 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;
 
 @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)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 42f0a76..48bd412 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
@@ -20,8 +20,10 @@ 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;
 
 @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)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 89bca19..14df91b 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
@@ -20,11 +20,13 @@ 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 java.util.Map;
 
 @Command(scope = "jdbc", name = "info", description = "Display details about a JDBC datasource")
+@Service
 public class InfoCommand extends JdbcCommandSupport {
 
     @Argument(index = 0, name = "datasource", description = "The JDBC datasource name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 6fb8bfc..f274cfb 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
@@ -18,9 +18,11 @@ 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;
 
 public abstract class JdbcCommandSupport extends OsgiCommandSupport {
 
+    @Reference
     private JdbcService jdbcService;
 
     public abstract Object doExecute() throws Exception;

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 7fc641a..f591cd9 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
@@ -20,6 +20,7 @@ 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;
 
@@ -27,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 
 @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)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 6256cbc..8a7acdd 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
@@ -20,6 +20,7 @@ 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;
 
@@ -27,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 
 @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)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 b99b57a..3eb7eb6 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
@@ -19,14 +19,18 @@ 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 java.util.List;
 
 /**
  * Completer on the JDBC datasources file name.
  */
+@Service
 public class DataSourcesFileNameCompleter implements Completer {
 
+    @Reference
     private JdbcService jdbcService;
 
     @Override

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 e0adb31..af4c0e3 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
@@ -19,14 +19,18 @@ 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 java.util.List;
 
 /**
  * Completer on the JDBC datasources name (JNDI or OSGi service property).
  */
+@Service
 public class DataSourcesNameCompleter implements Completer {
 
+    @Reference
     private JdbcService jdbcService;
 
     @Override

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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
index 2433e00..fe843fc 100644
--- a/jdbc/command/src/main/resources/OSGI-INF/blueprint/jdbc-command.xml
+++ b/jdbc/command/src/main/resources/OSGI-INF/blueprint/jdbc-command.xml
@@ -17,54 +17,7 @@
     -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
 
-    <reference id="jdbcService" interface="org.apache.karaf.jdbc.JdbcService" />
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command>
-            <action class="org.apache.karaf.jdbc.command.CreateCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jdbc.command.DeleteCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jdbc.command.DataSourcesCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jdbc.command.QueryCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jdbc.command.ExecuteCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jdbc.command.InfoCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jdbc.command.TablesCommand">
-                <property name="jdbcService" ref="jdbcService"/>
-            </action>
-        </command>
-    </command-bundle>
-
-    <bean id="dataSourcesNameCompleter" class="org.apache.karaf.jdbc.command.completers.DataSourcesNameCompleter">
-        <property name="jdbcService" ref="jdbcService" />
-    </bean>
-    <service ref="dataSourcesNameCompleter" auto-export="all-classes"/>
-
-    <bean id="dataSourcesFileNameCompleter" class="org.apache.karaf.jdbc.command.completers.DataSourcesFileNameCompleter">
-        <property name="jdbcService" ref="jdbcService" />
-    </bean>
-    <service ref="dataSourcesFileNameCompleter" auto-export="all-classes"/>
+    <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/e4f7bc4a/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 c99374a..49bd545 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
@@ -20,11 +20,13 @@ 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;
 
 @Command(scope = "jms", name = "browse", description = "Browse a JMS queue")
+@Service
 public class BrowseCommand extends JmsConnectionCommandSupport {
 
     @Argument(index = 1, name = "queue", description = "The JMS queue to browse", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 8142449..91182e7 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
@@ -17,11 +17,13 @@
 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;
 
 @Command(scope = "jms", name = "connectionfactories", description = "List the JMS connection factories")
+@Service
 public class ConnectionFactoriesCommand extends JmsCommandSupport {
 
     public Object doExecute() throws Exception {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 84e1d19..a1b3855 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
@@ -19,8 +19,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;
 
 @Command(scope = "jms", name = "consume", description = "Consume messages from a JMS queue.")
+@Service
 public class ConsumeCommand extends JmsConnectionCommandSupport {
 
     @Argument(index = 1, name = "queue", description = "The JMS queue where to consume messages", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 016d6cd..600477a 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
@@ -18,9 +18,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;
 
 @Command(scope = "jms", name = "count", description = "Count the number of messages on a JMS queue.")
+@Service
 public class CountCommand extends JmsConnectionCommandSupport {
 
     @Argument(index = 1, name = "queue", description = "The JMS queue name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 dcea101..0750a57 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
@@ -21,8 +21,10 @@ 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;
 
 @Command(scope = "jms", name = "create", description = "Create a JMS connection factory.")
+@Service
 public class CreateCommand extends JmsCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The JMS connection factory name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 882c318..2cd701f 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
@@ -20,8 +20,10 @@ import org.apache.karaf.jms.command.completers.ConnectionFactoriesFileNameComple
 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;
 
 @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)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 8b25130..732a164 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
@@ -19,9 +19,11 @@ 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;
 
 @Command(scope = "jms", name = "info", description = "Provides details about a JMS connection factory.")
+@Service
 public class InfoCommand extends JmsConnectionCommandSupport {
 
     public Object doExecute() throws Exception {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 86b99a7..e4d514c 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
@@ -18,9 +18,11 @@ 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;
 
 public abstract class JmsCommandSupport extends OsgiCommandSupport {
 
+    @Reference
     private JmsService jmsService;
 
     public JmsService getJmsService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 4ab8b46..8afe253 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
@@ -19,8 +19,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;
 
 @Command(scope = "jms", name = "move", description = "Move messages from one JMS queue to another one.")
+@Service
 public class MoveCommand extends JmsConnectionCommandSupport {
 
     @Argument(index = 1, name = "source", description = "The source JMS queue", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 8ae4cab..105eeb2 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
@@ -17,9 +17,11 @@
 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;
 
 @Command(scope = "jms", name = "queues", description = "List the JMS queues.")
+@Service
 public class QueuesCommand extends JmsConnectionCommandSupport {
 
     public Object doExecute() throws Exception {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 792de7f..3af7436 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
@@ -19,8 +19,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;
 
 @Command(scope = "jms", name = "send", description = "Send a message to ")
+@Service
 public class SendCommand extends JmsConnectionCommandSupport {
 
     @Argument(index = 1, name = "queue", description = "The JMS queue name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 bd27dcf..7a0b707 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
@@ -17,9 +17,11 @@
 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;
 
 @Command(scope = "jms", name = "topics", description = "List the JMS topics.")
+@Service
 public class TopicsCommand extends JmsConnectionCommandSupport {
 
     public Object doExecute() throws Exception {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 e5cfabf..12c42bd 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
@@ -19,14 +19,18 @@ 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;
 
 /**
  * Completer on the JMS connection factory file names.
  */
+@Service
 public class ConnectionFactoriesFileNameCompleter implements Completer {
 
+    @Reference
     private JmsService jmsService;
 
     @Override

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 2d19e76..3437c8e 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
@@ -19,14 +19,18 @@ 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;
 
 /**
  * Completer on the JMS connection factories name.
  */
+@Service
 public class ConnectionFactoriesNameCompleter implements Completer {
 
+    @Reference
     private JmsService jmsService;
 
     @Override

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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
index be81647..b5a912f 100644
--- a/jms/command/src/main/resources/OSGI-INF/blueprint/jms-command.xml
+++ b/jms/command/src/main/resources/OSGI-INF/blueprint/jms-command.xml
@@ -17,74 +17,7 @@
     -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
 
-    <reference id="jmsService" interface="org.apache.karaf.jms.JmsService"/>
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command>
-            <action class="org.apache.karaf.jms.command.BrowseCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.ConnectionFactoriesCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.ConsumeCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.CountCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.CreateCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.DeleteCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.InfoCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.MoveCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.QueuesCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.SendCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jms.command.TopicsCommand">
-                <property name="jmsService" ref="jmsService"/>
-            </action>
-        </command>
-    </command-bundle>
-
-    <bean id="connectionFactoriesNameCompleter" class="org.apache.karaf.jms.command.completers.ConnectionFactoriesNameCompleter">
-        <property name="jmsService" ref="jmsService"/>
-    </bean>
-    <service ref="connectionFactoriesNameCompleter" auto-export="all-classes"/>
-
-    <bean id="connectionFactoriesFileNameCompleter" class="org.apache.karaf.jms.command.completers.ConnectionFactoriesFileNameCompleter">
-        <property name="jmsService" ref="jmsService"/>
-    </bean>
-    <service ref="connectionFactoriesFileNameCompleter" auto-export="all-classes"/>
+    <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/e4f7bc4a/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 86a126e..3733858 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
@@ -21,8 +21,10 @@ 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;
 
 @Command(scope = "jndi", name = "alias", description = "Create a JNDI alias on a given name.")
+@Service
 public class AliasCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The JNDI name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 a0560d3..5192853 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
@@ -21,8 +21,10 @@ 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;
 
 @Command(scope = "jndi", name = "bind", description = "Bind an OSGi service in the JNDI context")
+@Service
 public class BindCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "service", description = "The ID of the OSGi service to bind", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 b50f3c3..34def8f 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
@@ -20,11 +20,13 @@ 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 java.util.List;
 
 @Command(scope = "jndi", name = "contexts", description = "List the JNDI sub-contexts.")
+@Service
 public class ContextsCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "context", description = "The base JNDI context", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 dfaa108..d8627a3 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
@@ -20,8 +20,10 @@ 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;
 
 @Command(scope = "jndi",  name = "create", description = "Create a new JNDI sub-context.")
+@Service
 public class CreateCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "context", description = "The JNDI sub-context name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 0370859..7e8a631 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
@@ -20,8 +20,10 @@ 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;
 
 @Command(scope = "jndi", name = "delete", description = "Delete a JNDI sub-context.")
+@Service
 public class DeleteCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "context", description = "The JNDI sub-context name", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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
index 0e46be3..e3e4e48 100644
--- 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
@@ -18,9 +18,11 @@ 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() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 661dbbf..c893843 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
@@ -20,11 +20,13 @@ 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 java.util.Map;
 
 @Command(scope = "jndi", name = "names", description = "List the JNDI names.")
+@Service
 public class NamesCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "context", description = "The JNDI context to display the names", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 10b9740..058a822 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
@@ -20,8 +20,10 @@ 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;
 
 @Command(scope = "jndi", name = "unbind", description = "Unbind a JNDI name.")
+@Service
 public class UnbindCommand extends JndiCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The JNDI name to unbind", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 88705c0..deab19b 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
@@ -19,14 +19,18 @@ 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 java.util.List;
 
 /**
  * Completers on the JNDI contexts.
  */
+@Service
 public class ContextsCompleter implements Completer {
 
+    @Reference
     private JndiService jndiService;
 
     public int complete(String buffer, int cursor, List candidates) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 33aef6b..618977a 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
@@ -19,14 +19,18 @@ 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 java.util.List;
 
 /**
  * Completer to the JNDI names.
  */
+@Service
 public class NamesCompleter implements Completer {
 
+    @Reference
     private JndiService jndiService;
 
     public int complete(String buffer, int cursor, List candidates) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 e1673cd..c56490b 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
@@ -18,6 +18,8 @@ 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.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -28,8 +30,10 @@ import java.util.List;
 /**
  * Completer on the OSGi services ID.
  */
+@Service
 public class ServicesIdCompleter implements Completer {
 
+    @Reference
     private BundleContext bundleContext;
 
     public int complete(String buffer, int cursor, List candidates) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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
index d9b9f14..f59750b 100644
--- a/jndi/command/src/main/resources/OSGI-INF/blueprint/jndi-command.xml
+++ b/jndi/command/src/main/resources/OSGI-INF/blueprint/jndi-command.xml
@@ -17,59 +17,7 @@
     -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
 
-    <reference id="jndiService" interface="org.apache.karaf.jndi.JndiService" />
-
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command>
-            <action class="org.apache.karaf.jndi.command.AliasCommand">
-                <property name="jndiService" ref="jndiService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jndi.command.ContextsCommand">
-                <property name="jndiService" ref="jndiService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jndi.command.NamesCommand">
-                <property name="jndiService" ref="jndiService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jndi.command.CreateCommand">
-                <property name="jndiService" ref="jndiService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jndi.command.DeleteCommand">
-                <property name="jndiService" ref="jndiService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jndi.command.BindCommand">
-                <property name="jndiService" ref="jndiService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.jndi.command.UnbindCommand">
-                <property name="jndiService" ref="jndiService" />
-            </action>
-        </command>
-    </command-bundle>
-
-    <bean id="namesCompleter" class="org.apache.karaf.jndi.command.completers.NamesCompleter">
-        <property name="jndiService" ref="jndiService" />
-    </bean>
-    <service ref="namesCompleter" auto-export="all-classes"/>
-
-    <bean id="contextsCompleter" class="org.apache.karaf.jndi.command.completers.ContextsCompleter">
-        <property name="jndiService" ref="jndiService" />
-    </bean>
-    <service ref="contextsCompleter" auto-export="all-classes"/>
-
-    <bean id="servicesIdCompleter" class="org.apache.karaf.jndi.command.completers.ServicesIdCompleter">
-        <property name="bundleContext" ref="blueprintBundleContext" />
-    </bean>
-    <service ref="servicesIdCompleter" auto-export="all-classes"/>
+    <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/e4f7bc4a/kar/command/src/main/java/org/apache/karaf/kar/command/CreateKarCommand.java
----------------------------------------------------------------------
diff --git a/kar/command/src/main/java/org/apache/karaf/kar/command/CreateKarCommand.java b/kar/command/src/main/java/org/apache/karaf/kar/command/CreateKarCommand.java
index 96c99c7..dbc34a6 100644
--- a/kar/command/src/main/java/org/apache/karaf/kar/command/CreateKarCommand.java
+++ b/kar/command/src/main/java/org/apache/karaf/kar/command/CreateKarCommand.java
@@ -22,8 +22,10 @@ import org.apache.karaf.features.command.completers.InstalledRepoNameCompleter;
 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;
 
 @Command(scope = "kar", name = "create", description = "Create a kar file for a list of feature repos")
+@Service
 public class CreateKarCommand extends KarCommandSupport {
     
     @Argument(index = 0, name = "repoName", description = "Repository name. The kar will contain all features of the named repository by default", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/kar/command/src/main/java/org/apache/karaf/kar/command/InstallKarCommand.java
----------------------------------------------------------------------
diff --git a/kar/command/src/main/java/org/apache/karaf/kar/command/InstallKarCommand.java b/kar/command/src/main/java/org/apache/karaf/kar/command/InstallKarCommand.java
index 8deff2f..1053e74 100644
--- a/kar/command/src/main/java/org/apache/karaf/kar/command/InstallKarCommand.java
+++ b/kar/command/src/main/java/org/apache/karaf/kar/command/InstallKarCommand.java
@@ -18,10 +18,12 @@ package org.apache.karaf.kar.command;
 
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.inject.Service;
 
 import java.net.URI;
 
 @Command(scope = "kar", name = "install", description = "Installs a KAR file.")
+@Service
 public class InstallKarCommand extends KarCommandSupport {
     
     @Argument(index = 0, name = "url", description = "The URL of the KAR file to install.", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/kar/command/src/main/java/org/apache/karaf/kar/command/KarCommandSupport.java
----------------------------------------------------------------------
diff --git a/kar/command/src/main/java/org/apache/karaf/kar/command/KarCommandSupport.java b/kar/command/src/main/java/org/apache/karaf/kar/command/KarCommandSupport.java
index 16c250a..3af6622 100644
--- a/kar/command/src/main/java/org/apache/karaf/kar/command/KarCommandSupport.java
+++ b/kar/command/src/main/java/org/apache/karaf/kar/command/KarCommandSupport.java
@@ -18,9 +18,11 @@ package org.apache.karaf.kar.command;
 
 import org.apache.karaf.kar.KarService;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.karaf.shell.inject.Reference;
 
 public abstract class KarCommandSupport extends OsgiCommandSupport {
 
+    @Reference
     private KarService karService;
     
     public KarService getKarService() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 1a8902a..e1b59bb 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
@@ -18,9 +18,11 @@ package org.apache.karaf.kar.command;
 
 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;
 
 @Command(scope = "kar", name = "list", description = "List the installed KAR files.")
+@Service
 public class ListKarCommand extends KarCommandSupport {
 
     @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/kar/command/src/main/java/org/apache/karaf/kar/command/UninstallKarCommand.java
----------------------------------------------------------------------
diff --git a/kar/command/src/main/java/org/apache/karaf/kar/command/UninstallKarCommand.java b/kar/command/src/main/java/org/apache/karaf/kar/command/UninstallKarCommand.java
index a02efb5..ce5664d 100644
--- a/kar/command/src/main/java/org/apache/karaf/kar/command/UninstallKarCommand.java
+++ b/kar/command/src/main/java/org/apache/karaf/kar/command/UninstallKarCommand.java
@@ -20,8 +20,10 @@ import org.apache.karaf.kar.command.completers.KarCompleter;
 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;
 
 @Command(scope = "kar", name = "uninstall", description = "Uninstall a KAR file.")
+@Service
 public class UninstallKarCommand extends KarCommandSupport {
 
     @Argument(index = 0, name = "name", description = "The name of the KAR file to uninstall.", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/kar/command/src/main/java/org/apache/karaf/kar/command/completers/KarCompleter.java
----------------------------------------------------------------------
diff --git a/kar/command/src/main/java/org/apache/karaf/kar/command/completers/KarCompleter.java b/kar/command/src/main/java/org/apache/karaf/kar/command/completers/KarCompleter.java
index e7e556a..460a21b 100644
--- a/kar/command/src/main/java/org/apache/karaf/kar/command/completers/KarCompleter.java
+++ b/kar/command/src/main/java/org/apache/karaf/kar/command/completers/KarCompleter.java
@@ -19,14 +19,18 @@ package org.apache.karaf.kar.command.completers;
 import org.apache.karaf.kar.KarService;
 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;
 
 /**
  * Completer on all installed KAR files.
  */
+@Service
 public class KarCompleter implements Completer {
-    
+
+    @Reference
     private KarService karService;
     
     public int complete(String buffer, int cursor, @SuppressWarnings("rawtypes") List candidates) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/kar/command/src/main/resources/OSGI-INF/blueprint/kar-command.xml
----------------------------------------------------------------------
diff --git a/kar/command/src/main/resources/OSGI-INF/blueprint/kar-command.xml b/kar/command/src/main/resources/OSGI-INF/blueprint/kar-command.xml
index 17acba1..53d56d7 100644
--- a/kar/command/src/main/resources/OSGI-INF/blueprint/kar-command.xml
+++ b/kar/command/src/main/resources/OSGI-INF/blueprint/kar-command.xml
@@ -17,34 +17,7 @@
     -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">
 
-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
-        <command>
-            <action class="org.apache.karaf.kar.command.ListKarCommand">
-                <property name="karService" ref="karService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.kar.command.InstallKarCommand">
-                <property name="karService" ref="karService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.kar.command.UninstallKarCommand">
-                <property name="karService" ref="karService"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.kar.command.CreateKarCommand">
-                <property name="karService" ref="karService"/>
-            </action>
-        </command>
-    </command-bundle>
-
-    <reference id="karService" interface="org.apache.karaf.kar.KarService"/>
-
-    <bean id="karCompleter" class="org.apache.karaf.kar.command.completers.KarCompleter">
-        <property name="karService" ref="karService"/>
-    </bean>
-    <service ref="karCompleter" auto-export="all-classes"/>
+    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.2.0"
+                    scan="org.apache.karaf.kar.command.*" />
 
 </blueprint>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 24454cb..8733568 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
@@ -17,11 +17,13 @@
 package org.apache.karaf.log.command;
 
 import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.inject.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 {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 2cbf406..d8cb4b5 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
@@ -18,9 +18,11 @@ 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.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 {
 
     @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)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 1a5a845..f17e775 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
@@ -22,12 +22,15 @@ 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.ops4j.pax.logging.spi.PaxLoggingEvent;
 
 /**
  * Displays the last log entries
  */
 @Command(scope = "log", name = "display", description = "Displays log entries.")
+@Service
 public class DisplayLog extends LogCommandSupport {
 
     @Option(name = "-n", aliases = {}, description="Number of entries to display", required = false, multiValued = false)
@@ -42,6 +45,7 @@ public class DisplayLog extends LogCommandSupport {
     @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) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 4b32913..290fffb 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
@@ -19,6 +19,7 @@ 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;
@@ -29,6 +30,7 @@ import java.util.Map;
  * Get the log level
  */
 @Command(scope = "log", name = "get", description = "Shows the currently set log level.")
+@Service
 public class GetLogLevel extends LogCommandSupport {
 
     @Argument(index = 0, name = "logger", description = "The name of the logger, ALL or ROOT (default)", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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
index 8a8f979..9ce0f8c 100644
--- 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
@@ -18,8 +18,11 @@ 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) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 4bb53d0..d2c1786 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
@@ -22,12 +22,15 @@ 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.osgi.service.log.LogService;
 
 import java.util.HashMap;
 import java.util.Map;
 
 @Command(scope = "log", name = "log", description = "Log a message.")
+@Service
 public class LogEntry extends AbstractAction {
 
     @Argument(index = 0, name = "message", description = "The message to log", required = true, multiValued = false)
@@ -37,13 +40,12 @@ public class LogEntry extends AbstractAction {
     @Completer(value = StringsCompleter.class, values = { "DEBUG", "INFO", "WARNING", "ERROR" })
     private String level = "INFO";
 
+    @Reference
     private LogService logService;
 
     private final Map<String,Integer> mappings = new HashMap<String,Integer>();
 
-    public LogEntry(LogService logService) {
-        this.logService = logService;
-
+    public LogEntry() {
         mappings.put("ERROR",1);
         mappings.put("WARNING",2);
         mappings.put("INFO",3);
@@ -65,4 +67,7 @@ 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/e4f7bc4a/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 93ae14a..a79b8a9 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
@@ -21,10 +21,12 @@ import java.io.PrintStream;
 import java.util.concurrent.*;
 
 import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.inject.Service;
 import org.ops4j.pax.logging.spi.PaxAppender;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
 @Command(scope = "log", name = "tail", description = "Continuously display log entries. Use ctrl-c to quit this command")
+@Service
 public class LogTail extends DisplayLog {
 
     private ExecutorService executorService = Executors.newSingleThreadExecutor();

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 ae41b7d..4bdf5d8 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
@@ -20,11 +20,13 @@ 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;
 
 /**
  * Set the log level for a given logger
  */
 @Command(scope = "log", name = "set", description = "Sets the log level.")
+@Service
 public class SetLogLevel extends LogCommandSupport {
     
     @Argument(index = 0, name = "level", description = "The log level to set (TRACE, DEBUG, INFO, WARN, ERROR) or DEFAULT to unset", required = true, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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
index 0b94658..d074489 100644
--- a/log/command/src/main/resources/OSGI-INF/blueprint/shell-log.xml
+++ b/log/command/src/main/resources/OSGI-INF/blueprint/shell-log.xml
@@ -21,48 +21,7 @@
            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.1.0">
-        <command>
-            <action class="org.apache.karaf.log.command.DisplayLog">
-                <property name="logService" ref="logService" />
-                <property name="formatter" ref="formatter"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.log.command.DisplayException">
-                <property name="logService" ref="logService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.log.command.ClearLog">
-                <property name="logService" ref="logService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.log.command.GetLogLevel">
-                <property name="logService" ref="logService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.log.command.SetLogLevel" >
-                <property name="logService" ref="logService" />
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.log.command.LogTail">
-                <property name="logService" ref="logService" />
-                <property name="formatter" ref="formatter"/>
-            </action>
-        </command>
-        <command>
-            <action class="org.apache.karaf.log.command.LogEntry">
-                <argument ref="osgiLogService" />
-            </action>
-        </command>
-    </command-bundle>
-
-    <reference id="formatter" interface="org.apache.karaf.log.core.LogEventFormatter"/>
-    <reference id="logService" interface="org.apache.karaf.log.core.LogService"/>
-    <reference id="osgiLogService" interface="org.osgi.service.log.LogService"/>
+    <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/e4f7bc4a/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 112a2fc..416639f 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
@@ -21,8 +21,10 @@ 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;
 
 @Command(scope = "obr", name = "url-add", description = "Adds a list of repository URLs to the OBR service.")
+@Service
 public class AddUrlCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "urls", description = "Repository URLs to add to the OBR service separated by whitespaces", required = true, multiValued = true)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 a008004..48e42d6 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
@@ -22,8 +22,10 @@ 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;
 
 @Command(scope = "obr", name = "deploy", description = "Deploys a list of bundles using OBR service.")
+@Service
 public class DeployCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "bundles", description = "List of bundle names to deploy (separated by whitespaces)", required = true, multiValued = true)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 c442285..cfa4c53 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
@@ -22,6 +22,7 @@ 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 java.io.PrintStream;
 import java.lang.reflect.Array;
@@ -30,6 +31,7 @@ import java.util.List;
 import java.util.Map;
 
 @Command(scope = "obr", name = "find", description = "Find OBR bundles for a given filter.")
+@Service
 public class FindCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "requirements", description = "Requirement", required = true, multiValued = true)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 d91830a..e2efa16 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
@@ -28,8 +28,10 @@ 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;
 
 @Command(scope = "obr", name = "info", description = "Prints information about OBR bundles.")
+@Service
 public class InfoCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "bundles", description = "Specify bundles to query for information (separated by whitespaces)", required = true, multiValued = true)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 ca17ba2..71df53f 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
@@ -25,10 +25,13 @@ 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;
 
 @Command(scope = "obr", name = "list", description = "Lists OBR bundles, optionally providing the given packages.")
-public class ListCommand implements Action {
+@Service
+public class ListCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "packages", description = "A list of packages separated by whitespaces.", required = false, multiValued = true)
     List<String> packages;
@@ -36,14 +39,8 @@ public class ListCommand implements Action {
     @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false)
     boolean noFormat;
 
-    RepositoryAdmin repoAdmin;
-
-    public void setRepoAdmin(RepositoryAdmin repoAdmin) {
-        this.repoAdmin = repoAdmin;
-    }
-
     @Override
-    public Object execute(CommandSession session) throws Exception {
+    void doExecute(RepositoryAdmin admin) throws Exception {
         StringBuilder substr = new StringBuilder();
 
         if (packages != null) {
@@ -59,7 +56,7 @@ public class ListCommand implements Action {
         } else {
             query = "(|(presentationname=*" + substr + "*)(symbolicname=*" + substr + "*))";
         }
-        Resource[] resources = repoAdmin.discoverResources(query);
+        Resource[] resources = admin.discoverResources(query);
         int maxPName = 4;
         int maxSName = 13;
         int maxVersion = 7;
@@ -82,8 +79,6 @@ public class ListCommand implements Action {
         }
 
         table.print(System.out, !noFormat);
-
-        return null;
     }
 
     private String emptyIfNull(Object st) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 07767ce..e03477b 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
@@ -20,9 +20,11 @@ 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;
 
 @Command(scope = "obr", name = "url-list", description = "Displays the repository URLs currently associated with the OBR service.")
+@Service
 public class ListUrlCommand extends ObrCommandSupport {
 
     @Option(name = "--no-format", description = "Disable table rendered output", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 0a9d0fe..9b70875 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
@@ -33,6 +33,7 @@ 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.osgi.framework.Bundle;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -42,23 +43,15 @@ public abstract class ObrCommandSupport extends OsgiCommandSupport {
 
     protected static final char VERSION_DELIM = ',';
 
-    protected Object doExecute() throws Exception {
-        ServiceReference<RepositoryAdmin> ref = getBundleContext().getServiceReference(RepositoryAdmin.class);
-        if (ref == null) {
-            System.out.println("RepositoryAdmin service is unavailable.");
-            return null;
-        }
-        try {
-            RepositoryAdmin admin = getBundleContext().getService(ref);
-            if (admin == null) {
-                System.out.println("RepositoryAdmin service is unavailable.");
-                return null;
-            }
+    @Reference
+    private RepositoryAdmin repositoryAdmin;
 
-            doExecute(admin);
-        } finally {
-            getBundleContext().ungetService(ref);
-        }
+    public void setRepositoryAdmin(RepositoryAdmin repositoryAdmin) {
+        this.repositoryAdmin = repositoryAdmin;
+    }
+
+    protected Object doExecute() throws Exception {
+        doExecute(repositoryAdmin);
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 ce8607a..9610b97 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
@@ -23,8 +23,10 @@ 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;
 
 @Command(scope = "obr", name = "url-refresh", description = "Reloads the repositories to obtain a fresh list of bundles.")
+@Service
 public class RefreshUrlCommand extends ObrCommandSupport {
 
     @Option(name = "-i", aliases = { "--index" }, description = "Use index to identify URL", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 771d3d6..dd183d1 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
@@ -23,8 +23,10 @@ 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;
 
 @Command(scope = "obr", name = "url-remove", description = "Removes a list of repository URLs from the OBR service.")
+@Service
 public class RemoveUrlCommand extends ObrCommandSupport {
 
     @Option(name = "-i", aliases = { "--index" }, description = "Use index to identify URL", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 30ef4ca..edbf11f 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
@@ -29,8 +29,10 @@ 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;
 
 @Command(scope = "obr", name = "resolve", description = "Shows the resolution output for a given set of requirements.")
+@Service
 public class ResolveCommand extends ObrCommandSupport {
 
     @Option(name = "-w", aliases = "--why", description = "Display the reason of the inclusion of the resource")

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 307cbad..8c2eb89 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
@@ -25,8 +25,10 @@ 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;
 
 @Command(scope = "obr", name = "source", description = "Downloads the sources for an OBR bundle.")
+@Service
 public class SourceCommand extends ObrCommandSupport {
 
     @Option(name = "-x", aliases = {}, description = "Extract the archive", required = false, multiValued = false)

http://git-wip-us.apache.org/repos/asf/karaf/blob/e4f7bc4a/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 ec631d6..9947986 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
@@ -20,10 +20,12 @@ 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 java.util.List;
 
 @Command(scope = "obr", name = "start", description = "Deploys and starts a list of bundles using OBR.")
+@Service
 public class StartCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "bundles", description = "List of bundles to deploy (separated by whitespaces)", required = true, multiValued = true)