`
hz_chenwenbiao
  • 浏览: 1007768 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

OSGi实战的问题(转)

    博客分类:
  • OSGI
阅读更多

对osgi有了一个初步的了解之后,准备写段代码跑跑,一试身手,
先下载了一份Bluedavy 的《OSGI实战》
里边有可以直接运行的代码,双击run.bat运行正常,暗爽!
开始练习《OSGI实战》中用户登录验证模块,一行一行敲代码,第一个变化就是工程之间相互引用不能在Build path里添加工程引用了,改成了在MANIFEST.MF当中添加Import-Package
在学习过程当中还是遇到了不少问题,记录下来,帮助遇到和我同样样问题的少走弯路。
我用的是eclipse3.4 jdk1.6 

1.Import-Package时org.eclipse.equinox.servlet.api这个包死活找不到。
在eclipse3.4已经不存在了直接导入javax.servlet_2.4.0.v200806031604.jar就可以了
如果没有添加javax.servlet会出现  INSTALLED   UserValidatorWebBundle_1.0.0
强行启动会抛出以下异常
org.osgi.framework.BundleException: The bundle could not be resolved. Reason: Missing Constraint: Require-Bundle: javax.servlet; bundle-version="2.4.0"

2.如果使用了Equinox OSGI Declarative Service需要下载 eclipse-equinox-SDK-3.4.2.zip 
因为Declarative Service实现并没有包含在Eclipse的默认软件包中,需要单独从 Eclipse 的的网站上获得,下载包当中的plugins和features复制到eclipse当中重启
org.eclipse.equinox.ds_1.0.0.v20080427-0830.jar是运行时用到的bundle
org.eclipse.equinox.ds用到了org.eclipse.equinox.util_1.0.0.v20080414.jar
都要在config.ini当中添加并启动

3.一切看似启动正常了,log当中还是有以下异常
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
还得启动 org.eclipse.osgi.util_3.1.300.v20080303.jar 这个bundle

4.如果http://localhost/demo/page/login.htm 这个页面不能访问可能org.eclipse.equinox.http_1.0.200.v20080421-2006.jar没有启动,如何htm能访问了http://localhost/demo/login 不能访问 可能org.eclipse.equinox.http.servlet_1.0.100.v20080427-0830.jar没有启动

总结一下用户登录验证模块要启动的bundle
id State       Bundle
0 ACTIVE      org.eclipse.osgi_3.4.2.R34x_v20080826-1230
1 ACTIVE      ConfigFileValidatorBundle_1.0.0
2 ACTIVE      DBValidatorBundle_1.0.0
4 ACTIVE      UserValidatorBundle_1.0.0
5 ACTIVE      LDAPValidatorBundle_1.0.0
9 ACTIVE      UserValidatorWebBundle_1.0.0
10 ACTIVE      org.eclipse.equinox.util_1.0.0.v20080414
11 ACTIVE      org.eclipse.equinox.ds_1.0.0.v20080427-0830
12 ACTIVE      javax.servlet_2.4.0.v200806031604
13 ACTIVE      org.eclipse.osgi.services_3.1.200.v20071203
14 ACTIVE      org.eclipse.equinox.http.servlet_1.0.100.v20080427-0830
15 ACTIVE      org.eclipse.equinox.http_1.0.200.v20080421-2006
17 ACTIVE      org.eclipse.osgi.util_3.1.300.v20080303

 

 

当缺少什么bundle时,自己去网上下就行,然后用导入Plug-ins and Fragments的方式将bundle导入,便可以引用了,所以别当成什么高深的东西,别忘了在运行时用"Add Required Bundles",它帮我们加入会用的的bundles,这个就帮我们很大的忙了.

 

在第一个例子(源码中的classic)中,用代码注册的方式来注册服务,即在每个实现服务接口的bundle里的Activator注册自己的服务到指定服务名下,如

package org.riawork.demo.user.validator;
/*
 * RIAWork.org
 * 
 * OSGI Opendoc Demo
 */
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.riawork.demo.service.user.Validator;
import org.riawork.demo.service.user.impl.ConfigFileValidatorImpl;
/**
 * desc: ConfigFileBundle Activator,采用传统的方式完成服务的注册
 *
 * @author jerry
 */
public class Activator implements BundleActivator {

	// --------------------------------------------Instance Variables
	
	private ServiceRegistration serviceReg=null;
	
	// --------------------------------------------Public Method
	
	/* (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
	 */
	//实现Validator的Bunble都会在Activator里将自己的新的实现注册到Validator.class.getName()名下,这样Validator.class.getName()为名的服务就有多个了
	public void start(BundleContext context) throws Exception {
		serviceReg=context.registerService(Validator.class.getName(), new ConfigFileValidatorImpl(), null);
	}

	/* (non-Javadoc)
	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
	 */
	public void stop(BundleContext context) throws Exception {
		if(serviceReg!=null)
			serviceReg.unregister();
	}

}

 

 

在第二个例子(源码中的ds),采用的是在配置文件里声明的方式来发布一个bundle里的服务的,即在ConfigFileValidatorBundle,DBValidatorBundle,LDAPValidatorBundle这三个实现UserValidatorBundle接口的bundle里没有Activator来注册它们的实现服务,而是在MANIFEST.MF配置文件里加入Service-Component: OSGI-INF/component.xml来发布声明在项目目录下的OSGI-INF/component.xml配置文件的服务。

 

    打包时,按着文档来做是不行的,打包的时候,org.eclipse.osgi的jar包和run.bat是在一个目录里,而在它们目录下再建configuration目录(存放config.ini文件)和bundles目录(存放自己打包出来的bundle和它们运行依赖的bundle),还有一点在注意的是拷贝文档里的config.ini内容到config.ini文件是不能运行的,可以是有中文字符在里面。

我这里能运行的如下:

osgi.noShutdown=true
# 当前系统下运行的 Bundle,可以在此指定 Bundle 的启动顺序,在后续的
# StartLevel Service章节中会详细的介绍
#避免Unable to acquire application service. Ensure that the org.eclipse.core.runtime错误
eclipse.ignoreApp=true

#osgi.bundles=reference\:file\:bundles/ConfigFileValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/DBValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/LDAPValidatorBundle_1.0.0.jar@start,reference\:file\:bundles/org.eclipse.equinox.http_1.0.301.R35x_v20090728.jar@start,reference\:file\:bundles/javax.servlet_2.5.0.v200806031605.jar@start,reference\:file\:bundles/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,reference\:file\:bundles/UserValidatorBundle_1.0.0.jar@start, reference\:file\:bundles/UserValidatorWebBundle_1.0.0.jar@start
osgi.bundles=plugins/ConfigFileValidatorBundle_1.0.0.jar@start,\
	      plugins/DBValidatorBundle_1.0.0.jar@start,\
		plugins/LDAPValidatorBundle_1.0.0.jar@start,\
		plugins/org.eclipse.equinox.http_1.0.301.R35x_v20090728.jar@start,\
		plugins/javax.servlet_2.5.0.v200806031605.jar@start,\
		plugins/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,\
		plugins/UserValidatorBundle_1.0.0.jar@start,\
		plugins/UserValidatorWebBundle_1.0.0.jar@start,\
		plugins/org.eclipse.equinox.ds_1.1.1.R35x_v20090806.jar@start,\
		plugins/org.eclipse.equinox.util_1.0.100.v20090520-1800.jar@start


osgi.bundles.defaultStartLevel=4

 

这里不要忘记加入ds的bundle不然用Service-Component: OSGI-INF/component.xml配置就不起作用了,发布不了服务的,因为是由ds的bundle来扫描发现相应的服务,并加于管理的。

分享到:
评论

相关推荐

    《OSGi实战》完整中文版

    《 OSGi实战》是学习OSGi的全面指导,利用与架构和开发人员相关的示例清楚地讲解OSGi概念,同时探讨了很多实践场景和技术,阐述了开发人员有多需要OSGi,怎么将OSGi嵌入其他容器中,将遗留系统移入OSGi的最佳实践,...

    osgi实战(pdf超请版)

    ### OSGI实战知识点概述 #### 一、序言与背景介绍 - **背景与动机**:作者在工作之初便对插件体系结构产生了浓厚兴趣,尤其关注ant、maven等构建工具及其插件系统。这表明作者对于软件模块化、可扩展性的重视。 - ...

    OSGI实战教程

    在OSGI实战教程中,首先需要了解OSGI(Open Services Gateway Initiative)是一个由众多IT公司共同制定的Java模块化标准规范,旨在实现软件组件的热插拔和服务动态管理。OSGI技术允许应用程序通过动态地安装、启动、...

    OSGi实战(OSGi规范制定者亲自撰写,汇集Apache项目技术实战经验),完整扫描版

    为了弥补OSGi规范在应用指导方面的不足,四位活跃在OSGi开发第一线的技术专家联手打造了《OSGi实战》。《OSGi实战》面向OSGi规范的使用者,系统、全面、深入地阐述OSGi的重要特性及其使用方法。《OSGi实战》还介绍了...

    OSGi实战

    资源名称:OSGi实战内容简介:为了弥补OSGi规范在应用指导方面的不足,四位活跃在OSGi开发第一线的技术专家联手打造了《OSGi实战》。《OSGi实战》面向OSGi规范的使用者,系统、全面、深入地阐述OSGi的重要特性及其...

    osgi,林昊写的osgi实战和进阶

    林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合对Java模块化系统感兴趣的初学者和有经验的开发者。 在《OSGI实战》中,作者林昊可能会详细讲解以下几个核心知识点: 1. **OSGI基础*...

    OSGI实战和OSGI进阶打包提供

    本篇将深入探讨OSGI实战和进阶的相关知识点。 一、OSGI基本概念 1. 模块系统:OSGI的核心是模块化,每个模块称为Bundle,类似于Java中的JAR文件,但包含额外的元数据描述其依赖关系。 2. 服务:OSGI强调服务导向,...

    OSGI实战(PDF)

    OSGI实战这本书是面向对OSGI技术感兴趣的Java开发者的入门资料,旨在提供全面的OSGI知识体系,帮助读者理解和应用OSGI框架。 在OSGI中,每个bundle都是一个独立的运行单元,有自己的类加载器,可以加载自己的类和...

    OSGI实战及源码

    本资源《OSGI实战及源码》主要面向Java开发者,提供了一种深入理解并实践OSGI技术的途径。通过实际操作和源码分析,读者可以掌握如何构建、部署和管理OSGI模块化的应用。 OSGI实战部分可能会涵盖以下关键知识点: ...

    OSGI实战中文版

    **OSGI实战中文版** OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的、可热插拔的模块,称为服务。这些服务可以互相发现并交互,提供了灵活的组件化开发环境。...

    OSGI实战+进阶

    在"OSGI实战"中,你将学习到如何使用OSGI来开发模块化的Java应用。实战部分通常会涵盖以下几个关键知识点: 1. **模块系统**:OSGI的基础是模块化,每个模块称为一个Bundle,它们有自己的类路径和生命周期。理解...

    OSGI实战.pdf

    《OSGI实战》这本书主要涵盖了OSGI(Open Service Gateway Initiative)技术在实际开发中的应用与实践,它是一种Java模块化系统,旨在解决大型软件系统的复杂性问题。以下将详细阐述OSGI的核心概念、优势以及其在...

    OSGI资料,OSGI进阶,OSGI实战,OSGI入门和整合Spring

    《OSGI实战》侧重于实际应用,可能涵盖以下内容: 1. **开发环境搭建**:如何使用Eclipse和Equinox等工具创建和管理OSGI项目。 2. **案例分析**:通过具体的应用场景,如构建可插拔的Web服务器、数据库连接池等,...

    OSGI实战.docx

    在“OSGI实战”文档中,作者深入浅出地介绍了如何在实际开发环境中应用OSGI技术。 一. 序 这部分可能涵盖了OSGI的基本概念和历史背景,解释了为什么在Java开发中引入OSGI模块系统的重要性,以及它如何解决了传统...

    OSGi实战(文档+源代码)

    在“OSGi实战”这部作品中,作者林昊,一位经验丰富的淘宝架构部架构师,为我们提供了一个深入浅出的学习OSGi的平台,特别是对于初学者来说,这是一个极好的入门资料。这部书分为基础和进阶两部分,旨在帮助读者全面...

    osgi 实战 pdf

    《OSGi实战》一书由BlueDavy撰写,是一份详尽的OSGi入门与实战指南,适合初学者和有经验的开发者深入了解OSGi框架及其应用。以下是对该书籍核心知识点的总结: ### OSGi简介 OSGi(Open Service Gateway Initiative...

    OSGI实战-若干问题.txt

    ### OSGI实战-若干问题解析 #### 一、OSGI环境配置与启动问题 **问题背景:** 根据文档描述,作者在学习OSGI时遇到了一些基础性的问题,特别是关于如何正确配置并运行一个基本的OSGI环境。文档中提到了使用...

    OSGi 入门+进阶+实战

    5. **故障排查**:学习如何使用日志、诊断工具和调试技巧来定位和解决OSGi应用中的问题。 6. **性能优化**:理解OSGi的内存管理和线程模型,对系统进行性能调优,提高运行效率。 通过深入学习和实践,你可以掌握...

    OSGI实战(PDF+源码+问题解决方法)

    首先,`OSGI实战.pdf`提供了对OSGI技术的全面介绍。这本书可能涵盖了以下几个方面的内容: 1. **OSGI基础**:解释OSGI的基本概念,如服务、模块(称为bundle)、生命周期(启动、暂停、停止、更新、删除等状态)...

Global site tag (gtag.js) - Google Analytics