gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          Ideas on Apache karaf shell

          i would like to share some ideas on Apache karaf shell.
          karaf shell is based on apache felix gogo.
          If you want to create a new command, you have to extends org.apache.karaf.shell.console.AbstractAction or XxxCommandSupport.
          public class CatAction extends AbstractAction {
          protected Object doExecute() throws Exception {
          //todo something here
          }
          }

          and then add to blueprint config, would be something like this:
          <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
              
          <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0">
                  
          <command name="shell/cat">
                      
          <action class="org.apache.karaf.shell.commands.CatAction"/>
                  
          </command>
                  
              
          </command-bundle>
          </blueprint>
          it's somewhat a little bit verbose in my opinion.

          i would perfer something like this:
          @CommandProvider(scope = "shell", name = "ShellCommandProvider", description = "Unix Shell alike commands.")
          public class ShellCommandProvider {

          @Option(name 
          = "-n", aliases = {"--show-line-number"}, description = "The number the output lines, starting at 1.")
          private boolean displayLineNumbers;

          @Argument(name 
          = "paths or urls", description = "A list of file paths or urls to display separated by whitespaces (use - for STDIN)", required = true, multiValued = true)
          private List paths;

          @Command(scope
          ="my_scope", options = { "displayLineNumbers" },arguments={"paths"}, description = "Displays the content of a file or URL.")
          public void cat(CommandSession session) throws Exception {
          //todo something here
          }


          @Argument(name 
          = "paths or urls")
          private String arg1;
          @Command(options 
          = { "displayLineNumbers" },arguments={"arg1"})
          public void cat1() throws Exception {
           //todo something here
          }

          }

          1. The CommandProvider no need to extends some class or implements some interface, and  it groups a set of command.
          2. Each method can be a command by annotated with @Command, and opt or arg can be shared by different commands.
          3. The scope specified at @CommandProvider which is shared by all the commands within this provider. and also each command can override the scope.

          i.e. options = { "displayLineNumbers" }, it ref the opt by the field name. and also the same for arguments. the order indicate the index of the opt or arg.
          arguments = { "arg1","arg2" }: means the command will accept the args in order: arg1 arg2

          finally, add to blueprint config:
          <blueprint>
              
          <shell:command-provider class="org.apache.karaf.shell.commands.ShellCommandProvider">
                 
          <shell:property name="bundleContext" ref="blueprintBundleContext"/>
                   any standard blueprint elements here
              
          </shell:command-provider>
          </blueprint>

          thats it.
          any ideas are welcome.

          posted on 2011-05-11 11:37 gembin 閱讀(888) 評論(0)  編輯  收藏 所屬分類: OSGi

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          free counters
          主站蜘蛛池模板: 施甸县| 邹平县| 滕州市| 澄城县| 大名县| 宁河县| 三亚市| 宝应县| 南丹县| 富阳市| 湟中县| 通辽市| 宿松县| 华容县| 定结县| 尼勒克县| 普陀区| 桐梓县| 渭南市| 昌都县| 旬邑县| 定边县| 札达县| 巧家县| 隆安县| 邻水| 田林县| 卢氏县| 滨海县| 申扎县| 通许县| 镇江市| 曲麻莱县| 元朗区| 新野县| 永登县| 赤城县| 屏南县| 鹤峰县| 夏河县| 侯马市|