面向Java模式的框架Jt:设计模式实现

日期: 2010-11-01 作者:Al Galvis 来源:TechTarget中国 英文

  在《面向Java模式的框架Jt:消息传送设计模式》中,我们介绍了Jt是一种用于快速实现Java应用程序的设计模式框架以及消息传送设计模式(MDP)。下面我们将继续介绍相关内容。

  设计模式实现

  如前所述,MDP用于实现和/或促进Gang of Four (GoF)、DAO和J2EE等知名设计模式的实现。为了解释如何完成该实现,要用到几个模式。同样的概念适用于其他模式的实现。Jt框架运用这些模式实现高级功能。

  Proxy

  消息传送设计模式促进Proxy的实现。在消息传送范式下,Proxy主要负责将输入消息转发到真实主体。

图 4. Proxy的MDP实现

图 4. Proxy的MDP实现

  Adapter

  消息传送设计模式促进Adapter的实现。Adapter的主要用途是实现接收方和发送方之间的消息转换,从而使这些组件互相连接。

图 5. Adapter的MDP实现

图 5. Adapter的MDP实现

  Web服务和透明访问

  注意,MDP发送方和接收方不需要在同一个主机上运行。可以将消息发送到远程组件上。MDP在这方面不加以限制。使用一个现实类比法,您可以通过电话/互联网对话与同屋内或千里以外的朋友进行通信。MDP能够处理所有这些场景。您和您的朋友无需关心对话的传输方式(技术、通信协议、安全机制等)。当然,这些对您应该是透明的。

  如图 6 所示,消息传送设计模式和前面讨论的其他几个设计模式可联合使用,来实现对远程组件的访问。不管使用的协议和通信技术是什么,MDP都能够提供对远程组件/服务的透明和安全访问:远程组件被看作本地组件。消息可以通过Web服务、REST、EJBs、RMI、HTTP、Sockets、SSL或任何类似的通信接口进行传输。上面讨论的设计模式通过隐藏与远程API相关的复杂性实现该透明和安全访问。

图 6. 对分布式组件/服务的MDP透明访问

图 6. 对分布式组件/服务的MDP透明访问

  为清晰起见,将信使组件和内部processMessage()方法从下面的UML图中删除。尽管异步消息传送受支持,这里只显示同步消息传送。

  •   代理:消息通过代理被发送到远程组件。
  •   远程适配器:适配器负责通过转化消息与远程API连接。
  •   外观:将消息转发到合适的远程组件。它通常也提供安全功能。

  再回到我们的现实类比法中,电话公司保留的框架需要某种注册(电话薄)才能定位其他参与者。每个实体都有一个相关的电话号码或ID。所需要的是一个简单的命名机制。在某些情况下,我们可能需要提供一个城市编码和/或国家编码。邮政服务和您的互联网服务提供商也使用一个相对简单的命名方案。

  其他服务提供者利用框架并使用定制的身份验证/授权 机制。例如,您的银行机构利用电话系统且使用Access Management机制进行身份验证和授权。我们在获准访问一个账户之前需要提供身份验证信息。

  所需的其他框架组件不同于上面概述的那些组件。Facade组件通常负责安全性(消息传送授权和身份验证)。在将消息转发给接收方之前,Facade 在其上执行解密、授权和身份验证。

图 7. 对分布式组件/服务的MDP安全访问

