- 浏览: 1123487 次
- 性别:
- 来自: 火星郊区
博客专栏
-
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 1515OSGi服务纲要规范中定义了服务于OSGi平台的通用日志服 ... -
Maven 3 Felix 4 Eclipse 的搭建与部署(部分转载自别人文章)
2012-10-18 10:24 19914.1.开发环境搭建 4.2开发工具 Maven 3 F ... -
【绝对路径】OSGi环境中获取Plugin/Bundle中文件资源的绝对路径
2012-10-08 10:53 2374摘要:在进行Eclipse RCP开发的过程中,需要使用一 ... -
OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序
2012-09-21 17:46 1376随着OSGi/Equinox逐渐成为Java EE服务端的基础 ... -
OSGI典型的应用案例
2012-09-20 11:26 1570OSGI典型的应用案例主要有两个:分别是Eclipse和BMW ... -
OSGi特点
2012-09-20 11:26 12091、JRE版本无关性。虽然Java一直被人们认为是“Write ... -
OSGI与JMX 的关系
2012-09-19 17:09 1018不过重点是: JMX 本来设计的用途就只为了管理,我们不 ... -
在equinox环境开发web应用的"利器" -- registerResources()方法 详解
2012-09-19 17:07 1192registerResources()方法详解 1、简介 ... -
在equinox环境开发web应用的"利器" -- 序
2012-09-19 17:05 1325在equinox环境中开发web应用必须要借助一些工具包提供的 ... -
equinox环境下web应用资源的部署
2012-09-19 17:04 1266osgi的equinox实现环境下,web服务器和web应用都 ... -
OSGi产生的背景--在繁荣的混乱之中走出困惑
2012-09-19 16:58 1118软件的复杂性正在以惊 ... -
将web容器置于OSGi框架下进行web应用的开发
2012-09-16 14:26 3486将web容器置于OSGi框架下,其实就是将web容器做成OSG ... -
在Eclipse中开发OSGi Bundle
2012-09-16 14:26 1291Eclipse为开发OSGI Bundle提供了良好的支持,它 ... -
【第一代服务注册形式】 - 将一个Bundle注册为服务
2012-09-14 10:09 11081、创建业务接口类及其实现类 Java代码 ... -
Declarative Services规范简介及应用
2012-09-14 10:08 1372Declarative Services 是一 ... -
用FileInstall管理Bundle的动态安装、启动、卸载
2012-09-14 10:07 12971、文件目录如下: F:\study_osgi ... -
服务工厂 - Bundle消费者返回不同的服务对象
2012-09-14 10:03 1179一般情况下,服务对象在注册后,任何其它的Bundle在请求 ... -
服务跟踪(ServiceTracker)
2012-09-14 09:58 1127当多个Bundle使用同一 ... -
OSGi容器中Bundle之间Synchronous Communication
2012-09-11 17:07 1499OSGi Core定义了一个服务层,提供了一个Bundl ... -
OSGI 中嵌入 Http 服务器的运行环境
2012-07-31 13:44 3016Eclipse 4.2 OSGI 依赖的Bundle: or ...
相关推荐
java 基于OSGi和Spring开发Web应用
包括OSGI的相关书籍及网页: OSGi R4服务平台核心规范中译本 Spring OSGI入门 modular java OSGI原理与最佳实践 ...基于 OSGi 和 Spring 开发 Web 应用 基于 OSGi 的面向服务的组件编程 探索 OSGi 框架的组件运行机制
是一本适合新接触OSGI开发学习的一本很好的书,本书介绍了Equinox, Spring-DM和Felix这三个常用的OSGi容器的使用、开发、以及WebApplication的开发部署;介绍了OSGi的规范和Core Framework和Layer。包含书中的用例源...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
DAL WEB API提供对OSGi设备抽象层中可用的设备,功能和事件的REST和WebSocket访问。 REST API用于提供对设备和功能服务的访问。 函数操作调用和FunctionData编辑是使用Java Reflection实现的。 WebSocket API提供了...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java 应用的开发人员不需要直接同类加载器进行交互。Java 虚拟机默认的行为就已经足够满足大多数情况的需求了。不过如果遇到了需要与类加载器进行...
应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制 自动化代码检查 sonar 代码规范 阿里巴巴...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...