Posted on 2010-01-22 17:34
高老莊 閱讀(614)
評論(0) 編輯 收藏 所屬分類:
osgi
在使用osgi實現(xiàn)時,可以使用諸如install,start,stop這樣的命令來管理bundle或者調(diào)用服務(wù).有時我們可能想添加一些自定義命令.可以通過如下的步驟來實現(xiàn)
1.編寫一個服務(wù),實現(xiàn)如下的接口
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方法,可以如下實現(xiàn)該接口:
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()方法可以迭代出所有的命令參數(shù).
2.注冊服務(wù)
如果不將該接口注冊為服務(wù),這個hello命令將不產(chǎn)生任何作用.注冊的服務(wù)名稱必須是org.eclipse.osgi.framework.console.CommandProvider.
當(dāng)系統(tǒng)中存在多個此接口的實現(xiàn)時,可以通過SERVICE_RANKING屬性來決定了命令執(zhí)行的順序,既有最高值的服務(wù)將被優(yōu)先執(zhí)行.這種方式可以重載系統(tǒng)中已經(jīng)存在的同名服務(wù).
3.執(zhí)行命令
請仔細(xì)體會輸出結(jié)果
