探索Eclipse的OSGi控制台(3)

http://developer.51cto.com  2007-02-28 09:25  Chris Aniszczyk  ibmdw  我要评论(0)
  • 摘要:使用和扩展驱动Eclipse的控制台。在本文中,您将了解非常优秀的 OSGi (Equinox) 控制台,以及如何将其添加到 Eclipse 开发人员的工具箱中,并了解如何扩展控制台以进一步添加到工具箱中。
  • 标签:Java  Eclipse  OSGi  控制台

有用的控制台命令摘要

表 1. 有用的控制台命令

命令 描述
start 启动给定了 ID 或符号名称的包
stop 停止给定了 ID 或符号名称的包
install 为当前实例添加一个给定了 URL 的包
uninstall 删除当前实例的具有给定 URL 的包
update 为当前实例更新给定 URL 的包
active 列出当前实例中所有活动的包
headers 列出具有给定 ID 或符号名称的包的标头
ss 列出在当前实例中注册的所有包的简短状态
services 列出给定了正确过滤器的服务
diag 在给定 ID 或符号名称的包上运行诊断程序

还有很多其他 OSGi 命令可用。这里列出的命令是我认为最有用的命令。要获得所有命令的列表,只需在控制台中键入 help。

扩展控制台

人们说 Eclipse 的绝妙之处就在于它的可扩展性。控制台是以类似方式扩展的。这是十分重要的,因为作为一名开发人员,您可能向用户提供某种服务。通过扩展控制台,您可以使高级用户或管理员能够调试关于服务的问题。

控制台不使用熟悉的扩展点,它具有一种简单的可扩展性机制。让我们通过几个示例来说明控制台的可扩展性。

uname,OSGi 样式

使用过 UNIX® 风格的系统的人都会熟悉 uname 命令,该命令将打印关于运行的操作系统的名称、版本和其他信息。在 OSGi 上下文中,有各种不同风格的 UNIX 的方法就可以有 OSGi 控制台的不同实现(例如 Apache Felix、Knopflerfish 等等)。

扩展 OSGi 控制台的最重要部分是 CommandProvider 接口。希望扩展控制台的客户机必须实现此接口。实现此接口后,下一步是启动带有 "_" 的方法名称。这些方法将表示控制台中可用的命令。就这么简单!参见清单 1 中的示例。

清单 1. OSGi uname

public class Activator implements BundleActivator, CommandProvider {

private BundleContext context;

public void start(BundleContext context) throws Exception {
this.context = context;
Hashtable properties = new Hashtable();
context.registerService\
(CommandProvider.class.getName(), this, properties);
}

public String getHelp() {
StringBuffer buffer = new StringBuffer();
buffer.append("\tuname - returns framework information\n");
return buffer.toString();
}

public void stop(BundleContext context) throws Exception {}

public void _uname(CommandInterpreter ci) throws Exception {
String vendor = context.getProperty(Constants.FRAMEWORK_VENDOR);
String version = context.getProperty(Constants.FRAMEWORK_VERSION);
String osName = context.getProperty(Constants.FRAMEWORK_OS_NAME);
String osVersion = context.getProperty(Constants.FRAMEWORK_OS_VERSION);
System.out.println("\n " + vendor + " "
+ version + " (" + osName + " "
+ osVersion + ")");
}

    
包和存在主义

包本身可能从未质疑过自己的存在,这里提供了一个简单示例,它将打印出一个包是 vanilla 包还是 Eclipse 插件。(记住,两者都还是包!)清单 2 通过添加新方法并修改 getHelp() 方法来构建先前的示例。

清单 2. 修改 getHelp() 

...
public String getHelp() {
StringBuffer buffer = new StringBuffer();
buffer.append("\twhatami - \
returns whether the bundle is a plug-in or not\n");
buffer.append("\tuname - returns framework information\n");
return buffer.toString();
}

public void _whatami(CommandInterpreter ci) throws Exception {
try {
long id = Long.parseLong(ci.nextArgument());
Bundle bundle = context.getBundle(id);
URL url = bundle.getEntry("plugin.xml");
if(url != null) {
System.out.println("\n I'm \
(" + bundle.getSymbolicName() + ") a plug-in");
} else {
System.out.println("\n I'm \
(" + bundle.getSymbolicName() + ") not a plug-in");
}
} catch (NumberFormatException nfe) {
System.out.println("\n Error processing command");
}
}
...

图 9 中显示了我们的工作结果。

扩展控制台的结果 
图 9. 扩展控制台的结果

结束语

本文演示了如何使用 OSGi 控制台以及如何扩展控制台。在此过程中,我们查看了控制台以及如何扩展控制台的几个示例。您现在已经更加熟悉控制台并且知道了如何在日常的 Eclipse 开发中使用控制台。使用控制台可能甚至会让您回想起玩 Doom and Quake 时的情景。

Quake 控制台

图 10. Quake 控制台

下载

描述          名字                                          大小        下载方法
源代码      os-ecl-osgiconsole.hello.zip        49KB        HTTP

(责任编辑 火凤凰 sunsj@51cto.com  QQ:34067741  TEL:(010)68476636-8007)



共3页: 上一页 [1] [2] 3
【内容导航】
Java实用开发全集
开源框架Eclipse发展历程
Java类的基础教程专题
Java发展动态专题
Eclipse开发平台应用
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有