关于 OSGi(Open Service Gateway Initiative) 相关理论知识网上有许多文档,这里就不作介绍了,有兴趣的可以自行查阅(文后附有相关的链接)。
OSGi 容器与 J2EE 容器整合主要有两种方式:1、将 HTTP Server 置于 Equinox 框架中;2、将 Equinox 置于 Servlet 容器中,这里使用第1种方式。
一、环境搭建:
1、预备环境
JDK(本文使用Sun JDK 5)
Eclipse(本文使用版本为 Eclipse3.5.2,这里的eclipse不是作为开发工具,而仅是使用其 plugin)
2、建立如下目录结构:
DEMO
|- configuration
- config.ini
|- [Bundle.jar]
3、从 Eclipse/Plugins 下拷贝如下 jar 至 DEMO 目录下:
javax.servlet_2.5.0.v200806031605.jar
org.apache.commons.logging_1.0.4.v200904062259.jar
org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.jar
org.eclipse.equinox.http.jetty_2.0.0.v20090520-1800.jar
org.eclipse.equinox.http.registry_1.0.200.v20090520-1800.jar
org.eclipse.equinox.http.servlet_1.0.200.v20090520-1800.jar
org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar
org.eclipse.osgi.services_3.2.0.v20090520-1800.jar
org.eclipse.osgi_3.5.2.R35x_v20100126.jar
org.mortbay.jetty.server_6.1.15.v200905151201.jar
org.mortbay.jetty.util_6.1.15.v200905182336.jar
4、config.ini 的内容如下:
osgi.bundles=reference\:file\:org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar@start,reference\:file\:org.eclipse.equinox.common_3.5.1.R35x_v20090807-
1100.jar@start,reference\:file\:org.mortbay.jetty.util_6.1.15.v200905182336.jar@start,reference\:file\:org.mortbay.jetty.server_6.1.15.v200905151201.jar@start,reference\:file\:org.eclipse.equinox.http.registry_1.0.200.v20090520-1800.jar@start,reference\:file\:org.eclipse.equinox.http.jetty_2.0.0.v20090520-1800.jar@start,reference\:file\:org.apache.commons.logging_1.0.4.v200904062259.jar@start,reference\:file\:org.eclipse.osgi.services_3.2.0.v20090520-1800.jar@start,reference\:file\:org.eclipse.equinox.http.servlet_1.0.200.v20090520-1800.jar@start,reference\:file\:javax.servlet_2.5.0.v200806031605.jar@start
osgi.bundles 定义的是OSGi容器启动时,需自启动的 Bundle,其 Bundle 状态为 ACTIVE (如果启动时没有异常)。
5、启动 OSGi
进入命令行,在DEMO目录下键入
java -jar org.eclipse.osgi_3.5.2.R35x_v20100126.jar -console
如能见到 osgi> 则表示容器启动成功。
键入 ss 可查看各 bundle 的状态。
在浏览器中访问 http://localhost/ ,能见到如下页面,则表示 jetty 容器也已成功启动。
如果未成功启动,可键入 start [bundle-id] 重新启动,根据抛出的异常来定位问题。
二、开发 web 应用
这里的 web 应用与J2EE中的不一样的,J2EE中的web应用主要是以 war 形式提供的,而在OSGi环境中,则是以jar提供的,即 bundle,也即 eclipse 中的一个插件(plug-in)。
1、org.osgidemo.web.jar 的目录结构如下:
org.osgidemo.web.jar
|- META-INF
MANIFEST.MF
|- plugin.xml
|- hello.html
2、MANIFEST.MF 内容如下:
Manifest-Version: 1.0
Require-Bundle: org.eclipse.equinox.http.registry
Bundle-ActivationPolicy: lazy
Bundle-Version: 1.0.0.201005232055
Bundle-Name: org.osgidemo.web
Bundle-ManifestVersion: 2
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-SymbolicName: org.osgidemo.web;singleton:=true
Bundle-RequiredExecutionEnvironment: J2SE-1.5
3、plugin.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension id="helloResource" point="org.eclipse.equinox.http.registry.resources">
<resource alias="/hello.html" base-name="/hello.html" />
</extension>
</plugin>
在 plugin.xml 文件中,定义了一个扩展,用来处理对静态资源文件例如图片文件等的请求。
4、hello.html 就是web应用的资源,其内容为:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello OSGi Web</title>
</head>
<body>
<h3>Hello OSGi Web</h3>
</body>
</html>
三、安装 web 应用
将 org.osgidemo.web.jar 拷贝至 DEMO 目录下,在 osgi 命令提示符下,键入
install reference:file:org.osgidemo.web.jar
命令会返回 Bundle id is [id],这里的 id 是 bundle 唯一编号,这时 bundle 的状态为 INSTALLED,再键入:
start [id]
启动该 bundle 。
四、在浏览器中,访问 http://localhost/hello.html,见到如下画面:
则表明 web 应用已经安装成功,并能成功处理http请求。
如要停止应用
stop [bundle-id]
卸载应用
uninstall [bundle-id]
基于此,web 应用的真正热插拨、热部署成为可能。
五、参考文档
http://www.iteye.com/wiki/OSGi
http://www.ibm.com/developerworks/cn/web/0907_osgiweb_liuqing
http://baike.baidu.com/view/362847.htm?fr=ala0_1_1
- 大小: 54.9 KB
- 大小: 46.5 KB
分享到:
相关推荐
本示例以“基于OSGI的Web开发例子”为主题,主要介绍了如何利用Equinox框架在OSGi环境中进行Web应用的开发,通过一个简单的“Hello World”项目来展示其工作原理。 首先,我们需要理解Equinox。Equinox是Eclipse...
6. **开发和部署**: 使用这些jar文件,开发者可以按照博客"OSGi环境下建立Web工程的Hello World"中的步骤,创建并部署OSGI兼容的Web应用。这通常涉及编写bundle的MANIFEST.MF文件来声明导出和导入的包,以及如何配置...
在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端开发。Equinox提供了一个强大的、可扩展的运行时环境,支持动态模块加载和卸载,使得开发者可以灵活地更新和...
Equinox OSGi是IBM公司开发的一个开源OSGi实现,它是Eclipse项目的一部分,用于创建模块化、可扩展且轻量级的应用程序。OSGi(Open Service Gateway Initiative)是一种Java平台的标准,它允许开发者将应用程序分解...
在本系列教程中,作者将逐步介绍如何利用这些工具和框架,解决上述挑战,以及如何在OSGi环境下高效、规范地进行SSH开发。无论是使用Maven配合相关插件,还是采用Plug-in方式,都将详细展开讨论,以帮助开发者更好地...
本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署特性。 #### 二、项目背景及目标 **背景:** OSGi (Open ...
为了开发这个应用,首先需要准备开发环境,包括Eclipse 3.4以及OSGi、Equinox和Spring的相关插件。然后,需要设置目标平台(target platform)为这些插件的集合。应用的模块设计分为服务层和Web层。服务层负责实际的...
- **cxf-dosgi**:这是Apache CXF项目的一个子项目,专门用于支持OSGi环境下Web服务的开发和部署。它提供了将Web服务封装为OSGi包的能力,并支持这些服务的分发。 #### 三、开发流程 1. **环境搭建**:安装Eclipse...
目标平台是开发和运行OSGi应用的基础,需要包含必要的OSGi框架(如Equinox)、Gemini Blueprint和Gemini Web的库,以及可能需要的其他依赖,如Spring框架。 **2.5 创建Web项目** 创建WAB项目包括: 1. 在Eclipse中...
1、自己开发的OSGi Web Console,适用于实现了OSGi规范的Equinox、Felix等开源框架,可在web界面上启动、停止OSGi Framework,启动、停止、装载、卸载bundles。当切换成其他OSGi开源框架时,只需在把lib下面的jar...
- **与 Spring 完美结合**:Spring DM 充分利用了 Spring 的特性,使得开发人员可以在 OSGi 环境下方便地使用 Spring。 - **强大的配置能力**:提供了灵活的配置选项,使得应用可以根据不同环境进行调整。 - **高度...
1. **准备环境**:确保你的开发环境中已经安装了Tomcat服务器和OSGi框架,如Apache Felix或Equinox。 2. **获取桥接工具**:下载并添加Apache Felix WebConsole或Pax Web到你的项目中。 3. **配置桥接工具**:根据...
这部分详细指导了如何在Equinox框架下进行OSGI开发: 1. 做好准备:安装配置开发环境,包括获取Equinox库、设置IDE等。 2. 工具箱:介绍用于创建、管理和调试OSGI Bundle的工具。 3. 开发Bundle:讲解Bundle的生命...
1. **OSGi框架**:如Apache Felix、Equinox(Eclipse项目的一部分),它们提供了模块化的运行时环境,支持服务的发布、查找和绑定,以及对模块的生命周期管理。 2. **Web容器集成**:将OSGi容器集成到Web服务器中,...
标题中的"OSGi Gemini Blueprint"是指一种在OSGi环境中管理服务和组件的框架,它基于OSGi企业服务规范。Gemini Blueprint是由SpringSource(现在是VMware的一部分)开发的,目的是提供一个简单的方式来声明式地定义...
它允许开发者使用熟悉的Spring配置来定义服务和引用,简化了OSGi环境下的应用开发。 2. 自动化服务注册和发现:Spring DM会自动将Spring Bean注册为OSGi服务,并自动发现其他服务进行注入,降低了服务集成的复杂度。...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统...通过这个OSGi-WebService-axis教程,你将深入理解如何在OSGi框架下开发和部署Web服务,同时享受到模块化带来的好处,提高软件的可维护性和可扩展性。
1. ** Felix或Equinox插件**:最常见的将OSGI引入Tomcat的方法是使用Felix或Equinox这两款流行的OSGI实现作为插件。这些插件提供了一个运行时环境,使得Tomcat可以加载和管理OSGI Bundle。 2. **类加载器调整**:...