我们正在为电信提供商设计一个新系统,在该系统中,我们研究了用作企业服务总线的Oracle服务总线(OSB)。 对我来说,第一个优点是它提供了惊人的工具支持。 通过将其捆绑为Oracle SOA套件,Oracle已将其所有企业集成软件堆栈集成为一个有凝聚力的整体。 在本文中,重点将放在作为Oracle SOA Suite 11g一部分的Oracle OSB 11g上。 新的Oracle SOA Suite 12c已进行了相当多的更改,我们将不在本文中介绍。 但是,我喜欢新的Oracle SOA Suite 12c的一个功能是,开发人员可以使用JDeveloper在一个IDE(集成开发环境)中开发BPEL(业务流程执行语言)和OSB代码。

OSB需要了解的几个主要组件如下:

代理服务

顾名思义,代理服务是托管于外部方的服务,充当内部服务的基础。 通过使用代理服务,您可以更好地控制内部服务中的更改,因为如果内部服务发生更改,则代理服务可以执行所需的转换。

商业服务

就OSB而言,业务服务代表内部应用程序服务。 它可以是WebService,JMS队列/主题,REST服务,FTP服务等等。 商业服务将包含调用实际服务的功能。

因此,我们将重点关注本文的场景如下:

  1. 我们有一项内部服务,如果用户输入了MSISDN或SIM卡号,它就会返回订户信息,并且根据输入,将提取并返回数据。
  2. 必须通过使用代理服务以更有意义的方式向外部用户公开此服务。

示例项目可以在此处下载。

首先,我们创建业务服务,它将作为我们内部服务的基础。 在您的OSB项目中,创建以下四个文件夹;

  • 代理
  • 商业
  • 转型
  • wsdl

然后,我们需要将内部服务WSDL和为此示例创建的代理服务WSDL复制到“ wsdl”文件夹中。

配置业务服务

右键单击“业务”文件夹,然后选择“新建”->“业务服务”。 创建业务服务后,将首先为您提供“常规”选项卡。 为此,我们执行以下操作;

  • 选择“ WSDL Web服务”,然后单击浏览器。 然后选择“浏览”,选择WSDL文件,您将看到两个选项。 选择一个以“(端口)结尾的”。

  • 然后转到“传输”选项卡,并将URI更改为http:// localhost:8088 / mockInstalledBaseSubscriberClassificationQueryWSServiceSoapBinding。 这是因为我们将使用SOAPUI模拟服务功能进行测试,并且URI代表WSDL表示的服务的SOAPUI模拟服务端点。
  • 可以从此处下载该示例的SOAPUI项目。

这就是我们配置业务服务所需要做的。 然后,我们进入代理服务,在该服务上执行所有操作。

配置代理服务

  • 右键单击创建的“ proxy”文件夹,选择“新建”->“代理服务”并提供有效名称。
  • 在“常规”选项卡中,选择“ WSDL Web服务”,然后单击浏览。
  • 现在,在代理服务中,您需要选择我们创建的代理WSDL文件,该文件将向外部客户端公开。

  • 转到“消息流”选项卡。 在该选项卡中,首先从右侧的“设计面板”中拖动“路线”元素。
  • 然后,将“路由”元素拖到“路由”元素中。
  • 单击“路由”元素,然后在底部窗格中,进入“属性”选项卡,您将在其中提供此代理服务将访问的业务服务和操作名称。

  • 结果如下:

  • 然后将“替换”动作拖到“请求动作”组件中。
  • 在我们为“替换”操作提供“属性”选项卡上的信息之前,我们需要创建XQuery转换文件,该文件将代理服务请求映射到业务服务请求,然后将业务服务响应映射回代理服务响应。
  • 右键单击“ transformation”文件夹,然后选择“新建”->“ XQuery转换”。 输入一个有效的名称。 对于请求和响应转换文件都应该这样做。
  • 使用的请求转换文件如下:
