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 閱讀(902) 評(píng)論(0)  編輯  收藏 所屬分類: OSGi

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊(cè)

          收藏夾(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

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          free counters
          主站蜘蛛池模板: 嘉峪关市| 汤原县| 子长县| 武胜县| 北辰区| 济源市| 乌兰察布市| 牟定县| 曲周县| 望城县| 鸡东县| 工布江达县| 南靖县| 隆回县| 台江县| 津南区| 油尖旺区| 商城县| 通江县| 鹤庆县| 民县| 万盛区| 阳春市| 建始县| 汝阳县| 怀安县| 南华县| 珠海市| 金坛市| 临西县| 皋兰县| 鄂托克前旗| 高台县| 苍山县| 新巴尔虎右旗| 新竹市| 丽水市| 桓台县| 宜章县| 个旧市| 昌都县|