利用Eclipse开发基于OSGi的Bundle应用 - 编程入门网
.
**/
public interface NameService {
/**
* Check for the existence of a Name.
* @param name the Name to be checked.
* @return true if the Name is in the list,
* false otherwise.
**/
public boolean checkName(String name);
}
该服务接口很简单,只包含一个需要实现的方法。为了将服务接口和服务实现相分离,方便其他 Bundle 引用该服务,我们通常需要将该服务接口单独放在一个包内,本例中,存放NameService.java 接口的 Java 包为 example.service。接下来,需要实现 NameService 接口,并且注册该服务。在本例中,我们用内部类实现了该接口,下面是该 Bundle 应用的部分源代码。 Example Bundle部分源代码 public void start(BundleContext context) throws Exception { Properties props = new Properties(); props.put("ClassRoom", "ClassOne"); context.registerService(NameService.class.getName(), new NameImpl(), props); } private static class NameImpl implements NameService { // The set of names contained in the arrays. String[] m_name = { "Marry", "John", "David", "Rachel", "Ross" }; /** * Implements NameService.checkName(). Determines if the passed name is * contained in the Array. * * @param name * the name to be checked. * @return true if the name is in the Array, false otherwise. */ public boolean checkName(String name) { // This is very inefficient for (int i = 0; i < m_name.length; i++) { if (m_name[i].equals(name)) { return true; } } return false; } } 在start()方法中,利用BundleContext注册一个姓名查询服务,并且为该服务设置相关属性以便服务查询。在实现姓名查询服务时,我们简单定义了一个静态数组用于存放有效的姓名信息。 利用Eclipse开发基于OSGi的Bundle应用(5)时间:2011-12-08 ibm developerWorks 杨晓飞(3)定义Bundle描述文件MANIFEST.MF,Bundle应用example的MANIFEST.MF文件如下: MANIFEST.MF文件信息 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Example Bundle Bundle-SymbolicName: example Bundle-Version: 1.0.0 Bundle-Activator: example.osgi.Activator Bundle-Localization: plugin Import-Package: org.osgi.framework;version="1.3.0" Export-Package: example.service 其中,Bundle-Activator属性指明了实现BundleActivator接口的类,该类用来启动和停止Bundle应用。Export-Package属性指定了该Bundle输出的共享包,该属性可以使其他的Bundle应用引用我们所定义的服务接口。 (4)创建项目名为exampleClient的Bundle应用,该应用在OSGi平台上查寻并引用example Bundle应用已经注册的姓名查询服务,然后从标准输入读入用户所输入的姓名信息,判断所输入姓名是否有效。exampleClient应用的部分源代码如下,读者可从参考资料中获得完整源代码。 ExampleClient Bundle部分源代码 public void start(BundleContext context) throws Exception { ServiceReference[] refs = context.getServiceReferences( NameService.class.ge |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |