高老莊

          八戒的夢想:農婦,山泉,有點田
          posts - 4, comments - 14, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          osgi 添加自定義命令

          Posted on 2010-01-22 17:34 高老莊 閱讀(614) 評論(0)  編輯  收藏 所屬分類: osgi

              在使用osgi實現時,可以使用諸如install,start,stop這樣的命令來管理bundle或者調用服務.有時我們可能想添加一些自定義命令.可以通過如下的步驟來實現
              1.編寫一個服務,實現如下的接口

          1public interface CommandProvider {
          2    /**
          3     Answer a string (may be as many lines as you like) with help
          4     texts that explain the command.
          5     */

          6    public String getHelp();
          7
          8}


          如果想定義hello方法,可以如下實現該接口:

           

          import java.util.Dictionary;
          import java.util.Properties;

          import org.eclipse.osgi.framework.console.CommandInterpreter;
          import org.eclipse.osgi.framework.console.CommandProvider;
          import org.osgi.framework.BundleActivator;
          import org.osgi.framework.BundleContext;
          import org.osgi.framework.Constants;
          public class Activator implements BundleActivator,CommandProvider  {
              BundleContext bundleContext
          =null;
              
          public void start(BundleContext context) throws Exception {
                  System.out.println(
          "start" +context.getBundle().getLocation());
                  bundleContext
          =context;
                  context.registerService(CommandProvider.
          class.getName(), new AntherCommandProvider(), null);
                  Dictionary dictionary
          =new Properties();
                  dictionary.put(Constants.SERVICE_RANKING, 
          10);
                  context.registerService(CommandProvider.
          class.getName(), this,dictionary);
                  
              }


              
          public void stop(BundleContext context) throws Exception {
                  System.out.println(
          "end" +context.getBundle().getLocation());
              }


              
          public String getHelp() {
                  
          return "you are using the help command";
              }

              
              
          public void _helloa(CommandInterpreter intp)
              
          {
                  intp.println(
          "helloa "+ this.getClass().getName());
              }

              
              
          public void _hello(CommandInterpreter intp) throws Exception {
                  intp.println(
          "hello " + this.getClass().getName());
              }

          }


           

          import org.eclipse.osgi.framework.console.CommandInterpreter;
          import org.eclipse.osgi.framework.console.CommandProvider;

          public class AntherCommandProvider implements CommandProvider {

              
          public void _hello(CommandInterpreter intp)
              
          {
                  intp.println(
          "hello "+ this.getClass().getName());
              }

              
          public String getHelp() {
                  
          return null;
              }

          }


          其中,通過CommandInterpreter類型的nextArgument()方法可以迭代出所有的命令參數.
              2.注冊服務
                  如果不將該接口注冊為服務,這個hello命令將不產生任何作用.注冊的服務名稱必須是org.eclipse.osgi.framework.console.CommandProvider.
                 當系統中存在多個此接口的實現時,可以通過SERVICE_RANKING屬性來決定了命令執行的順序,既有最高值的服務將被優先執行.這種方式可以重載系統中已經存在的同名服務.
               3.執行命令
              請仔細體會輸出結果


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 行唐县| 环江| 大厂| 德格县| 怀宁县| 越西县| 湾仔区| 五大连池市| 福海县| 孟连| 涿州市| 阿拉善盟| 繁峙县| 微博| 祁连县| 巫溪县| 永宁县| 衡东县| 文成县| 平山县| 呈贡县| 辽宁省| 文山县| 保德县| 临海市| 汉中市| 芜湖县| 临武县| 砚山县| 绥中县| 武平县| 陆丰市| 色达县| 工布江达县| 渑池县| 临沭县| 临颍县| 浠水县| 安溪县| 逊克县| 科技|