`
hz_chenwenbiao
  • 浏览: 1014030 次
  • 性别: 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实战.docx

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

    OSGi 入门+进阶+实战

    5. **故障排查**:学习如何使用日志、诊断工具和调试技巧来定位和解决OSGi应用中的问题。 6. **性能优化**:理解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实战源码"这一描述进一步强调了这是一份可以动手实践的源代码,它以一个具体的购物车案例为背景,展示了如何在项目中运用OSGi技术。这个购物车实例旨在帮助开发者理解OSGi的灵活性、模块化特性以及其在可扩展性...

    OSGI 实战教程

    **OSGI实战教程** OSGI(Open Service Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它通过提供一个服务导向的架构,使得组件可以独立地安装、升级、激活和停用,从而解决了Java应用程序的...

    OSGI进阶实战教程

    OSGi学习不错的材料 OSGi学习不错的材料 OSGi学习不错的材料 OSGi学习不错的材料

    读书笔记:OSGI 实战 整合Maven 测试代码 .zip

    读书笔记:OSGI 实战 整合Maven 测试代码

    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实战.pdf可能提供了实际案例,帮助读者了解如何将OSGi应用于实际项目。 - **介绍性材料**:Introduce.OSGi.ppt和OSGi.in.action.ppt可能是幻灯片形式的教程,涵盖了基础概念和用法。 通过...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    4. **案例研究**:提供真实世界中的OSGi应用案例,帮助读者理解OSGi在实际问题中的解决方案。 5. **社区与资源**:介绍OSGi社区、相关资源和学习路径,鼓励读者参与并持续学习。 通过这两本书,读者不仅可以了解...

    OSGi 入门 学习 实战 进阶

    《OSGi实战》这本书可能涵盖了如何在实际项目中应用OSGi技术,包括Bundle的创建、服务的注册和发现、依赖管理等方面。通过这本书,读者可以了解到如何将复杂的程序分解为小型、可重用的模块,以及如何利用OSGi的生命...

    OSGI原理及实战

    ### OSGI原理及实战知识点概述 #### 一、OSGI简介 - **定义**: OSGI(Open Service Gateway Initiative)是一种动态模块化系统标准,主要用于构建Java平台上的复杂应用程序和服务网关。它通过提供一个模块化框架,...

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本...其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种Java应用;最后对OSGi知 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    OSGi理论与实战

    标题和描述均聚焦于“OSGi理论与实战”,这一主题涉及了OSGi规范R4.1的核心概念、实现机制,以及如何基于Equinox框架开发和扩展OSGi-Based应用,包括分布式OSGi的深入探讨。以下将对这些知识点进行详细解析。 ### ...

    OSGI 开发文档中文的

    9. **实战应用**:"OSGI实战.pdf"可能包含实际项目案例,演示如何在真实场景中应用OSGI解决特定问题。 通过阅读这份文档和解压后的"dist.rar"和"code.rar"文件,你不仅可以深入了解OSGI技术,还能获得实践经验,...

    OSGI 入门资料PDF

    学习OSGI实战,你需要理解bundle的打包、部署和配置,以及如何使用OSGI命令行工具进行管理。 3. OSGI进阶: 进阶学习OSGI涉及到更深入的概念,如动态性、服务和事件模型。动态性意味着bundle可以在运行时安装、...

    OSGi原理与最佳实践

    其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种Java应用;最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍...

    Enterprise OSGI in action

    《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...

Global site tag (gtag.js) - Google Analytics