`
lengyun3566
  • 浏览: 454691 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
D59180b9-02f1-3380-840c-ea34da46143c
《Spring Secur...
浏览量:384938
社区版块
存档分类
最新评论

OSGi技术在Java Web开发中的应用

    博客分类:
  • OSGi
 
阅读更多

 

随着Java SE对模块化功能原生支持的一再推迟(据最新的消息,Jigsaw项目——Java SE中的标准模块系统——的开发工作相对滞后,已经延期到了Java 9,而Java 92015年才有希望发布),OSGi作为事实标准的Java模块化实现得到了长足的发展,尤其是随着云计算和分布式技术的兴起,OSGi这种模块化、动态部署的核心功能将会受到越来越多的重视。

目前OSGi规范的主流实现框架是Eclipse Equinox以及Apache Felix,其实际的应用场景也早就从起初的嵌入式设备扩展到桌面应用甚至Java企业级开发领域。最为大家所熟知的OSGi应用是Eclipse IDE,其实像Sun GlassFishIBM WebSphere Application ServerJBoss Application Server以及Apache的大量开源项目如CamelSlingServiceMixKafaf等都使用了OSGi技术,随着其应用的日益广泛,技术的可用性和成熟度经受了充分的考验,实践证明OSGi是一项可靠的技术,完全可以应用于企业级应用的开发。尤其值得一提的是,随着OSGi Core Release 5OSGi Enterprise Release 5版本的发布,预计OSGi技术将会受到更多的关注,国内外已经有将OSGi应用于云计算和分布式计算的案例。

本文将选取OSGi应用于传统Java Web开发的场景,介绍借助于OSGi技术,怎样实现将web应用拆分成满足OSGi规范的bundle,实现组件的动态部署。目前,为了实现在bundle中支持JSPServletJava Web开发技术和规范,有两种主要的开发部署方式,本文都将进行介绍,但是这两种方案在实现上与传统的Java Web应用开发模式有较大的不同,且对JEE规范的支持尚不完整

 

按照Eclipse Equinox的习惯,会将bundle称为插件,在后文中会根据具体的应用场景穿插使用这两个名词,但其本质是相同的。 

 

<!--[if !supportLists]-->一、将Web容器作为bundle置于 Equinox中进行开发 

在这种模式下,我们需要将支持JEE规范的容器也以bundle形式发布到OSGi容器中,而包含JSPServletbundle将会使用该容器接受对请求的访问,这种方式的好处在于OSGi容器管理整个运行环境,是个纯粹的可热插拔运行环境,其缺点在于需要Web容器支持以bundel的形式进行发布,对运行环境有一定的限制,目前支持该要求的Web容器有TomcatJetty,但是主流的企业级应用服务器尚不支持这种部署方式。

鉴于Eclipse开发环境中已经包含了Jetty服务器,所以我们将会使用该服务器进行Web应用的开发。

首先我们需要使用Eclipse的工程向导创建一个插件工程。根据工程的需要,我们不生成启动类(activator),不使用任何模版,插件过程如下:

新建一个插件工程:



 输入工程的基本信息:



 此处我们不使用任何模版,因为我们不会用到EclipseUI功能:



 新建完成的项目结构如下所示:



 为了测试进行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> 

 

为了使用JSPServlet,我们需要使用一个扩展点,该扩展的名称为org.eclipse.equinox.http.registry.servlets,我们需要使用该扩展点进行JSP目录和访问地址的匹配,在我们这个样例中我们匹配了/WebRoot/jsp目录,其访问地址的前缀将会是/jsp/


 除此以外,我们还需要添加对org.eclipse.equinox.jsp.jasper.registry插件的依赖,以实现JSP的编译功能。


 最后,我们还需要在运行时配置里将testwebJetty所依赖的插件全部选中,如下:

 



 然后点击“Run”按钮,此时就会启动OSGi运行环境,我们可以在控制台通过使用“ss”命令来查看运行插件的状态情况:


 

此时,我们可以在浏览器中输入http://localhost/jsp/index.jspJetty的默认端口是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/

 

 

  • 大小: 44.8 KB
  • 大小: 56.4 KB
  • 大小: 66.1 KB
  • 大小: 5.2 KB
  • 大小: 6.4 KB
  • 大小: 18.9 KB
  • 大小: 11.2 KB
  • 大小: 148.4 KB
  • 大小: 37.6 KB
  • 大小: 21.7 KB
  • 大小: 10.6 KB
分享到:
评论

相关推荐

    基于人工势场法的动态路径规划算法与曲线平滑处理-自定义地图、起点、目标点与障碍物,可与A*和RRT融合应对动态障碍物(仅供学习参考使用),基于人工势场法的 动态路径规划+曲线平滑处理 路径规划算法

    基于人工势场法的动态路径规划算法与曲线平滑处理——自定义地图、起点、目标点与障碍物,可与A*和RRT融合应对动态障碍物(仅供学习参考使用),基于人工势场法的 动态路径规划+曲线平滑处理 路径规划算法 地图好修改 自己研究编写的Matlab路径规划 可自行设置起始点,目标点,障碍物,自由更地图。 ——————————————————— 可以和A*和RRT融合 动态障碍物 预先声明:该程序为版权所述,仅供学习参考使用。 ,基于人工势场法的动态路径规划; 曲线平滑处理; 路径规划算法; 地图可修改; 自行设置起点与目标点; 障碍物设置; 与A*和RRT融合; 动态障碍物处理。,基于人工势场法的动态路径规划与曲线平滑处理系统——可自定义地图与障碍物

    11 生产制造部门KPI指标(结合BSC).doc

    11 生产制造部门KPI指标(结合BSC)

    基于Python Flask框架的简单任务管理系统源码解析

    内容概要:本文档详细介绍了一款轻量级任务管理系统的构建方法,采用了Python语言及其流行Web框架Flask来搭建应用程序。从初始化开发环境入手到部署基本的CRUD操作接口,并结合前端页面实现了简易UI,使得用户能够轻松地完成日常任务跟踪的需求。具体功能涵盖新任务添加、已有记录查询、更新状态以及删除条目四个核心部分。所有交互行为都由一组API端点驱动,通过访问指定URL即可执行相应的操作逻辑。此外,在数据持久化层面选择使用SQLite作为存储引擎,并提供了完整的建模语句以确保程序顺利运行。最后,还提及未来拓展方向——加入用户权限校验机制、增强安全检查以及优化外观风格等方面的改进措施。 适合人群:熟悉Linux命令行操作并对Web编程有一定了解的技术爱好者;打算深入理解全栈开发流程或者正在寻找入门级别练手机会的朋友。 使用场景及目标:旨在为开发者传授实际动手编写小型互联网产品的技巧,尤其适用于个人作业管理或者是小团队协作场景下的待办事项追踪工具开发练习。通过亲手搭建这样一个完整但不复杂的系统,可以帮助学习者加深对于前后端协同工作流程的理解,积累宝贵的实践经验。 其他说明:虽然当前实例仅涉及较为基础的功能模块,但在掌握了这套架构的基础上,读者完全可以依据自身业务特点灵活调整功能特性,满足更多个性化定制化需求。对于初学者来说,这是一个非常好的切入点,不仅有助于掌握Flask的基础用法和技术生态,还能培养解决具体问题的能力。

    2025义务教育新课程标准生物(2022年版)必考试题含答案.docx

    2025义务教育新课程标准生物(2022年版)必考试题含答案.docx

    基于java+ssm+vue+mysql的线上书籍查阅系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

    基于随机森林算法RF的多输入单输出数据回归预测-含详细注释的代码与性能评估指标(决定系数R2、平均绝对误差MAE、平均相对误差MBE),基于随机森林算法RF的数据回归预测 多输入单输出 代码含详细

    基于随机森林算法RF的多输入单输出数据回归预测——含详细注释的代码与性能评估指标(决定系数R2、平均绝对误差MAE、平均相对误差MBE),基于随机森林算法RF的数据回归预测 多输入单输出 代码含详细注释,不负责 数据存入Excel,替方便,指标计算有决定系数R2,平均绝对误差MAE,平均相对误差MBE ,基于随机森林算法RF的数据回归预测; 多输入单输出; 详细注释; 存入Excel数据; 指标计算包括R2, MAE, MBE。,"基于随机森林算法的Excel数据回归预测:多输入单输出模型,含注释与误差指标"

    【电磁】基于matlab一维大地电磁正演【含Matlab源码 11058期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    电商团队绩效考核管理制度.doc

    电商团队绩效考核管理制度

    酒店前厅客房主管晋升考核表.xlsx

    酒店前厅客房主管晋升考核表

    Python源码实例07如何生成高考填报志愿时的姓名区位码.zip

    Python源码实例07如何生成高考填报志愿时的姓名区位码.zip

    基于FPGA的QPSK调制解调技术实现:支持多种调制解调和信号处理方式解析,QPSK调制解调 FPGA 实现 verilog 语言 同样支持 FSM,MSK,DBPSK,DQPSK,8PSK,16QA

    基于FPGA的QPSK调制解调技术实现:支持多种调制解调和信号处理方式解析,QPSK调制解调 FPGA 实现 verilog 语言 同样支持 FSM,MSK,DBPSK,DQPSK,8PSK,16QAM等信号调制解调FPGA开发 目前只支持用 vivado,modelsim实现,quartus 目前还没有做 调制分为串并转,差分编码,上采样(插值),成形滤波,载波相乘等 解调分为数字正交下变频,低通滤波,符号同步,载波同步,相差调整,硬判决,差分解码,并串转等 调制解码误码率为 0(无噪声条件下) ,核心关键词:QPSK调制解调; FPGA; Verilog; FSM; MSK; DBPSK; DQPSK; 8PSK; 16QAM; 串并转换; 差分编码; 上采样; 成形滤波; 载波相乘; 数字正交下变频; 低通滤波; 符号同步; 载波同步; 相差调整; 硬判决; 误码率。,"基于FPGA的QPSK及多信号调制解调器实现,支持多种格式用Verilog编程"

    XX公司绩效考核责任书.doc

    XX公司绩效考核责任书

    Web前端开发+HTML5+四川旅游+宣传展示页面模板

    四川特色旅游宣传网页模板(含完整源码) 【项目介绍】 一个精心设计的四川旅游宣传网页,完美展现巴蜀文化特色。项目采用原生HTML+CSS+JavaScript开发,代码结构清晰,注释详细,适合学习和二次开发。 【功能特点】 精美轮播图展示四川特色景点 背景音乐播放器(古风音乐衬托氛围) 特色视频播放功能 响应式布局设计 优雅的过渡动画效果 完整的导航菜单系统 CSS现代化样式设计 【适用人群】 Web前端开发学习者 需要网页模板的旅游从业者 对四川文化感兴趣的开发者 HTML5+CSS3学习者 【技术栈】 HTML5 CSS3(含动画效果) JavaScript 媒体播放技术 响应式设计 【使用说明】 下载后解压即可使用 源码注释完整,易于理解 可直接部署或二次开发

    aether-test-util-1.13.1-13.el7.x64-86.rpm.tar.gz

    1、文件内容:aether-test-util-1.13.1-13.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/aether-test-util-1.13.1-13.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    房地产绩效考核方案.doc

    房地产绩效考核方案

    基于stm32 nucleo-L476的智能灯(操作说明+源码)超简单开发一个STM32手机APP远程控制应用

    Configuration Nucleo-L476RG-Test STM32CubeMX 4.19.0 Date 02/18/2017 MCU STM32L476RGTx PERIPHERALS MODES FUNCTIONS PINS ADC1 Temperature Sensor Channel ADC1_TempSens_Input VP_ADC1_TempSens_Input SYS SysTick SYS_VS_Systick VP_SYS_VS_Systick USART1 Asynchronous USART1_RX PA10 USART1 Asynchronous USART1_TX PA9 USART2 Asynchronous USART2_RX PA3 USART2 Asynchronous USART2_TX PA2 Pin Nb PINs FUNCTIONs LABELs 2 PC13 GPIO_Input keyUser 16 PA2 USART2_TX 17 PA3 USART2_RX 21 PA5 GPIO_Output LD2 42

    蚁群算法融合动态窗口法的路径规划算法研究:多动态障碍物的应用与挑战,蚁群算法融合动态窗口法路径规划算法 多动态障碍物 ,核心关键词:蚁群算法; 动态窗口法; 路径规划算法; 多动态障碍物; 融合 ,"

    蚁群算法融合动态窗口法的路径规划算法研究:多动态障碍物的应用与挑战,蚁群算法融合动态窗口法路径规划算法 多动态障碍物 ,核心关键词:蚁群算法; 动态窗口法; 路径规划算法; 多动态障碍物; 融合。,"融合动态窗口与蚁群算法的路径规划技术应对多动态障碍物"

    Python源码实例06之如何按照拼音顺序对中文汉字进行排序.zip

    Python源码实例06之如何按照拼音顺序对中文汉字进行排序.zip

    生产部员工KPI绩效考核指标(精).docx

    生产部员工KPI绩效考核指标(精)

    体育馆弱电智能化系统深化设计方案.pptx

    体育馆弱电智能化系统深化设计方案.pptx

Global site tag (gtag.js) - Google Analytics