高老莊

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

          osgi 添加自定義命令

          Posted on 2010-01-22 17:34 高老莊 閱讀(608) 評論(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.執行命令
              請仔細體會輸出結果


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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 日土县| 太和县| 新兴县| 玛沁县| 临沭县| 梓潼县| 项城市| 天全县| 沈丘县| 建德市| 东乌珠穆沁旗| 额敏县| 田东县| 蒙山县| 贵溪市| 临汾市| 宣汉县| 万安县| 河东区| 大新县| 大厂| 汝阳县| 奉节县| 南和县| 安溪县| 成都市| 吉木萨尔县| 福建省| 灵武市| 乌鲁木齐市| 舒城县| 林口县| 南昌县| 姜堰市| 建阳市| 砀山县| 库车县| 沙雅县| 从化市| 登封市| 红桥区|