`
classtwo5367
  • 浏览: 38562 次
  • 性别: Icon_minigender_1
  • 来自: Cork
最近访客 更多访客>>
社区版块
存档分类
最新评论

基于OSGi的搜索程序实现

阅读更多
最近很多人问我在Ericsson搞点什么,说实话,什么都没有搞就是在看书。实习2周就见了BOSS三面,除了第一天的介绍,然后一次是告诉我们换桌子,最后一次是来看看我们坐在哪里。。。我们就这样从Ericsso白拿了400+。。

不过BOSS还是吩咐了点学的东西,那就是OSGi,OSGi到底是什么大家可以Google一下。简单的来说就是一个FRAMEWORK,其最大的特点就是提供了软件模块的动态加载,各模块通过接口向外提供服务,所以说OSGi也是一个面向服务的程序构架。

可以说OSGi是很优秀的,但是国内基本没有什么有用的教程(OSGi已经诞生10年了,可见国内的技术落后别人多少)。



下面就写一个简单的OSGi的例子

OSGi 中模块单元叫Bundle,Bundle可以使用某个服务,也可以提供某个服务。在OSGi 的R4 版本中提供了Declarative Services,在Declarative Services 中 Bundle又由Component组成,每个Component同Bundle一样也既可以提供服务也可以使用服务



————————————————华丽的分割线———————————————————



例子是由两个Bundle组成OSGi_Test和OSGi_TestService,其中OSGi_TestService有两个Component,分别是initialize和search,initialize是用于初始化查找数据的。search使用了initialize向外提高的服务,得到一个数组,并对其进行搜索操作。而OSGi_Test则使用了OSGi_TestService中search提供的搜索服务。



————————————————华丽的分割线———————————————————



————————————————OSGi_TestService————————————————

下面的是第一个Component,用于初始话数据

----InitializeData.java-----



package org.xudong.testservice.component.initialize;

import java.util.List;

public interface InitializeData {
public List<String> initializeData();

}



-----InitializeDataImpl------

package org.xudong.testservice.component.initialize;

import java.util.LinkedList;
import java.util.List;

import org.osgi.service.component.ComponentContext;


public class InitializeDataImpl implements InitializeData{
public List<String> initializeData(){
  String[] name = {"jame","dfdf","allen","adfdefa","adfadf"};
  List<String> namelist = new LinkedList<String>();
  for(int i = 0; i<name.length; i++){
   namelist.add(name[i]);
  }
  return namelist;
}
protected void activate(ComponentContext context) {
  System.out.println("InitializeData Component Active,within the bundle lifecircle.");
}
public void deactivate(ComponentContext context) throws Exception {
  System.out.println("InitializeData Component Deactive,within the bundle lifecircle.");
}

}



这个是第二个Component,其使用了前一个Component的服务,得到了初始化后的数组

-----Search-----

package org.xudong.testservice.component.search;

public interface Search {
public void searchByKeyword(String keyword);
}

-------SearchImpl---------



package org.xudong.testservice.component.search;

import java.util.LinkedList;
import java.util.List;

import org.osgi.service.component.ComponentContext;
import org.xudong.testservice.component.initialize.InitializeData;

public class SearchImpl implements Search{
List<String> namelist = new LinkedList<String>();
protected void activate(ComponentContext context) {
  System.out.println("Search Component Active,within the bundle lifecircle.");
  InitializeData initializedata = (InitializeData) context.locateService("InitializeData");
  namelist.addAll(initializedata.initializeData());
}
public void deactivate(ComponentContext context) throws Exception {
  System.out.println("Search Component Deactive,within the bundle lifecircle.");
}

public void searchByKeyword(String keyword){
  for (int i = 0 ; i<namelist.size();i++){
   if (namelist.get(i).equals(keyword)){
    System.out.println("The keyword"+keyword+"has found.");
   }else{
    System.out.println("The keyword"+keyword+"has not found.");
   }
  }
}

}



-----------------------------------OSGi_Test-------------------------------------

其使用了名叫Search的Component的服务

package org.xudong.test;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.xudong.testservice.component.search.Search;

public class Activator implements BundleActivator {

/*
  * (non-Javadoc)
  * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
  */

public static BundleContext context = null;

public void start(BundleContext context) throws Exception {
  String keyword = "jame";
  Activator.context = context;
  ServiceReference reference = context.getServiceReference(Search.class.getName());
  if (reference != null){
   Search service = (Search)context.getService(reference);
      service.searchByKeyword(keyword);
      context.ungetService(reference);
  }else{
   System.out.println("No Service available!");
  }
}
public void stop(BundleContext bc) throws Exception {
 
  Activator.context = null;
}

/*
  * (non-Javadoc)
  * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
  */


}
0
0
分享到:
评论

相关推荐

    Java swt 64位 开发集合jar包

    5. `org.eclipse.osgi_3.10.101.v20150820-1432.jar`:Eclipse OSGi框架的实现,提供模块化系统,使得Java应用程序可以按需加载和卸载组件,增强了应用程序的可扩展性和可维护性。 6. `org.eclipse.jface_3.11.0.v...

    快速入门指南 中文版 ServiceMix4

    ServiceMix是基于OSGi的Java应用程序,它提供了集成多种不同技术和服务的能力,如Java消息服务(JMS)、Web服务、Java存根(EJB)、企业级JavaBean(EJB)和Java持久化API(JPA)等。 1. **介绍** ServiceMix是一...

    java开源包3

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包4

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    Java SWT(win32 X86) 开发包

    4. `org.eclipse.osgi_3.10.101.v20150820-1432.jar`:Eclipse OSGi是Java服务框架的一个实现,提供模块化和动态性的能力,使得软件组件可以在运行时加载、卸载和更新,这对于大型和复杂的软件项目尤其有用。...

    JAVA上百实例源码以及开源项目源代码

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    java开源包1

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    JAVA核心知识点整理.pdf

    HashSet基于HashMap实现,TreeSet基于红黑树实现,而LinkedHashSet是带有元素插入顺序的HashSet。HashMap在Java7和Java8中实现方式不同,Java8引入了红黑树以优化性能。ConcurrentHashMap是线程安全的HashMap。 ...

    java开源包11

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包2

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包6

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包5

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包10

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包8

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包7

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包9

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包101

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    Java资源包01

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    视频播放器课程设计报告报告.docx

    3. 软件设计方面,包括布局设计、音量控制、视频搜索、播放控制等关键功能的实现。 4. 软件调试阶段,需要在Android虚拟机和真实设备上进行,以确保应用的稳定性和兼容性。 综上所述,本课程设计旨在通过实践开发一...

Global site tag (gtag.js) - Google Analytics