(:: pragma bea:global-element-parameter parameter="$fetchSubscriber1" element="ns2:FetchSubscriber" location="../wsdl/SubscriberProxyService.wsdl" ::)
(:: pragma bea:local-element-return type="ns1:InstalledBaseSubscriberClassificationQuery/ns0:InstalledBaseSubscriberClassificationQuery" location="../wsdl/subscriber_classfication.wsdl" ::)declare namespace ns2 = "http://www.example.org/SubscriberProxyService/";
declare namespace ns1 = "http://www.openuri.org/";
declare namespace ns0 = "http://mtnsa.co.za/si/IB/IBSubscriberClassificationQuery";
declare namespace xf = "http://tempuri.org/OSB%20training%201/transformation/subscriberrequest/";declare function xf:subscriberrequest($fetchSubscriber1 as element(ns2:FetchSubscriber))as element() {<ns1:InstalledBaseSubscriberClassificationQuery><ns0:InstalledBaseSubscriberClassificationQuery><ns0:Request>{if (data($fetchSubscriber1/EquipmentType) = "MSISDN") then<ns0:MSISDN>  { (data($fetchSubscriber1/EquipmentValue))}</ns0:MSISDN>else <ns0:SIMCard> { data($fetchSubscriber1/EquipmentValue)}</ns0:SIMCard>}</ns0:Request></ns0:InstalledBaseSubscriberClassificationQuery></ns1:InstalledBaseSubscriberClassificationQuery>
};declare variable $fetchSubscriber1 as element(ns2:FetchSubscriber) external;xf:subscriberrequest($fetchSubscriber1)

如您所见,在这里,我们检查设备类型是否等于“ MSISDN”,然后在业务服务上设置适当的元素。

  • 使用的响应转换文件如下:
(:: pragma bea:global-element-parameter parameter="$installedBaseSubscriberClassificationQueryResponse1" element="ns1:InstalledBaseSubscriberClassificationQueryResponse" location="../wsdl/subscriber_classfication.wsdl" ::)
(:: pragma bea:global-element-return element="ns2:FetchSubscriberResponse" location="../wsdl/SubscriberProxyService.wsdl" ::)declare namespace ns2 = "http://www.example.org/SubscriberProxyService/";
declare namespace ns1 = "http://www.openuri.org/";
declare namespace ns0 = "http://mtnsa.co.za/si/IB/IBSubscriberClassificationQuery";
declare namespace xf = "http://tempuri.org/OSB%20training%201/transformation/subscriberresponse/";declare function xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse))as element(ns2:FetchSubscriberResponse) {<ns2:FetchSubscriberResponse><TradeCustomerCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@ServiceProviderCode) }</TradeCustomerCode><PackageCode>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/ns0:Package/@ProductCode) }</PackageCode><PaymentOption>{ data($installedBaseSubscriberClassificationQueryResponse1/ns0:InstalledBaseSubscriberClassificationQuery/ns0:Response/ns0:Subscriber/@PaymentOption) }</PaymentOption></ns2:FetchSubscriberResponse>
};declare variable $installedBaseSubscriberClassificationQueryResponse1 as element(ns1:InstalledBaseSubscriberClassificationQueryResponse) external;xf:subscriberresponse($installedBaseSubscriberClassificationQueryResponse1)

这是一个简单的转换,其中我们根据需要将响应元素映射到代理响应元素。

现在我们回到代理服务,单击“替换”操作,转到“属性”选项卡。

  • 在“ In Variable”中,输入值“ body”。
  • 单击“表达”链接。 转到“ XQuery资源”选项卡,单击“浏览”,然后选择请求转换文件。
  • 在右侧的“可变结构”组件中,展开“ body”元素,然后选择request元素并将其拖放到“ Binding”文本框中,如下所示;

  • 然后选择“确定”,这将带您返回“属性”选项卡。
  • 选择“替换节点内容”单选按钮。 最终结果如下所示;

  • 现在,让我们将“替换”动作拖放到“响应动作”组件中。
  • 与之前相同,选择响应转换“ $ body / ins:InstalledBaseSubscriberClassificationQueryResponse”。
  • 现在,您将收到一条错误消息,指出无法识别“ ins”名称空间。
  • 为了解决该问题,请在相同的“属性”选项卡中,选择“名称空间”选项卡,然后单击“添加”。 输入前缀“ ins”和URI作为“ http://www.openuri.org/”。

就是这样。 现在我们可以测试功能了。 在执行此操作之前,请记住首先启动在SOAP UI上创建的模拟服务。

现在,让我们登录到服务总线控制台,转到代理服务并启动测试控制台。 这是我通过运行示例得到的结果;

如果在“调用跟踪”部分的同一屏幕上进一步浏览,则可以看到发生了什么的跟踪。 OSB完成的请求和响应转换如下所示;

至此,我们对Oracle Service Bus的介绍结束了。 如果您对此有任何疑问,请随时发表评论,我们将尽快答复。 另外,如果您有任何需要改进的地方,也请留下您的反馈意见,我们将不胜感激。

