Oracle Service Bus简介

我们正在为电信提供商设计一个新系统,在该系统中,我们研究了用作企业服务总线的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文件,您将看到两个选项。 选择一个以“(端口)结尾的”。

img1

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

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

配置代理服务

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

img2

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

img3

  • 结果如下:

img4

  • 然后将“替换”动作拖到“请求动作”组件中。
  • 在我们为“替换”操作提供“属性”选项卡上的信息之前,我们需要创建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”文本框中,如下所示;

img5

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

img6

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

img7

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

img8

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

img9

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2008中源文件与模块生成时的文件不同,仍要让调试器使用它吗

解决办法: 1.在工具-> 选项-> 调试-> 常规 里 把“要求源文件和版本匹配”的勾勾去掉 然后去掉“地址级的调试”的勾勾&#xff08;这样就不会出现反汇编代码了&#xff09; 然后重新引用 2.直接把WEB项目下面的Bin文件夹下的BLL全部删除。 3.若出现如下的警告信息 仔…

Linux中的15个‘echo’ 命令实例

作者&#xff1a; tecmint Avishek Kumar 译者&#xff1a; LCTT geekpi | 2014-10-03 12:42 评论: 4 收藏: 5 分享: 5 echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令&#xff0c;通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或…

springboot redis 断线重连_Redis高可用方案实现

redis中为了实现高可用&#xff08;High Availability&#xff0c;简称HA&#xff09;&#xff0c;采用了如下两个方式&#xff1a;主从复制数据。采用哨兵监控数据节点的运行情况&#xff0c;一旦主节点出现问题由从节点顶上继续进行服务。主从复制redis中主从节点复制数据有全…

罗德里格斯(Rodrigues)旋转向量与矩阵的变换

在做双目立体视觉深度图像生成的时候&#xff0c;遇到旋转向量&#xff08;1x3&#xff09;与旋转矩阵&#xff08;3x3&#xff09;的概念&#xff0c;得知二者可以通过罗德里格斯相互转化。 1.旋转的表示 处理三维旋转问题时&#xff0c;通常采用旋转矩阵的方式来描述旋转变换…

Mongodb 分片与副本集

测试搭建192.168.3.110mongos 30000&#xff0c;30001,30002config 40000,40001,40002shard1 50001,50002,50003shard2 50004,50005,50006,shard3 50007,50008,50009[rootmysql-slave10 data]# mkdir -p /data/config/1/data[rootmysql-slave10 data]# mkdir -p /data/config/2…

python必读5本书籍_免费下载!5本从Python入手机器学习的必备电子书!(附链接)...

大数据文摘授权转载自数据派THU作者&#xff1a;Richard Gall编译&#xff1a;车前子、丁楠雅今天&#xff0c;机器学习已成为软件工程所有领域中最重要的发展趋势之一。这门技术不再局限于研究者和数据分析者&#xff0c;从网络安全到网络开发机&#xff0c;器学习都至关重要。…

error c4996: 'fopen' This function or variable may be unsafe如何解决

1.问题描述 VS2013OPENCV249&#xff0c;不止一次遇到以下类似错误&#xff1a; error C4996: fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.d:\open…

JavaParser中AST节点的观察者

我们离JavaParser 3.0的第一个候选发布版本越来越近。 我们添加的最后一项功能是支持观察抽象语法树的所有节点的更改。 当我为此功能编写代码时&#xff0c;我收到了Danny van Bruggen&#xff08;又名Matozoid&#xff09;和Cruz Maximilien的宝贵反馈。 因此&#xff0c;我使…

nc命令详解

NetCat&#xff0c;在网络工具中有“瑞士军刀”美誉&#xff0c;其有Windows和Linux的版本。因为它短小精悍&#xff08;1.84版本也不过25k&#xff0c;旧版本或缩减版甚至更小&#xff09;、功能实用&#xff0c;被设计为一个简单、可靠的网络工具&#xff0c;可通过TCP或UDP协…

startindex 不能大于字符串长度_「12」学习MySQL第二类函数:字符串函数

