osgi 添加自定义命令

    在使用osgi实现时,可以使用诸如install,start,stop这样的命令来管理bundle或者调用服务.有时我们可能想添加一些自定义命令.可以通过如下的步骤来实现
    1.编写一个服务,实现如下的接口

1 public   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.执行命令
    请仔细体会输出结果

你可能感兴趣的:(osgi 添加自定义命令)