图 7. 对分布式组件/服务的MDP安全访问

  下面是所涉及的组件:

  •   MessageCipher:负责解密输入消息并加密回复消息的组件。可配置该组件来使用一个特定加密方案。
  •   Component Registry:允许系统注册并根据ID查询组件。
  •   AccessManager:负责授权/拒绝对远程组件的访问。它对收到的每个消息授权并进行身份验证。如果访问管理器不能认证消息,消息就永远不会到达接收方。

  框架安全

  MDP可以自然、直观的方式处理安全难题。它提供端到端、不可否认的消息层安全性(与传输层安全相反)。它还可用于选择性加密,因此只有敏感消息被加密。知名的安全机制很适合于MDP。另一方面,我们的模型不局限于某个消息格式(XML、SOAP等)。它提供任何消息格式和REST式服务。这包括专用和自定义消息格式。

  注意,在一个消息传送范式下,大部分安全方面对于消息发送方和接收方都可以是透明的。例如,发送方和接收方不需要过于关心是否使用了安全性且如何实现安全性。框架提供必需的安全性组件和机制(“管道”)。一般来说,使用我们的现实类比法,您和您的朋友就无需担心服务提供者是否出于隐私和安全原因对您的对话进行了加密。Jt框架还使用声明安全性来避免编写易出错的安全代码。最后,可基于特定需求提供定制的安全机制。

  异步消息传送、双向消息传送和多线程

  现在以您的电子邮件或邮政信箱为例。可将消息异步发送并放置在一个消息队列或堆上,直至您准备 “处理” 它们。MDP能够处理与异步消息传送和多线程相关的复杂性。框架组件能够在一个独立的线程中执行任务。这是对现实世界的一个自然表达:每个组件(实体)是一个自包含单元,能够独立于系统其余部分执行任务。使用组件自身的独立线程,可以异步处理消息。这个功能通过一个消息传送队列在Jt框架的上下文中实现。组件不需要添加独立逻辑来管理多线程,因为这很耗时、复杂且易于出错。

  您也可以决定异步发送回一个消息,建立一个双向通信。MDP能够建立双向异步消息传送机制,其中组件和应用程序相互通信。也可以将同步和异步消息传送结合起来。比如,在一个同事或主管来检查进度的同时,您正在阅读您的电子邮件消息。

  性能、可伸缩性和容错问题

  MDP模型简单、通用、健壮。它能够处理与分布式应用程序相关的复杂问题。MDP与通用的可伸缩性和可用性机制(集群、负载平衡、故障转移、缓存等)相兼容。例如,基于MDP的SOA和ESB应用程序能够在计算机集群上运行,从而提高可靠性和可用性。您也可以使用MDP灵活地选择和组合协议和技术。您不必局限于某一技术或协议。您的选择取决于具体性能和可用性需求。

  MDP也可通过一种很自然的方式予以扩展,以提供容错功能和技术。复制状态机方法是实现容错系统的一种通用方法,它复制组件并通过consensus算法协调其交互。框架组件的行为正好类似于状态机:输入消息、输出消息和组件状态是模型的组成部分。

  企业服务总线(ESB)功能

  Jt设计模式框架也是一种消息传送引擎,提供企业服务总线(ESB)功能。它提供对运行在远程应用程序内部的组件的透明访问。框架组件(本地和远程)能够安全地交换消息。Jt框架还允许您连接异构应用程序,而不管使用什么技术,这些技术包括JMS、Web Services、EJB、REST, HTTP、EJBs等。由框架(消息传送、适配器、远程代理、策略、外观等)实现的设计模式可实现该功能。Jt企业服务总线包括以下主要组件:

以下是引用片段:
Enterprise Service Bus Adapter 
JMS Adapters (point-to-point and publish-subscribe) 
EJB Adapter 
EJB Proxy 
RESTful web services Adapter 
Secure web services Adapter (Axis) 
Axis Proxy 
Message Cipher 
Message Authenticator 
Access Manager 
Data Access Objects 
Java Mail Adapter 
XML/Component transformer 

  可使用“lego/messaging”架构将这些组件交换地插入复杂的框架应用程序中。可通过各种配置装配它们来满足特定业务需求。在这种情况下,这些构件块被组合在一起来共同实现企业服务总线(ESB)功能。

  框架ESB适配器将应用程序连接到Jt企业服务总线。可对ESB适配器进行配置,来使用任何交换消息策略:JMS、安全的Axis Web服务、EJBs、安全的REST式web服务、HTTP等。定制/专用策略和协议可能也会用到。ESB适配器和其他ESB组件也负责自动将消息转化为适当的格式/协议。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 总线技术究竟该不该用?

    曾几何时企业服务总线(ESB)被视为企业IT的核心。今天,不仅ESB受到了比被废弃还要糟糕的攻击,若干开发趋势似乎对更简单的消息总线也发起了质疑。

  • 架构安全模型开发方式探索

    维护一个强大的安全模型,以及相关合规和管控的需求越来越重要,特别是在如今黑客和入侵几乎每天都会发生的情况下。

  • 锐易特依托大数据升级核心产品

    锐易特的核心产品企业服务总线(RES ESB)V6.0版本的成功发布,为我们重新审视国产中间件的信息整合之路,提供了宝贵机会。公司负责人介绍了产品升级后的性能及企业发展策略。

  • 从ESB到微服务:如何演变?

    从web开发人员的角度看,大量的微服务部署到轻量级的Karaf 容器中,这就符合了ESB的定义。