前一篇文章总结了下MySQL中常用的数学函数&#xff0c;本文接下来的重点就是认识“字符串函数”。上图这匹漂亮的马儿就是通过各种字符(字母、括号、逗号、竖线等)画出来的。我不由自主地会去想下面几个问题&#xff1a;它到底有多少个字符&#xff1f;--字符串长度它里面的小写…

对数函数的C、MATLAB表示

1、C语言中的对数函数 头文件&#xff1a;#include格式&#xff1a;①double log (double x);log() 函数返回以 e 为底的对数值&#xff0c;即数学中的lnx&#xff1b;如果 x 为负数或 0&#xff0c;则会发生错误并设置 errno 值。错误代码&#xff1a;EDOM&#xff1a;参数x 为…

微信小程序开发——超链接或按钮点击跳转到其他页面失效

1. 超链接导航失效&#xff1a; 小程序规则——wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabbar 页面&#xff0c;只能用 wx.switchTab 跳转到 tabbar 页面转载于:https://www.cnblogs.com/xyyt/p/9252835.html

javaone_JavaOne 2012:Lambda之路

javaone我最热切期待的JavaOne 2012演讲之一是Brian Goetz的“通往Lambda的道路”。 昨晚的技术主题演讲中的Lambda味道仅增加了预期。 这是在希尔顿广场A / B举行的&#xff0c;距离我之前在金门大桥A / B / C参加的演讲仅几步之遥。 我曾预计会打包相对较大的Plaza A / B&…

uml 时序图_UML各种图总结:

UML的书籍&#xff1a;《UML distilled》、《UML和模式应用》、《UML用户指南》、《UML对象设计与编程》、《UMLOracle8建模》UML&#xff08;Unified Modeling Language&#xff09;是一种统一建模语言&#xff0c;为面向对象开发系统的产品进行说明、可视化、和编制文档的一种…

让程序结果在屏幕上暂停一段时间

现在使用VS2013输出printf显示结果&#xff0c;经常会出现一闪而过的情况&#xff0c;现有以下解决办法&#xff1a; 1.调用系统命令暂停 #include <stdlib.h>system("pause");2. #include<conio.h> getchar(); 3. #include<stdlib.h> getchar(); …

Linux shell的标准输入、输出和错误

1.文件描述符 在linux shell执行命令时&#xff0c;每个进程都和三个打开的文件相联系&#xff0c;并使用文件描述符来引用这些文件。由于文件描述符不容易记忆&#xff0c;shell同时也给出了相应的文件名&#xff1a; 文件文件描述符输入文件—标准输入0&#xff08;缺省是键…

微基准测试进入Java 9

我已经几个月没有在这里写文章了&#xff0c;这种例外也会继续下去。 我计划在明年三月左右恢复写作。 本文末尾的说明。 等待&#xff01; 不完全是最后&#xff0c;因为您可以向下滚动。 它在文章结尾处。 继续阅读&#xff01; 三年前&#xff0c;我在写有关Java编译器如何…

摆渡车(noip2018 pj t3)

摆渡车&#xff08;题目和测试右转 洛谷P5017&#xff09; 做法&#xff1a;dp各种优化(剪枝) 这道题考场上看了一脸懵逼...第一眼看这 tm 不是个一维dp吗...结果按着这个朦胧的思路&#xff0c;删删改改约莫0.5h&#xff0c;终于过了小样例&#xff0c;然后一测大样例...GG了。…

关于树的冷知识

1、为什么冬天树干刷白漆&#xff1f; 刷的是是石灰水&#xff0c;主要成分是石灰乳,还有食盐,大豆粉,石榴合剂。 好处一、石灰具有一定的杀菌、杀虫作用&#xff0c;可以杀死寄生在树干上的一些越冬的真菌、细菌和害虫。 好处二、由于害虫一般都喜欢黑色、航脏的地方&#x…

乐玩自动化测试模块_自动化测试模型(一)自动化测试模型介绍

一个自动化测试框架就是一个集成体系&#xff0c;在这一体系中包含测试功能的函数库&#xff0c;测试数据源&#xff0c;测试对象标准&#xff0c;以及各种可重用的模块。自动化测试在发展过程中经历了以下几个阶段&#xff0c;模块驱动测试&#xff0c;数据驱动测试及对象驱动…