高老莊

          八戒的夢想:農婦,山泉,有點田
          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.執行命令
              請仔細體會輸出結果


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


          網站導航:
           
          主站蜘蛛池模板: 宜城市| 五大连池市| 碌曲县| 普陀区| 卓尼县| 七台河市| 漳平市| 古浪县| 铜鼓县| 洛隆县| 怀柔区| 乌鲁木齐市| 滁州市| 平顶山市| 新宾| 扎囊县| 会泽县| 上思县| 宣恩县| 石屏县| 嘉鱼县| 永丰县| 榆树市| 万山特区| 罗田县| 峨边| 泰和县| 伊宁县| 团风县| 天祝| 博爱县| 白朗县| 朝阳市| 湘乡市| 金阳县| 咸阳市| 台东县| 大同县| 巴东县| 桂林市| 嘉禾县|