扩展剂:模式还是反模式?

扩展器模式在最近几年变得很流行,甚至已经在OSGi标准(例如,蓝图服务和Web应用程序规范)中使用。 在处女座,我们从一开始就与扩展程序一起工作,但是尽管它们具有优势,但它们仍有一些明显的缺点。 由于OSGi联盟正在考虑在其他规范中使用扩展器,因此我同意记录一些问题。

第一个困难是知道扩展器何时完成了捆绑包的处理。 例如,一旦驱动了任何束激活器,包含蓝图XML文件的束将转换为ACTIVE状态。 但这还不是全部。 管理员对何时可以使用捆绑软件很感兴趣,因此处女座中的管理代码会跟踪扩展程序的进度,并为代表捆绑软件的安装工件提供混合状态。 安装工件会一直处于STARTING状态,直到发布了应用程序上下文为止,此时该应用程序过渡到ACTIVE。 如果没有这样的附加基础架构,管理员将无法确定由扩展程序处理的捆绑包何时真正准备就绪。

那是成功的案例,但在错误案例中也有复杂之处。 第一个复杂之处在于,由于扩展程序在与安装捆绑软件的线程不同的线程中运行,因此如果扩展程序抛出异常,则不会传播到安装捆绑软件的代码。 因此,安装程序需要以某种方式检查错误。 因此,处女座拥有检测此类错误并将其传播回启动捆绑软件部署的线程的基础架构:部署操作失败,并显示堆栈跟踪,指出出了什么问题。

另一个错误并发症是处理扩展器的扩展器存在(可能不确定)延迟。 对于这种错误,Virgo会跟踪扩展程序处理的进度,并向事件日志发出警告(旨在引起管理员的注意),指出哪些处理过程已延迟以及在某些常见情况下(例如,当蓝图正在等待依赖项时) ,是什么导致延迟。

扩展程序需要能够查看包的生命周期事件,因此对于将框架进行分区的系统,必须将每个扩展程序安装到多个分区中。 在另一方面,防止扩展程序的多个实例看到相同的捆绑包事件至关重要,否则它们都将尝试扩展捆绑包。

扩展器的另一个问题是需要使它们保持运行和健康,因为除了扩展器未处理的捆绑包外,几乎没有迹象表明扩展器已关闭或生病。 处女座小心确保其扩展器正确启动,并且其用于检测延迟的基础结构有助于诊断扩展器崩溃或疾病(这两种情况均极为罕见)。

将参数传递给扩展程序以影响其行为也存在问题。 通常,这是通过将扩展程序配置嵌入正在处理的包中或将包含配置的片段附加到扩展程序包中来完成的。 但是,由于扩展器不是由API驱动的,因此无法在调用时传递参数的常规方法。 本质上,扩展程序模型意味着用于部署的编程模型仅限于BundleContext.installBundle。

通过在其他基础架构上进行大量投资,处女座设法合理地支持了Blueprint和Spring DM扩展器。 但是对于Web应用程序扩展器,Virgo无法使其足够强大,因此它直接从Virgo部署管道中驱动了基础Web组件,从而避免了上述问题。

我知道至少有另一个服务器运行时项目在扩展器上遇到了类似的问题,因此处女座并不孤单。 在将安装程序与特定于资源的处理松散耦合,扩展程序模式的主要优势(但远非该模式唯一)与提供健壮的编程模型和可用的管理视图之间进行权衡取舍。服务器运行时-如果没有扩展程序,这将更加直接。

参考: 扩展程序:模式还是反模式? 从我们的JCG合作伙伴 Glyn Normington在Mind the Gap博客中获得。


翻译自: https://www.javacodegeeks.com/2012/08/extenders-pattern-or-anti-pattern.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python html格式编码

web应用如用到ace等网络编辑器的时候,如要支持html,xml等格式的文件编辑,输入ace 的文本内容必须先进行html格式编码: def html_escape(content): import cgi return cgi.escape(content)转载于:https://www.cnblogs.com/zhouxiaoming/p/703…

字符串替换

题目: 给定一个英文的字符串, 要求你将其中的元音删除掉, 返回新的字符串. 例如:"This website is for losers LOL!" --> "Ths wbst s fr lsrs LL!" 当看到这个题目的时候, 第一个想起的就是re模块的正则表达式. 不过由于最近使用过字符串的replace方…

小学计算机技术指导纲要,《中小学信息技术课程指导纲要(试行)》

《中小学信息技术课程指导纲要(试行)》2000年11月教育部颁发的《中小学信息技术课程指导纲要(试行)》教学目标:1、 增强信息意识,了解信息技术的发展变化及其对工作和社会的影响。2、 初步了解计算机基本工作原理,学会使用与学习和实际生活直…

JavaFX 2.0布局窗格– FlowPane和TilePane

