复制模式和扩展模式

扩展器模式在最近几年变得很流行,甚至已经在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. php 三元预算? :_项目预算:一种反模式

    php 三元预算? : The desired benefits of agile development are many. Customers are happier and more willi ...

  2. 横向扩展 纵向扩展 数据库_扩展数据库–减少扩展的艺术

    横向扩展 纵向扩展 数据库 Let's continue the hybrid saga! After two articles talking about the Azure Blob Storag ...

  3. hmcl离线模式可以联机吗_我的世界hmcl离线模式怎么联机

    在我的世界中,hmcl离线模式联机方法是下载内网映射软件,使用内网映射软件.mcbbs上就有很多这类软件,比如:Sakura Frp.最后把mod装进服务端的mods文件夹里就好了之后再运行刚刚的fo ...

  4. 信元模式mpls 避免环路_【基础】交换机堆叠模式

    堆叠是指将一台以上的交换机组合起来共同工作,以便在有限的空间内提供尽可能多的端口.多台交换机经过堆叠形成一个堆叠单元.可堆叠的交换机性能指标中有一个"最大可堆叠数"的参数,它是指一 ...

  5. 模式分享 公众号_微信公众号+()模式营销!公众号还可以这样玩?

    近几年,随着移动互联网的快速发展,销售模式也变得越加多元化. 近日,微信发布公告称,已经封禁发布内容包含低俗.有害.诈骗等信息的相应公众号4万余个. 难道微信公众号营销开始崛起了?接下来,小编带大家一 ...

  6. python语言的编程模式是什么意思_关于 Python 语言的编程模式,哪个说法正确?_学小易找答案...

    [简答题]给出异常处理的流程.要求包括else和finally,并说明else和finally的区别. (10.0分) [单选题]关于函数,以下选项中描述错误的是() (7.0分) [多选题]Pyth ...

  7. 用java代码实现Singleton_为什么在Java代码中实现Singleton模式(有时)被认为是Java世界中的反模式?...

    测试 一个原因是单元不容易用单元测试处理.你不能控制实例化,并且它们的性质可能跨调用保持状态. 为此,dependency injection的原则是流行的.每个类都注入(配置)他们需要的函数(而不是 ...

  8. mysql 说说反模式设计_关于反模式、设计和复用的一些想法

    在维护系统的时候发现有个工作经验超级丰富的同事在C#代码中使用了goto,这段代码是一个很长的方法,goto的作用是为了复用两段逻辑.当我第一次看到goto是为了复用一段C#代码的时候感觉无比诡异,总 ...

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

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

  10. 反模式:神仙大类和黄金大锤

    数学中有正数和负数 物理学有『物质』和『反物质』的存在 武侠小说中有九阳神功也有九阴真经 生活中有婚姻也有出轨 ...... 事物总是充满这种相互矛盾而统一的有趣现象. 对于GoF提出的23种设计模式 ...

最新文章

  1. db2删除大量数据_Python 连接数据库的多种方法
  2. 数据中心规划设计中值得注意的八个问题
  3. Android 编译期间 动态修改AndroidMainFest文件
  4. 16进制加法 keil_教你快速学会二进制、十进制、十六进制之间的转换
  5. 系统维护For流星无语
  6. JavaSript实现调用google地图输入经度,纬度移动到该点,同时对点做标记
  7. MATLAB中sort函数对矩阵数进行排序
  8. python变量和常量_python变量与常量内容:
  9. 页面加载速度-合并资源文件
  10. C语言带参宏定义和函数的区别
  11. qsort的7种用法(转)
  12. “越级”的两年后,科技潮牌realme与年轻人进行了一次深度对话
  13. php mysql errorcode_PHP errorCode()和errorInfo():PDO中的错误处理
  14. C++socket编程(三):3.1 TCP/IP协议特点
  15. linux 实时显示网速工具nload
  16. [转载]千古真人张三丰
  17. 系统性谈谈软件可靠性——第4讲:软件可靠性测试
  18. linux展示隐藏的文件,linux怎样设置显示隐藏文件?
  19. Java程序设计——模拟行星运动
  20. python教孩子学编程,教孩子学编程(Python语言版)

热门文章

  1. Spring依赖注入和控制反转
  2. 点滴小组KTV点歌系统简介
  3. jsp使用cookie实现记住用户名和密码
  4. hibernate中报错could not initialize proxy - no Session的解决方法
  5. Ajax基本案例详解之$.post的实现
  6. ❤️ 爆肝一个月!JAVA零基础入门总结(上)❤️
  7. 给定年月日计算是一年的第几天
  8. android拦截短信获取短信内容,《英雄联盟手游》先锋测试招募说明:仅安卓用户...
  9. java中的tostring_java 中重写toString()方法
  10. java集合——遗留的集合