`
fokman
  • 浏览: 242296 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

OSGi原理与最佳实践——字典服务declarative Service实现

 
阅读更多

一、重构DictQueryProject 删除Activator类

二、删除LocalDictQuery里面的Activator类,新建文件夹OSGI-INF,在此文件夹里面创建一个component.xml文件。

 

 修改component.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<component name="DictQueryService">
	<implementation
		class="com.grocal.localdictquery.local.impl.LocalDictQueryServiceImpl" />
	<service>
		<provide interface="com.grocal.dictquery.query.QueryService" />
	</service>
</component>
 implementation标记:指定接口的实现类
service标记:接口的定义类
同理修改DictWeb里面的DictServlet,删除BoundContext相关的应用,修改后的DictServlet如下:
package com.grocal.dictweb.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.service.http.NamespaceException;

import com.grocal.dictquery.query.QueryService;

public class DictServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private QueryService queryService;
	private HttpService httpService;


	public void setHttpService(HttpService httpService) {
		this.httpService = httpService;
		try {
			httpService.registerServlet("/dict/queryServlet", this, null, null);
			httpService.registerResources("/dict/page", "page", null);
			System.out.println("注册service /dict/page/dictquery.html");
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (NamespaceException e) {
			e.printStackTrace();
		}
	}

	public void unsetHttpService(HttpService httpService) {
		if (httpService != this.httpService) {
			return;
		}
		this.httpService.unregister("/dict/queryServlet");
		this.httpService.unregister("/dict/page");
		System.out.println("取消service注册");
		this.httpService = null;
	}

	public void setQueryService(QueryService queryService) {
		this.queryService = queryService;
	}

	public void unsetQueryService(QueryService queryService) {
		if (queryService != this.queryService) {
			return;
		}
		this.queryService = null;
	}

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

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doGet(req, resp);
		String queryWord = req.getParameter("query_word");
		resp.setContentType("text/html;charset=utf-8");
		ServletOutputStream output = resp.getOutputStream();
		if (queryService == null) {
			output.println("No available dictquery service");
			output.close();
			return;
		}

		try {
			output.println("Result is " + queryService.query(queryWord));
			output.close();
			return;
		} catch (Exception e) {
			output.println("Error occurs");
			output.println(e.toString());
			output.close();
			return;
		}
	}

}
 component的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<component name="DictQueryServlet">
	<implementation class="com.grocal.dictweb.servlet.DictServlet" />
	<reference name="QueryService" interface="com.grocal.dictquery.query.QueryService" bind="setQueryService"
	 unbind="unsetQueryService" policy="dynamic" cardinality="0..1"/>
	<reference name="HttpService" interface="org.osgi.service.http.HttpService" bind="setHttpService" 
	 unbind="unsetHttpService" policy="dynamic"/>
</component>
 运行工程,在这里值得注意的一点是需要加入另外两个bundle,以及设置bundle的start level 为2
 
  • 大小: 134.4 KB
  • 大小: 568.6 KB
分享到:
评论

相关推荐

    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图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...

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

    2. "深入理解OSGi:Equinox原理、应用与最佳实践":Equinox是OSGi的一个实现,该书深入探讨了其原理,并结合实际应用给出了最佳实践指导。 3. "OSGi原理与最佳实践(精选版)":这可能是对原书的精简版,重点介绍OSGi...

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

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

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

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

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

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

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

    OSGi(Open Services Gateway Initiative)...总的来说,掌握OSGi原理与最佳实践对于构建灵活、可扩展的Java应用至关重要。通过深入学习并实践这些内容,开发者可以提升系统设计能力,更好地应对复杂的企业级开发挑战。

    OSGi原理与最佳实践

    本书基于作者多年使用OSGi的经验而编写,涵盖了...最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi。

    OSGi原理与最佳实践的源码

    **OSGi原理与最佳实践的源码解析** OSGi(Open Service Gateway Initiative)是一个Java平台上的模块化系统,它提供了一种动态管理软件组件的方法,允许应用程序在运行时进行加载、卸载和更新。这个技术的核心是将...

    OSGi原理与最佳实践完整版+精简版+代码

    在《OSGi原理与最佳实践》这本书中,作者深入浅出地讲解了OSGi的核心概念、工作原理和实际应用。全书分为完整版和精简版,满足不同层次读者的需求。完整版通常包含了更详细的技术探讨和实践案例,而精简版则可能更...

    OSGi原理与最佳实践 学习笔记 一

    OSGi(Open Service Gateway Initiative)是一个基于Java语言的服务规范,旨在提供一个开放的服务平台,它允许多种设备通过网关来提供各种服务。OSGi Alliance是一个开放标准化组织,由多家公司共同创立,目的是为...

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

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

    OSGI合集 OSGi原理与最佳实践

    网上收集的OSGI资料. 包括: OSGi原理与最佳实践(精选版).pdf OSGI实战和源码.rar osgi进阶.pdf Introduce.OSGi.ppt OSGi.in.action.ppt r4.cmpn.pdf r4.core.pdf r4.enterprise.pdf

    OSGi原理与最佳实践(精简+完整版)

    OSGI最著名教程&lt;&lt;OSGi原理与最佳实践&gt;&gt;,林昊曾宪杰著.为希望实现模块化、动态化Java系统的架构师和开发工程师提供OSGi 入门知识,同时也为希望深入掌握OSGi的架构师、开发工程师提供OSGi 知识的深入讲解。本书从OSGi...

Global site tag (gtag.js) - Google Analytics