快速业务通道

利用Eclipse开发基于OSGi的Bundle应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
. **/ 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号