- 浏览: 1146818 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
随着 Java SE 对模块化功能原生支持的一再推迟(据最新的消息, Jigsaw项目—— Java SE中的 标准模块系统 —— 的开发工作相对滞后,已经延期到了 Java 9中 ,而 Java 9 到 2015 年才有希望发布), OSGi 作为事实标准的 Java 模块化实现得到了长足的发展,尤其是随着云计算和分布式技术的兴起, OSGi 这种模块化、动态部署的核心功能将会受到越来越多的重视。
目前 OSGi 规范的主流实现框架是 Eclipse Equinox 以及 Apache Felix ,其实际的应用场景也早就从起初的嵌入式设备扩展到桌面应用甚至 Java 企业级开发领域。最为大家所熟知的 OSGi 应用是 Eclipse IDE ,其实像 Sun GlassFish 、 IBM WebSphere Application Server 、 JBoss Application Server 以及 Apache 的大量开源项目如 Camel 、 Sling 、 ServiceMix 、 Kafaf 等都使用了 OSGi 技术,随着其应用的日益广泛,技术的可用性和成熟度经受了充分的考验,实践证明 OSGi 是一项可靠的技术,完全可以应用于企业级应用的开发。尤其值得一提的是,随着 OSGi Core Release 5 和 OSGi Enterprise Release 5 版本的发布,预计 OSGi 技术将会受到更多的关注,国内外已经有将 OSGi 应用于云计算和分布式计算的案例。
本文将选取 OSGi 应用于传统 Java Web 开发的场景,介绍借助于 OSGi 技术,怎样实现将 web 应用拆分成满足 OSGi 规范的 bundle ,实现组件的动态部署。目前,为了实现在 bundle 中支持 JSP 、 Servlet 等 Java Web 开发技术和规范,有两种主要的开发部署方式,本文都将进行介绍,但是这两种方案在实现上与传统的 Java Web 应用开发模式有较大的不同,且对 JEE 规范的支持尚不完整 。
按照Eclipse Equinox的习惯,会将bundle称为插件,在后文中会根据具体的应用场景穿插使用这两个名词,但其本质是相同的。
<!--[if !supportLists]-->一、 将Web容器作为bundle置于 Equinox中进行开发
在这种模式下,我们需要将支持 JEE 规范的容器也以 bundle 形式发布到 OSGi 容器中,而包含 JSP 、 Servlet 的 bundle 将会使用该容器接受对请求的访问,这种方式的好处在于 OSGi 容器管理整个运行环境,是个纯粹的可热插拔运行环境,其缺点在于需要 Web 容器支持以 bundel 的形式进行发布,对运行环境有一定的限制,目前支持该要求的 Web 容器有 Tomcat 和 Jetty ,但是主流的企业级应用服务器尚不支持这种部署方式。
鉴于 Eclipse 开发环境中已经包含了 Jetty 服务器,所以我们将会使用该服务器进行 Web 应用的开发。
首先我们需要使用 Eclipse 的工程向导创建一个插件工程。根据工程的需要,我们不生成启动类( activator ),不使用任何模版,插件过程如下:
新建一个插件工程:
输入工程的基本信息:
此处我们不使用任何模版,因为我们不会用到
Eclipse
的
UI
功能:
新建完成的项目结构如下所示:
为了测试进行
Web
开发,我们新建目录结构
/WebRoot/jsp
(该目录名称是任意的,只需在后续定义扩展点时进行匹配即可)并在该目录下创建一个
JSP
文件,此时的工程结构如下:
JSP
的代码如下:
- < %@ page language = "java" contentType = "text/html; charset=ISO-8859-1"
- pageEncoding = "ISO-8859-1" % >
- <!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 > Insert title here </ title >
- </ head >
- < body >
- Hello,world!
- </ body >
- </ html >
为了使用 JSP 和 Servlet ,我们需要使用一个扩展点,该扩展的名称为 org.eclipse.equinox.http.registry.servlets ,我们需要使用该扩展点进行 JSP 目录和访问地址的匹配,在我们这个样例中我们匹配了 /WebRoot/jsp 目录,其访问地址的前缀将会是 /jsp/ :
除此以外,我们还需要添加对 org.eclipse.equinox.jsp.jasper.registry 插件的依赖,以实现 JSP 的编译功能。
最后,我们还需要在运行时配置里将 testweb 和 Jetty 所依赖的插件全部选中,如下:
然后点击“
Run
”按钮,此时就会启动
OSGi
运行环境,我们可以在控制台通过使用“
ss
”命令来查看运行插件的状态情况:
此时,我们可以在浏览器中输入 http://localhost/jsp/index.jsp ( Jetty 的默认端口是 80 ,可进行配置),就会看到我们所编写的 JSP 的代码了:
要实现访问
Servlet
和静态资源(
CSS
、图片等),也需要类似的配置,下图是一个包含静态资源和
Servlet
的配置样例:
- <? xml version = "1.0" encoding = "UTF-8" ?>
- <? eclipse version = "3.4" ?>
- < plugin >
- < extension
- point = "org.eclipse.equinox.http.registry.servlets" >
- < servlet
- alias = "/servlet/myfirstservlet"
- class = "testjsp.LoginServlet"
- load-on-startup = "true" >
- </ servlet >
- < servlet
- alias = "/jsp/*.jsp"
- class = "org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/WebRoot/jsp/" >
- </ servlet >
- </ extension >
- < extension
- point = "org.eclipse.equinox.http.registry.resources" >
- < resource
- alias = "/web"
- base-name = "/WebRoot/images" />
- </ extension >
- </ plugin >
二、 将 Equinox 置于 web 容器中进行开发
以上的开发模式对于习惯于传统 JEE 开发模式的开发人员在接受上有一定的难度,直接使用 Equinox 作为运行环境在解决集群部署方面也有一定的难度,除此以外,主流的应用服务器并不提供 bundle 形式的 jar 以运行在 OSGi 容器中。所以,开发人员摸索出了另一种开发和部署模式。
在这种模式中,会将 Equinox 和我们开发的插件都打成一个标准的 war 包的格式,因此可以运行在任意支持 JEE 的容器中。 Equinox 的生命周期是通过 Servlet 来进行控制。这种模式被称为桥接模式。 Equinox 官方提供了该模式的实现,后来的社区贡献者基于此进行了功能的完善。
将下载后的代码导入到 Eclipse 中,工程目录如下所示:
从该目录可以看出,这是一个典型
JEE
工程,可以运行在任意的支持规范的
Web
容器或应用服务器中,查看
web.xml
,我们可以看到这样的配置:
- < servlet id = "bridge" >
- < servlet-name > equinoxbridgeservlet </ servlet-name >
- < display-name > Equinox Bridge Servlet </ display-name >
- < description > Equinox Bridge Servlet </ description >
- < servlet-class > org.eclipse.equinox.servletbridge.BridgeServlet </ servlet-class >
- < init-param >
- < param-name > commandline </ param-name >
- < param-value > -console </ param-value >
- </ init-param >
- < init-param >
- < param-name > enableFrameworkControls </ param-name >
- < param-value > true </ param-value >
- </ init-param >
- < init-param >
- < param-name > extendedFrameworkExports </ param-name >
- < param-value > </ param-value >
- </ init-param >
- < load-on-startup > 1 </ load-on-startup >
- </ servlet >
- < servlet-mapping >
- < servlet-name > equinoxbridgeservlet </ servlet-name >
- < url-pattern > /* </ url-pattern >
- </ servlet-mapping >
- < servlet-mapping >
- < servlet-name > equinoxbridgeservlet </ servlet-name >
- < url-pattern > *.jsp </ url-pattern >
- </ servlet-mapping >
我们可以看到这个 Servlet 拦截了所有的请求,由该 Servlet 代理所有的请求。
在部署阶段,可以把插件打成 jar 包,放到 /WEB-INF/eclipse/plugins 目录下即可。如将我们上例中的 testweb 导出为 jar 包后,置于指定目录下。然后在 Tomcat 中运行该应用。访问 http://localhost:8080/bridge/jsp/index.jsp 就可以看到我们编写的 JSP 页面了。
使用以上的模式进行开发,对原有的开发和部署模式冲击较小而且支持所有的应用服务器。
参考资料:
http://www.ibm.com/developerworks/cn/web/0907_osgiweb_liuqing/
发表评论
-
关于Felix Log Service
2012-12-07 16:44 1565OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 20274.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2483摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1419随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGI典型的应用案例
2012-09-20 11:26 1630OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12461、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1055不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1226registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1358在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1304osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1163软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3534将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1328Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11531、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1419Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 13281、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1206一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1155当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1556OSGi Core定义了一个服务层,提供了一个Bundl ... -
OSGI 中嵌入 Http 服务器的运行环境
2012-07-31 13:44 3051Eclipse 4.2 OSGI 依赖的Bundle: or ...
相关推荐
在基于 OSGi 和 Spring 的 Web 应用开发中,我们可以使用 Spring-DM 来实现模块化部署和管理。Spring-DM 是 Spring 开发组织在 2008 年发布的,将 OSGi 和 Spring 结合的第一个版本。dm Server 是一个完全模块化部署...
Spring-DM,即Spring Dynamic Modules,是Spring官方在2008年推出的项目,旨在将Spring框架与OSGi模块化平台相结合,为Java开发者提供了一套全面的工具和API,以支持在OSGi环境中开发、部署和管理Spring应用程序。...
在基于OSGi和Spring开发Web应用中,OSGi(Open Services Gateway Initiative)是一个开放标准,用于创建模块化Java应用程序。它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle都包含自己的类路径、...
为了在Eclipse中开发OSGi Web应用,需要安装相应的插件,如Gemini Web的支持,以便创建和管理WAB项目。 **2.4 设置目标平台** 目标平台是开发和运行OSGi应用的基础,需要包含必要的OSGi框架(如Equinox)、Gemini ...
在基于OSGi和Spring的Web应用开发中,通常会将业务逻辑、服务接口和Web层分别封装在不同的模块中。根据压缩包子文件的文件名称,我们可以推测这些文件可能代表了这样的模块结构: 1. `...
Web示例工程是使用OSGi技术构建的一个具体应用,通常包括了如何在OSGi环境中部署和运行Web应用程序的实例。 在OSGi框架中,Equinox是Eclipse基金会提供的一个实现,它是OSGi规范的主要实现之一,广泛应用于服务器端...
"html5演示"暗示有HTML5技术的应用实例,HTML5是现代Web开发的标准,提供了更好的多媒体支持、离线存储和更强大的表单控件。"freemarker运用"则提到了Freemarker,这是一款开源的模板引擎,常用于生成动态HTML页面,...
SSM(Spring、SpringMVC、MyBatis)框架是Java Web开发中常见的技术栈,而OSGi(Open Service Gateway Initiative)则是一种模块化系统,主要用于解决Java应用程序的动态性、可扩展性和版本管理问题。将SSM框架与...
在Web容器中部署OSGi应用,特别是像Tomcat这样的流行Servlet容器,可以提高应用的灵活性、可维护性和可扩展性。本文将详细介绍如何使用桥接技术(如Apache Felix的WebConsole或Pax Web)在Tomcat中部署OSGi程序。 ...
在OSGI中集成Web服务器配置,是为了能够在模块化的环境中运行Web应用。这个压缩包"OSGI中包含web服务器配置需要的jar.zip"很可能包含了运行OSGI环境下的Web工程所需的特定jar文件。这些jar文件可能包括了OSGI容器...
本示例以“基于OSGI的Web开发例子”为主题,主要介绍了如何利用Equinox框架在OSGi环境中进行Web应用的开发,通过一个简单的“Hello World”项目来展示其工作原理。 首先,我们需要理解Equinox。Equinox是Eclipse...
标题中的“基于virgo环境的OSGI+Maven的web开发代码下载”表明这是一个使用OSGi(模块化Java系统)和Maven构建的Web应用程序项目,运行在Virgo服务器上。Virgo是SpringSource推出的一个OSGi应用服务器,它支持Spring...
### 开发一个简单的 OSGi Web 应用实例 #### 一、项目概述 本教程旨在通过一个具体的示例来介绍如何使用OSGi框架开发一个简单的Web应用。这个示例应用能够计算两个数字的和或乘积,并展示了OSGi bundle的动态部署...
**基于OSGi的Web应用开发**是现代软件开发中的一种技术实践,它允许开发者构建模块化、可扩展和可维护的Web应用。OSGi(Open Service Gateway Initiative)是一种开放的标准,提供了一种服务导向的、模块化的Java...