`
54wangyong
  • 浏览: 14013 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

osgi 最佳实践

阅读更多

      对于osgi的具体详细讲解可以参看后面的附近,我这里主要是提供大家下载学习,对于想深入了解的人,这里不合适您。附件中主要讲解的是对于一个初学者的认知和简单使用,非常的实用教程。在这里我就不用过多的讲解。

 

 

      大家可以在附件中下载,如果大家与pdf里面使用的eclipse版本不一致的,可以在启动osgi framework时根据提示要依赖的包进行相应的添加,在学习中使用Equinox框架的包,只要eclipse是在3.1版本之后的都会有的,不用下载的。

 

       附近中主要讲解了Equinox、spring-DM、felix三种osgi框架的应用.

 

       ps:对于书中提供的源码下载,我一打开链接就报404错误。

 

       其实对于没有源码的学习,主要是在学习osgi web开发时会有些迷惘,我就把web这一块的源码分享一下.

 

       1.首先写个简单的servlet类,为了方便我们将这个servlet也写成bundle,这样这个servlet类也能够获取你加载进来的其它组件(但是这个类中确没有,如果大家参看了附件中的pdf,可以将其中的几个本地字典和远程字典查询的组件加载进来,结合这个web项目来使用,我这里就不再结合了),代码如下:

 

package com.wy.query.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import com.wy.demo.dictquey.query.QueryService;
import com.wy.query.tracker.HttpServiceTracker;

public class QueryServlet extends HttpServlet implements BundleActivator{
	private ServiceReference serviceReference = null;
	private static BundleContext context;
	ServiceTracker httpServiceTracker;
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String resultString = null;
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html");
		String name= req.getParameter("name");
		PrintWriter out = resp.getWriter();
		out.write(name + "test success");
		out.flush();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		super.doPost(req, resp);
	}

	@Override
	public void start(BundleContext arg0) throws Exception {
		System.err.println("http activator");
		this.context = arg0;
		httpServiceTracker = new HttpServiceTracker(arg0, this, null);
		httpServiceTracker.open();
	}

	@Override
	public void stop(BundleContext arg0) throws Exception {
		System.out.println("Goodbye http activator");
		httpServiceTracker.close();
		httpServiceTracker = null;
		this.context = null;
	}
}

 这个类与普通的bundle的区别就在于,它启动时做的事情是:

 

 

httpServiceTracker = new HttpServiceTracker(arg0, this, null);
httpServiceTracker.open();

       就是将服务启动起来,能够让客户端进行访问。而具体的这个HttpServiceTracker怎么实现的?我们可以参看下面的代码:

 

package com.wy.query.tracker;

import javax.servlet.Servlet;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;

public class HttpServiceTracker extends ServiceTracker {
	private Servlet servlet;
	public HttpServiceTracker(BundleContext context, Servlet servlet,
			ServiceTrackerCustomizer customizer) {
		super(context, HttpService.class.getName(), customizer);
		this.servlet= servlet;
	}

	public Object addingService(ServiceReference reference) {
		HttpService httpService = (HttpService) context.getService(reference);
		try {
			System.err.println("注册页面/page/dictquery.html");
			httpService.registerResources("/page",
					"/page/dictquery.html", null);
			System.err.println("注册servlet QueryServlet");
			httpService.registerServlet("/rest",servlet,
					null, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return httpService;
	}

	public void removedService(ServiceReference reference, Object service) {
		HttpService httpService = (HttpService) service;
		httpService.unregister("/page");
		httpService.unregister("/rest");
		super.removedService(reference, service);
	}
}

     

      这个类主要就是继承了osgi工具类中的 ServiceTracker这个类,将页面中的资源和一些servlet类添加进来,这样你就可以通过启动服。

 

       你就可以http://localhost/page来访问html资源/page/dictquery.html,这个资源就是你在项目中的src路径下建个page文件夹,然后再创建一个dictquery.html页面.

 

     通过http://locahost/rest?name="test"来访问servlet,这个会执行

httpService.registerServlet("/rest",servlet,null, null);

  我通过这种方法注册的servlet类,只要你的是在Ip:端口号后面以/rest为结尾的请求,都会执行你注册的这个servlet,而我注册的这个servlet就是我在QueryServlet中对HttpServiceTracker这个类创建时传入的,也就是QueryServlet这个对象,所以我们只要通过http://locahost/rest?name="test"这种方式请求就会执行QueryServlet中的doGet方法

     

       对于osgi想有更多的学习,可以通过http://osgi.com.cn这个网站来进行

 

 

 

 

分享到:
评论

相关推荐

    OSGI最佳实践

    OSGi最佳实践: 1. OSGi技术基础: OSGi(Open Services Gateway initiative)是一个基于Java语言的服务平台,它允许运行时动态地安装、更新和卸载软件模块。这些模块被称为bundle。OSGi提供了一个在单一Java虚拟机...

    osgi最佳实践《官方权威资料》

    ### OSGi最佳实践 #### 引言 OSGi(Open Service Gateway Initiative)作为Java平台上的动态模块系统,为开发者提供了构建健壮、可靠、模块化及可扩展系统的强大工具。此官方权威资料《OSGi最佳实践》由OSGi联盟...

    OSGi原理与最佳实践 例子和pdf

    二、OSGi最佳实践 1. 模块设计:遵循模块化原则,每个模块应具有清晰的边界和职责,减少模块间的相互依赖。 2. 依赖管理:利用OSGi的版本管理机制,精确控制模块间的依赖关系,避免版本冲突。 3. 服务设计:合理设计...

    OSGi原理与最佳实践(两章那种)与源代码

    二、OSGi最佳实践 1. **合理划分模块**:设计时应尽可能将功能模块化,避免过大的Bundle,同时保持模块间的高内聚、低耦合。 2. **使用版本管理**:为每个导出的包指定版本号,以便于处理API变更和兼容性问题。 3...

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...

    OSGi原理与最佳实践pdf下载(完整版)

    OSGI原理与最佳实践的完整版,共12章 第1 章OSGi 简介 第2 章OSGi 框架简介 第3 章基于Spring-DM 实现Petstore 第4 章基于Apache CXF 实现分布式Petstore 第5 章构建OSGI Bundle Repositor'y 第6 章OSGi 规范解读 ...

    OSGI原理最佳实践(包含源代码)

    最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi。 本书适合希望了解、深入掌握OSGi,以及编写模块化...

    InfoQ - OSGi原理与最佳实践精选版.zip

    InfoQ的"OSGi原理与最佳实践精选版"深入探讨了OSGi的关键概念、设计原则以及在实际开发中的应用策略。 OSGi的基本概念包括: 1. **模块化**:OSGi基于JAR(Java Archive)文件进行模块化,每个JAR都是一个独立的...

    OSGI 入门资料PDF

    5. OSGI最佳实践: 掌握OSGI的最佳实践包括:合理划分bundle边界,确保每个bundle有明确的职责;利用Maven或Gradle等构建工具简化bundle打包;使用版本控制管理bundle间的依赖关系;以及充分利用OSGI的动态性进行...

    OSGI进阶.pdf

    7. **OSGi最佳实践**:最后,文档总结了一系列OSGi的最佳实践,包括将接口和实现分离为不同的 bundles、保持系统的动态性、搭建公司级的 bundle repository、创建共享 library bundle、最小化依赖以及避免启动顺序...

    OSGi原理与最佳实践(完整版下载)

    "OSGi原理与最佳实践"这本书可能会详细讲解以上各个方面,并可能包含实例代码和实战经验分享,对于深入理解OSGi并应用到实际项目中非常有帮助。另外,书中可能还会涵盖一些高级话题,如服务事件、远程服务、蓝绿部署...

    深入理解OSGi:Equinox原理、应用与最佳实践.pdf

    本文将详细介绍OSGi Equinox的原理、应用以及最佳实践。 一、OSGi Equinox原理 OSGi框架的核心是其模块化系统,它将程序分割成一系列的“Bundle”,每个Bundle都是一个独立的模块,拥有自己的类加载器。这样做的...

    OSGI原理与最佳实践(扫描版,带目录).pdf

    OSGi原理与最佳实践基于作者多年使用0SGi的经验而编写,涵盖了0SGi从/kfqN深入的知识体系,从OSGi的简介开始,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种...

    OSGi原理与最佳实践完整版_源码1

    OSGi原理与最佳实践完整版_源码

Global site tag (gtag.js) - Google Analytics