FlowPanes和TilePanes是不错的布局窗格,如果您想一个接一个地连续地水平或垂直地布局子级,则可以。 它们彼此非常相似,因为它们都将子级布置成列(在水平Flow / TilePane的情况下)并按其宽度或行(在垂直Flow…

EasyRMS录播管理服务器项目实战:windows上开机自启动NodeJS服务

本文转自EasyDarwin开源团队成员Penggy的博客:http://www.jianshu.com/p/ef840505ae06 近期在EasyDarwin开源团队开发一款基于EasyDarwin在录播服务器EasyRMS过程中,我采用node作为EasyRMS录播服务器录播管理服务器的开发平台,基于node开发关于设备管理,录像计划,录…

windows10搭建django1.10.3+Apache2.4

很多教程都是在linux上搭建,windows上似乎天生不太适合,但是我还是愿意试试这个坑。 首先 交代一下自己的环境 python3.5.2 64位 django 1.10.3 apache 2.4 64位 windows 10 重点在apache上。 python 和django 相信有兴趣看这篇文章的基本上也都已经了解…

深入理解计算机系统 视频教程,深入理解计算机系统1

第一章 计算机系统漫游代码段的生命周期hello.c#include int main(){printf("hello world!\n");return 0;}1.1 前序源程序(源文件)实际上就是一个由0和1组成的位(又成比特bit)序列,8个位被组组成一组,称为字节。每个字节表示程序中的某些文本字符(大部分的现代计算机…

Java与iOS对话:Java对象与Apple plist序列化

我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成。 背景 我正在将Java Webapp作为后端并且客户端是iOS设备的项目。 最近,我收到了创建Web服务的任务,该服…

web.cofing(新手必看)

花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法。很适合新手参看&#xff0c;由于Web.config在使用很灵活&#xff0c;可以自定义一些节点。所以这里只介绍一些比较常用的节点。 <?xml version"1.0"?> <!--注意: 除了手动编辑此文件以外&…

MIPS下CPU和RAM的数据流动情况详解

这是计算机硬件间的数据路径&#xff08;即数据流动的路径&#xff09;&#xff0c;下面将较详细分析此图&#xff1a; PC&#xff08;program counter&#xff0c; 程序计数器&#xff09;是一个用于记录当前计算机正在执行的指令的地址的寄存器&#xff08;register&#xff…

计算机乱程序怎么办,我的电脑程序乱了怎么办

我的电脑程序乱了&#xff0c;想用光盘恢复一下系统的修复安装方法第一种方法&#xff1a;1、点击“开始”菜单&#xff0c;点击“运行”2、输入CMD回车3、输入命令SFC/SCANNOW4、插入系统光盘系统会自动将硬盘中的系统文件于系统盘中的文件比较并进行修复如果不行&#xff0c;…

【计算机网络】网络层——IP协议

目录 一. 基本概念 二. 协议报文格式 三. 网段划分 1. 第一次划分 2. CIDR方案 3. 特殊的IP地址 四. IP地址不足 1. 私有IP和公网IP 2. DHCP协议 3. 路由器 4. NAT技术 内网穿透(NAT穿透) 五. 路由转发 路由表生成算法 结束语 一. 基本概念 IP指网络互连协议…

完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

托管豆 这篇文章是本教程第1部分的继续。 在“ com.mb”包中&#xff0c;您将需要创建以下类&#xff1a; package com.mb;import org.primefaces.context.RequestContext;import com.util.JSFMessageUtil;public class AbstractMB {private static final String KEEP_DIALOG…

P1014 Cantor表

洛谷 p1014 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1&#xff…

dvd管理系统

>>>>>>>>>>>>>>>>>>>> 语言&#xff1a;java 工具&#xff1a;eclipse 时间&#xff1a;2016.12.1 >>>>>>>>>>>>>>>>>>>> 一代代码&#xff1a; 1 …

佳能2900打印机与win10不兼容_佳能RF 1.4、RF 2增倍镜与RF 100500mm L IS USM并不完全兼容...

据佳能官方透露&#xff0c;佳能RF 1.4、RF 2增倍镜与RF 100-500mm F4.5-7.1 L IS USM镜头并不完全兼容。在安装使用两款增倍镜时&#xff0c;用户需将RF 100-500mm镜头变焦环的变焦位置移动到超过300mm的远摄区域。而在搭配增倍镜后&#xff0c;镜头变焦范围将限定在300-500mm…

县级的图书馆计算机管理员,图书馆管理员的岗位职责

图书馆管理员的岗位职责导语&#xff1a;在领导的命令下&#xff0c;紧紧围绕学校总体工作要求&#xff0c;牢固树立全心全意为教学及教科研第一线服务的思想&#xff0c;工作主动热情&#xff0c;努力做好管理育人的工作。图书馆管理员岗位职责&#xff1a;1、每学期认真制订切…

使用Java快速入门的Apache Thrift

Apache Thrift是由facebook创建的RPC框架&#xff0c;现在它是一个Apache项目。 Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口。 该定义文件用作编译器的输入&#xff0c;以生成用于构建通过不同编程语言进行通信的RPC客户端和服务器的代码。 您也可以参考Thri…

Windows/Linux安装python2.7,pycharm和pandas——《利用Python进行数据分析》

一、Windows下&#xff08;两种方法&#xff09; 1. 安装Python EDP_free并安装pandas ① 如果你没有安装python2.7&#xff0c;可以直接选择安装Python EDP_free&#xff0c;然后再安装pandas等包就行 &#xff1a; Python EDP_free 网址&#xff1a; http://epdfree-7-3-2.…

Python基础类型

1. 列表、元组操作 列表是我们最以后最常用的数据类型之一&#xff0c;通过列表可以对数据实现最方便的存储、修改等操作 定义列表 names [Alex,"Tenglan",Eric] 通过下标访问列表中的元素&#xff0c;下标从0开始计数 >>> names[0] Alex >>> nam…