`
classtwo5367
  • 浏览: 37575 次
  • 性别: 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开源包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上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

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

     Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText(); //得到服务器地址  ...

    java开源包1

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

    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是...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    正统的类加载器架构 / 232 9.2.2 OSGi:灵活的类加载器架构 / 235 9.2.3 字节码生成技术与动态代理的实现 / 238 9.2.4 Retrotranslator:跨越JDK版本 / 242 9.3 实战:自己动手实现远程执行功能 / 246 9.3.1 ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    框架实现 log4j logback commong logging jdk logger 测试框架 测试框架 junit easymock testng mockito bug管理 禅道 jira 开发工具 编程工具 eclipse myeclipse idea vi VS webstorm ...

Global site tag (gtag.js) - Google Analytics