OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序(转)

2024-02-21 21:38

本文主要是介绍OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着OSGi/Equinox逐渐成为Java EE服务端的基础软件架构,OSGi上部署WEB应用程序的解决方案日渐成熟。这里介绍三种目前我们所知的解决方案,前两种是Equinox组织提出的方案,后一种是OpenCore平台采取的解决方案。

解决方案一: 部署OSGi/Equinox在Servlet容器中

具体实现: 把OSGi/equinox打包在WAR中,当Servlet容器加载WAR时,启动OSGi框架。
WEB-INF的目录结构大致如下(大致如此):
  1. * /WEB-INF  
  2.       o /web.xml (with one servlet entry assigning all incoming requests to the BridgeServlet)  
  3.       o /lib/servletbridge.jar (the classes associated with the equinox.servletbridge)  
  4.       o /eclipse (the eclipse platform directory)  
  5.             + launch.ini (contains framework properties that will allow override of any eclipse specific System Properties)  
  6.             + /configuration (contains config.ini which lists the bundles you want to have available)  
  7.             + /features  
  8.             + /plugins  

部署结构如下图( 转载):




个人感觉这个解决方案使用价值不大。

解决方案二: Web服务器与Servlet容器嵌入在OSGi/Equinox

具体实现: 把Jetty当作一个插件嵌入到OSGi/Equinox中,并基于Jetty实现OSGi标准中的HTTP服务,其他插件可以通过该服务注册Servlet和静态页面。

OSGi标准中的HTTP服务接口如下:

  1. package org.osgi.service.http;  
  2.   
  3. import javax.servlet.Servlet;  
  4. import javax.servlet.ServletException;  
  5. import java.util.Dictionary;  
  6.   
  7. public interface HttpService {  
  8.     public void registerServlet(String alias, Servlet servlet,  
  9.             Dictionary initparams, HttpContext context)  
  10.             throws ServletException, NamespaceException;  
  11.   
  12.     public void registerResources(String alias, String name,  
  13.             HttpContext context) throws NamespaceException;  
  14.   
  15.     public void unregister(String alias);  
  16.   
  17.     public HttpContext createDefaultHttpContext();  
  18. }  


部署结构图( 转载):



因为OSGi是最早为嵌入式系统设计,所以OSGi标准中的HTTP服务只提供了有限的Servlet与静态资源的发布功能,没有一个完整的WEB容器概念,这种模式更适合通过WEB方式暴露(Export)服务,不太适合开发展现层的WEB应用。

通过Equinox提供的扩展/扩展点功能可以简化这种方式WEB应用的开发,就是通过plugin.xml来配置Servlet和静态页面的注册。

解决方案三: 设计适合OSGi环境的Servlet容器,构建纯插件体系结构的WEB层

具体实现:"插件"与我们通常所说软件"模块"的一个区别是:插件能自我描述,加载运行在插件容器中。那么,我们可以分层扩展一个插件的自我描述,用类似Decorator的模式为插件增加“特征”描述。 所以,我们在OpenCore中定义了三种特征的插件,如下图:



这三种插件类型间关系类似Decorator模式,从内到外增加"特征"描述:
  1. OSGi标准插件,自描述文件"META-INF/MANIFEST.MF"
  2. OpenCore插件,增加自描述文件"META-INF/opencore.xml",实现符合OSGi环境的依赖注册(IoC)与动态扩展点
  3. OpenCore Web插件,增加自描述文件"WEB-INF/web.xml"(符合Servlet规范),WEB特性的插件,可以部署在Servlet容器内

这样我们可以把一个应用的WEB层像业务层一样,分割为多个插件,部署在OSGi/Equinox的框架中.

部署结构图:






我 们觉得这种方式以合适的力度将WEB层分割为插件部署在OSGi框架上,充分的发挥了OSGi体系结构的强大之处,也提高了WEB层开发部署的灵活性。目 前,业界好像也有很多项目是采用这中方式部署。这种部署方式的缺点是,不得不修改Jetty容器的实现,以使其适应OSGi的环境,我们希望Jetty以 后能支持这个功能:)

Google Code上发布了一个基于OpenCore的示例项目linktalk,一个基于GWT、Equinox、OpenCore的Ajax聊天室。

项目地址: http://code.google.com/p/lintkalk

源码下载: svn checkout https://linktalk.googlecode.com/svn/trunk/project

程序下载: svn checkout https://linktalk.googlecode.com/svn/trunk/release

相关资源:

http://www.eclipse.org/equinox/server/http_quickstart.php

这篇关于OpenCore:基于OSGi开发纯插件体系结构的WEB应用程序(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733153

相关文章

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件