翻译自: https://www.javacodegeeks.com/2016/08/introduction-oracle-service-bus.html

Oracle Service Bus简介相关推荐

  1. Oracle Service Bus –线程阻塞案例研究

    本案例研究描述了在AIX 6.1和IBM Java VM 1.6上运行的Oracle Service Bus 11g遇到的线程阻塞问题的完整根本原因分析过程. 本文也是您提高线程转储分析技能的绝佳机会 ...

  2. OSB集成平台项目-回顾 (Oracle service bus)

    甲方项目经理详细讲述整个项目的历程,内中包含大量企业级ESB的技术细节,抛砖引玉供大家分享. 金康汽车数据集成平台项目从2018年6月15日项目启动,通过项目组近6个月的努力,于2018年12月28日 ...

  3. 数据集成平台的特点(Oracle service bus)

    时间过得很快,ESB(数据集成平台)项目本月就要上线,之后转入运维. 现在总结一下,数据集成平台有以下特点: 1.高效稳定的消息处理 2.简单易用的数据管理 3.接口服务整体企业架构高可用 4.多协议 ...

  4. oracle线程阻塞_Oracle Service Bus –线程阻塞案例研究

    oracle线程阻塞 本案例研究描述了在AIX 6.1和IBM Java VM 1.6上运行的Oracle Service Bus 11g遇到的线程阻塞问题的完整根本原因分析过程. 本文也是您提高线程 ...

  5. Service Bus EAI EDI 实验室发布了

    作为对Windows Azure连续性创新的一部分,今天我们很高兴地宣布了Windows Azure Service Bus EAI & EDI 实验室的发布.在前一版本的实验室发布的时候,我 ...

  6. 集成 AquaLogic BPM Suite 6.0 和 AquaLogic Service Bus

    集成 AquaLogic BPM Suite 6.0 和 AquaLogic Service Bus 作者:Alex Toussaint  07/11/2007 摘要 AquaLogic BPM Su ...

  7. 【Microsoft Azure学习之旅】测试消息队列(Service Bus Queue)是否会丢消息

    组里最近遇到一个问题,微软的Azure Service Bus Queue是否可靠?是否会出现丢失消息的情况? 具体缘由如下, 由于开发的产品是SaaS产品,为防止消息丢失,跨Module消息传递使用 ...

  8. java message bus_【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例...

    今年项目组做的是Cloud产品,有幸接触到了云计算的知识,也了解并使用了当今流行的云计算平台Amazon AWS与Microsoft Azure.我们的产品最初只部署在AWS平台上,现在产品决定同时支 ...

  9. Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic

    <Windows Azure Platform 系列文章目录> 项目文件,请在这里下载 在笔者之前的文章中Windows Azure Service Bus (1) 基础 介绍了Servi ...

最新文章

  1. Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据
  2. 面试准备--7.31
  3. 建立linux两用户之间的信任关系
  4. echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?
  5. 阿里巴巴研究员叔同:云原生是企业数字创新的最短路径
  6. SPS2003升级MOSS2007时SSO部件错误解决
  7. ActiveMQ持久化方式(转)
  8. apt-get update 问题 及gcc高亮
  9. 腾讯微博——点击按钮自动加关注代码
  10. [转]wchar_t char std::string std::wstring CString 转换
  11. 数据分列将数字转换成文本格式
  12. 非常好用的离线地图APP
  13. 苹果软解ID软件(X.PASSWORD-XIMEI 苹果id锁)--上帝左手汉化组(内附即时更新)
  14. php 开源项目汇总
  15. 百变怪之善口技者——mocking bird 完全指北
  16. 1253 Dungeon Master
  17. Mega2560串口通信实现
  18. 利用python you-get库下载网络视频、音乐及图片
  19. 著名数据恢复工具有哪些是好用的
  20. 学科前沿技术(摩尔定理,其对现在是否还有效)

热门文章

  1. JavaScript原生添加移除class的方法
  2. 一次恐怖的 Java 内存泄漏排查实战
  3. 什么时候才能都及格呢?
  4. 纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
  5. delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点
  6. mysql引擎总结_MySQL存储引擎对比总结
  7. 通过图书编号查询python_Python图书接口调用代码实例
  8. HDU2068(错列排序)
  9. 使用阿里巴巴json映射_使用JSON模式验证来映射稀疏JSON
  10. 自动化测试框架 2019_2019年用于自动化的5个最佳Java测试框架