扩展器模式在最近几年变得很流行,甚至已经在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

扩展剂:模式还是反模式?相关推荐

  1. 复制模式和扩展模式_扩展剂:模式还是反模式?

    复制模式和扩展模式 扩展器模式在最近几年变得很流行,甚至已经在OSGi标准(例如,蓝图服务和Web应用程序规范)中使用. 在处女座,我们从一开始就与扩展程序一起工作,但是尽管它们具有优势,但它们仍有一 ...

  2. SOA系列文章(二):服务设计原理:服务模式和反模式

    服务设计系列的法则已经发展到最佳通信实践和取样相关编码的程度.本文提供了设计和实现网络服务的基本原理,并且对面向服务的体系结构(SOA)的相关概念做了一个简要的回顾,以及有关于几种模式和反模式的详细讨 ...

  3. 反模式设计_设计模式:模式或反模式,这就是问题

    反模式设计 我最近遇到了Wiki页面" Anti-pattern" ,其中包含详尽的反模式列表. 其中一些对我来说很明显. 他们中的一些让我想了一下,其他的让我想了更多. 然后,我 ...

  4. 设计模式:模式或反模式,这就是问题

    我最近遇到了Wiki页面" Anti-pattern" ,其中包含详尽的反模式列表. 其中一些对我来说很明显. 他们中的一些让我想了一下,其他的让我想了更多. 然后,我开始在页面上 ...

  5. DevOps 模式与反模式索引

    我今天把 DevOps 模式和反模式做了一个简单的总结.如果全职写,半年可以写完.如果周更,需要两年,我怕自己烂尾,夜长梦多. 自己开的坑,含着泪也要把它填完. DevOps 策略模式 模式:定义你的 ...

  6. 测试驱动开发系列之五--测试的模式与反模式

    14.1喋喋不休的测试反模式 刚刚接触TDD或者刚开始写单元测试的人倾向于重复一些相同的错误.这些常见的但是会降低生产力的模式称作反模式"antipattern".可以通过应用四阶 ...

  7. 设计模式杂谈——模式与反模式之争

    摘要:探究事物的反面性是一种哲学上的思考,物理学在"物质"之上提出并证实了"反物质"的存在,就像数学上有正数也有负数,武侠小说中有九阳神功也有九阴真经,生活中有 ...

  8. 仓储模式到底是不是反模式?

    [导读]仓储模式我们已耳熟能详,但当我们将其进行应用时,真的是那么得心应手吗?确定是解放了生产力吗?这到底是怎样的一个存在,确定不是反模式? 一篇详文我们探讨仓储模式,这里仅我个人的思考,若有更深刻的 ...

  9. 从安全到镜像流水线,Docker 最佳实践与反模式一览

    作者 | Timothy Mugayi 译者 | 弯月,责编 | 夕颜 封图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 在使用Docker的大部分时间里,我们并不关 ...

最新文章

  1. 字符集 ISO-8859-1(1)
  2. Linux如何在任务栏显示时间,在MFC[转载]在MFC状态栏显示时间 状态栏显示时间
  3. 虚拟机从暂停状态恢复后HEALTH_WARN,osds down
  4. Pixhawk之姿态解算篇(3)_源码姿态解算算法分析
  5. 七日掌握设计配色基础_掌握正确的基础知识:如何设计网站的导航,搜索和首页...
  6. PID是什么?在做系统的故障排除时如何使用它?
  7. Python练习:站队顺序输出
  8. a16z和斯坦福大学区块链研究中心将于5月4日举行NFT虚拟峰会
  9. 用指针交换两个数_C语言100题集合026-使用指针交换两个数组中的最大值
  10. eBPF Internal: Instructions and Runtime | 凌云时刻
  11. 上课解除教师机控制(红蜘蛛)超详细
  12. 售前技能——自我定位
  13. html大屏可视化边框怎么弄的,做大屏可视化,你需要知道这几点
  14. php去除英文和标点,php实现过滤中文标点符号及过滤英文标点符号的示例代码
  15. 跟着团子学SAP PS:项目模版搭建 CJ91/CJ92/CJ93/CN01/CN02/CN03/CN11/CN12/CN13
  16. initramfs学习
  17. 怎么压缩图片200k以下?
  18. MySQL的数据类型(一)
  19. 二层交换与MAC地址
  20. 中国科学院大学计算机学院夏令营,2019年中国科学院大学生数学夏令营招募通知...

热门文章

  1. kafka消费者开发方式小结
  2. ReviewForJob——堆排序
  3. sbe 详解_内部简单二进制编码(SBE)
  4. java launcher_JAR清单类路径不仅适用于Java Application Launcher
  5. jaxb_JAXB众所周知的秘密
  6. jetty嵌入式容器_嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务
  7. Eclipse系列的隐藏宝藏-2019年版
  8. 设计模式 生成器_生成器设计模式的应用
  9. jenkins编译java_在Window上使用Jenkins自动发布Java工件
  10. 可重入锁 不可重入锁_什么是可重入锁?