JBI-Java实现SOA的标准途径

2023-11-03 17:08
文章标签 java 实现 标准 途径 soa jbi

本文主要是介绍JBI-Java实现SOA的标准途径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

    本文简明地阐述了即将到来的与 SOA (面向服务体系)规范及 ESB (企业服务总线)基础架构有关的 JBI ( Java 业务集成)标准。业界正在广泛寻求解决 B2B 以及 EAI (企业应用集成)所存在问题的方案。这些方案不同于基于 JMS 手段的面向消息中间件技术和 Web 服务技术。

  面向服务体系

  SOA (面向服务体系)是近期推动应用和业务集成领域产生巨大飞跃的新技术之一。 SOA 定义了一系列详尽的体系规范、范例和实现应用程序间进行松散耦合交互的最佳准则。

  SOA 基于定义明确的接口,促进多个应用程序间的松散耦合交互。服务的实现是独立的,且不依赖上下文信息以及其他服务的状态。服务间数据交换主要基于文本类型的格式,使用基于标准的消息模型。服务自身并不知道服务提供者和服务消费者之间传输级的通讯交互。

  尽管不是强制要求,当今大部分流行的基于 SOA 的系统都利用了 Web 服务以及近似技术为服务间交互提供必要的管道管理。 WSDL ( Web 服务定义语言)扮演了主要的通讯模型角色; SOAP 扮演了消息承载协议、 HTTP 扮演了网络传输协议。当然,这并不意味着你必须利用上述技术实现基于 SOA 的系统。另外,有些术语之前就已经存在了,所以很多企业已利用类似的体系实现了系统的松散耦合交互。不管怎样,主要的不同点在于我们现在已经有标准协议、工具集和软件了,使面向服务体系更健全。

  SOA 原则与面向对象范式、原则有着显著不同。主要不同在于服务间交互的接口被定义了更多面向数据的行为。一个孤立的服务也许会采用面向对象原则和技术,但是,服务之间的交互很少采用这些手段。相反,这些接口更适合于基于文档的交换。面向对象的行为是绑定数据,而面向服务从行为中分离数据。

  企业服务总线

  ESB (企业服务总线)为面向服务体系提供了基础架构。通过设计工具定义服务间交互和规则, ESB 为部署和发现服务提供了运行时环境。

  


  在 ESB 的世界中,服务不会直接彼此交互。“ ESB 运行时”作为一个仲裁者在服务间松散的耦合它们。“ ESB 运行时”将实现协议绑定、消息传输、消息处理,等等。

  一个服务总线将包括下列关键项:

  ·为服务提供传输绑定

  ·定义和发现已部署服务

  ·在服务间基于规则的路由和编排消息

  ·包括文档传递在内的增值服务等

  大部分的 ESB 提供商基于自己的 SOA 提议来开放标准和技术,包括多种 Web 服务标准和协议。他们提供多种调用服务的传输绑定,包括 HTTP 、 FTP 以及 JMS 等等。大部分 ESB 用户利用 WS-BPEL ( Web 服务的业务流程执行语言)来了解已部署服务之间是如何实现业务流程的。 ESB 提供商同时也提供服务质量特性,包括容错、故障转移、负载平衡、消息缓冲等等。
 
  Java 业务集成

  JBI ( Java 业务集成)的提出是基于面向服务体系提倡的方法和原则,为了解决 EAI 和 B2B 若干问题的 Java 标准。当前版本( 1.0 )是 2005 年 8 月通过的 JSR ( Java 规范需求) 208 定案。商业和开源界都欢迎 JBI 成为他们 ESB 产品的集成标准。

  基于仲裁者体系

  JBI 定义了基于插件方式的架构,以便服务能融入“ JBI 运行时”环境。 JBI 提供了详细的接口,使服务能与“ JBI 运行时”环境交互。这些服务要为“ JBI 运行时”环境暴露接口,以便“ JBI 运行时”环境为服务路由消息。“ JBI 运行时”环境在部署在 SOA 环境中的服务间扮演仲裁者的角色。

  

  在同一 JVM 中,“ JBI 运行时”核心主要包括如下组件:

  ·组件框架:组件框架把不同类型的组件部署到“ JBI 运行时”。

  ·归一化消息路由器:归一化消息路由器利用标准机制实现服务间消息交换。

  ·管理框架:管理框架基于 JMX 进行部署、管理以及监控“ JBI 运行时”中的组件。

  组件模型

  JBI 在“ JBI 运行时”环境中定义了两种组件:

  服务引擎组件:该组件负责实现业务逻辑和其他服务。服务引擎组件在其内部可使用多种技术和设计模式。服务引擎组件可提供数据传输和转换这种简单的基础服务,也可实现像 WS-BPEL 实例一样复杂的业务处理。

  绑定组件:绑定组件主要为已部署服务提供传输级绑定。绑定组件有多种类型:

  ·利用标准传输协议与外部系统进行远程通讯。

  ·使已部署服务能在同一个 JVM 内部相互调用。

  ·服务间可使用标准的 WS-I ( Web 服务协同工作组织)规范通讯。

  JBI 的关键是分离服务引擎和绑定组件,以便业务逻辑不被下面的具体细节所干扰。这种方式促进了体系的灵活性和可扩展性。绑定组件和服务引擎组件在 JBI 内部都可以是服务提供者和 / 或服务消费者。

  绑定组件和服务引擎组件为“ JBI 运行时”提供接口以便从“ JBI 运行时”接收消息。同样的,它们也利用 JBI 提供的接口来和“ JBI 运行时”通讯。

  消息传输模型

  JBI 利用消息传输模型分离服务提供者和服务消费者之间的耦合。消息传输模型利用了 WSDL 。 WSDL 用于描述暴露的服务引擎组件和绑定组件的业务处理。另外, WSDL 也用于定义抽象服务处理的传输级绑定。

  JBI 架构中一个关键组件是 NMR (归一化消息路由器,也译作“正规消息路由器”)。 NMR 基于 WSDL 提供了主要的消息传输中枢, NMR 为部署在“ JBI 运行时”中的服务引擎组件和绑定组件间的消息传递提供松散耦合。服务需要有聚合业务处理的接口,每个业务处理由零个或多个消息组成。而一个接口有一个或多个传输级绑定。

  “ JBI 运行时”利用归一化格式描述消息。一个归一化消息由以下部分组成:

  ·消息属性

  ·消息有效载荷

  ·消息附件

  利用 NMR , JBI 规范为服务提供者和消费者的消息交换提供标准接口。 NMR 支持服务生产者和消费者之间单向模式和服务响应模式的调用。

  管理

  JBI 利用 JMX 实现运行时的服务安装、配置和监控。服务必须实现 JBI 接口集,以便这些服务在 JBI 环境中是可管理的。 JBI 环境必须提供一套 JMX MBeans 实现“ JBI 运行时”的管理。

  “ JBI 运行时”环境允许服务引擎组件和绑定组件的相关操作如下:

  ·安装组件:使组件接口可使用归一化消息路由器。

  ·安装 artefact 组件:这将允许已部署的 artefacts 组件获得与已安装组件同样的机能。例如,可以部署一个“连接服务”来提供具体的数据库连接。

  启动、停止服务以及进行相关服务分组。

  JBI 为组件及 artefact 组件定义了标准的部署描述符以及打包模型。

  角色

  JBI 为基于 JBI 的端到端 EAI 解决方案定义了如下角色:

  ·引擎开发者:引擎开发者提供遵循 NMR 和管理约束的服务引擎组件。

  ·绑定开发者:绑定开发者提供遵循 NMR 和管理约束的绑定组件。

  ·JBI 环境提供者: JBI 环境提供者为“ JBI 运行时”使用 J2EE 1.4 或 J2SE 1.4 或更新的平台提供支持。

  ·J2EE 平台提供者: J2EE 平台提供者把“ JBI 运行时”作为提供应用程序服务的一部分。

  ·JBI 应用程序开发者: JBI 应用程序开发者利用服务引擎组件、绑定组件以及 JBI 环境构建 JBI 应用程序。

 

 

这篇关于JBI-Java实现SOA的标准途径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2