- 浏览: 1007768 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与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来扫描发现相应的服务,并加于管理的。
发表评论
-
Eclipse在创建Plug-in项目时的Target platform选项的说明(转)
2010-05-27 15:05 2043Target PlatForm 插件的运行平台. Eclip ... -
OSGI的认识(转)
2010-05-27 10:43 1402借助网上的一些资料,对OSGi有了一些了解,将到目前的一些粗浅 ... -
BundleContext的作用
2010-05-24 19:39 5046通过实现BundleActivator接口和start和sto ... -
你好,OSGi(第三部分):OSGi依赖性管理:Bundle访问域(转)
2010-05-21 08:51 1357本文是《你好,OSGi》系列的第三部分。之前介绍过OS ... -
MANIFEST.MF 中的 bundle 元数据信息描述(转)
2010-05-21 08:38 3234属性 属性描述 Bundle-Activator Bundle ... -
大牛OSGI博客
2010-05-18 09:36 1629http://www.blogjava.net/Phranco ... -
Spring与OSGi的整合(二)(转)
2010-05-17 20:24 61763. 开发一组计算器bundle实例 本节讲到的 ... -
Spring与OSGi的整合(一)(转)
2010-05-17 20:22 23101. 开发环境的准备 现在的eclipse都已经包含了Equ ... -
亲历基本OSGI实例,进入另番思维领域(转)----包括打包发布为可执行文件
2010-05-17 14:52 2685软件的模块越来越插件化发展了,连硬件都处处热插拔,软件更当如此 ... -
OSGi Embedded HttpService(转)
2010-05-14 15:47 26991 概述 Equinox 提 ... -
你好,OSGi (第一部分): Bundles入门(续,翻译)(转)
2010-05-10 17:13 24994. 依赖性管理 OSGi允 ... -
你好,OSGi (第一部分): Bundles入门(翻译)(转)
2010-05-10 17:06 2326新建、执行和管理OSGi ... -
OSGI学习笔记
2010-05-10 16:40 1616Equinox OSGi 主要的控制台命令表 类别 ...
相关推荐
《 OSGi实战》是学习OSGi的全面指导,利用与架构和开发人员相关的示例清楚地讲解OSGi概念,同时探讨了很多实践场景和技术,阐述了开发人员有多需要OSGi,怎么将OSGi嵌入其他容器中,将遗留系统移入OSGi的最佳实践,...
### OSGI实战知识点概述 #### 一、序言与背景介绍 - **背景与动机**:作者在工作之初便对插件体系结构产生了浓厚兴趣,尤其关注ant、maven等构建工具及其插件系统。这表明作者对于软件模块化、可扩展性的重视。 - ...
在OSGI实战教程中,首先需要了解OSGI(Open Services Gateway Initiative)是一个由众多IT公司共同制定的Java模块化标准规范,旨在实现软件组件的热插拔和服务动态管理。OSGI技术允许应用程序通过动态地安装、启动、...
为了弥补OSGi规范在应用指导方面的不足,四位活跃在OSGi开发第一线的技术专家联手打造了《OSGi实战》。《OSGi实战》面向OSGi规范的使用者,系统、全面、深入地阐述OSGi的重要特性及其使用方法。《OSGi实战》还介绍了...
资源名称:OSGi实战内容简介:为了弥补OSGi规范在应用指导方面的不足,四位活跃在OSGi开发第一线的技术专家联手打造了《OSGi实战》。《OSGi实战》面向OSGi规范的使用者,系统、全面、深入地阐述OSGi的重要特性及其...
林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合对Java模块化系统感兴趣的初学者和有经验的开发者。 在《OSGI实战》中,作者林昊可能会详细讲解以下几个核心知识点: 1. **OSGI基础*...
本篇将深入探讨OSGI实战和进阶的相关知识点。 一、OSGI基本概念 1. 模块系统:OSGI的核心是模块化,每个模块称为Bundle,类似于Java中的JAR文件,但包含额外的元数据描述其依赖关系。 2. 服务:OSGI强调服务导向,...
OSGI实战这本书是面向对OSGI技术感兴趣的Java开发者的入门资料,旨在提供全面的OSGI知识体系,帮助读者理解和应用OSGI框架。 在OSGI中,每个bundle都是一个独立的运行单元,有自己的类加载器,可以加载自己的类和...
本资源《OSGI实战及源码》主要面向Java开发者,提供了一种深入理解并实践OSGI技术的途径。通过实际操作和源码分析,读者可以掌握如何构建、部署和管理OSGI模块化的应用。 OSGI实战部分可能会涵盖以下关键知识点: ...
**OSGI实战中文版** OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的、可热插拔的模块,称为服务。这些服务可以互相发现并交互,提供了灵活的组件化开发环境。...
在"OSGI实战"中,你将学习到如何使用OSGI来开发模块化的Java应用。实战部分通常会涵盖以下几个关键知识点: 1. **模块系统**:OSGI的基础是模块化,每个模块称为一个Bundle,它们有自己的类路径和生命周期。理解...
《OSGI实战》这本书主要涵盖了OSGI(Open Service Gateway Initiative)技术在实际开发中的应用与实践,它是一种Java模块化系统,旨在解决大型软件系统的复杂性问题。以下将详细阐述OSGI的核心概念、优势以及其在...
《OSGI实战》侧重于实际应用,可能涵盖以下内容: 1. **开发环境搭建**:如何使用Eclipse和Equinox等工具创建和管理OSGI项目。 2. **案例分析**:通过具体的应用场景,如构建可插拔的Web服务器、数据库连接池等,...
在“OSGI实战”文档中,作者深入浅出地介绍了如何在实际开发环境中应用OSGI技术。 一. 序 这部分可能涵盖了OSGI的基本概念和历史背景,解释了为什么在Java开发中引入OSGI模块系统的重要性,以及它如何解决了传统...
在“OSGi实战”这部作品中,作者林昊,一位经验丰富的淘宝架构部架构师,为我们提供了一个深入浅出的学习OSGi的平台,特别是对于初学者来说,这是一个极好的入门资料。这部书分为基础和进阶两部分,旨在帮助读者全面...
《OSGi实战》一书由BlueDavy撰写,是一份详尽的OSGi入门与实战指南,适合初学者和有经验的开发者深入了解OSGi框架及其应用。以下是对该书籍核心知识点的总结: ### OSGi简介 OSGi(Open Service Gateway Initiative...
### OSGI实战-若干问题解析 #### 一、OSGI环境配置与启动问题 **问题背景:** 根据文档描述,作者在学习OSGI时遇到了一些基础性的问题,特别是关于如何正确配置并运行一个基本的OSGI环境。文档中提到了使用...
5. **故障排查**:学习如何使用日志、诊断工具和调试技巧来定位和解决OSGi应用中的问题。 6. **性能优化**:理解OSGi的内存管理和线程模型,对系统进行性能调优,提高运行效率。 通过深入学习和实践,你可以掌握...
首先,`OSGI实战.pdf`提供了对OSGI技术的全面介绍。这本书可能涵盖了以下几个方面的内容: 1. **OSGI基础**:解释OSGI的基本概念,如服务、模块(称为bundle)、生命周期(启动、暂停、停止、更新、删除等状态)...