有用的控制台命令摘要
表 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 时的情景。

图 10. Quake 控制台
下载
描述 名字 大小 下载方法
源代码 os-ecl-osgiconsole.hello.zip 49KB HTTP
(责任编辑 火凤凰 sunsj@51cto.com QQ:34067741 TEL:(010)68476636-8007)