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) 評論(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
          主站蜘蛛池模板: 布拖县| 诸暨市| 耒阳市| 阳朔县| 哈尔滨市| 岳阳市| 保定市| 江口县| 阳春市| 河间市| 侯马市| 樟树市| 张家港市| 襄城县| 深圳市| 通山县| 新建县| 吴江市| 富裕县| 贡觉县| 琼结县| 临泉县| 洪泽县| 囊谦县| 花垣县| 大余县| 哈巴河县| 米林县| 土默特左旗| 仁化县| 沙湾县| 罗源县| 青海省| 武穴市| 泾川县| 姜堰市| 射阳县| 灵璧县| 宜兴市| 武城县| 益阳市|