龙空技术网

采用Oracle OSB总线进行服务注册和接入

人月聊IT 1592

前言:

现在朋友们对“php调用oracle函数”都比较关心,各位老铁们都需要分析一些“php调用oracle函数”的相关资讯。那么小编在网上网罗了一些关于“php调用oracle函数””的相关知识,希望各位老铁们能喜欢,大家快快来了解一下吧!

做大型企业内部业务系统集成的应该都知道,Oracle SOA套件当前是应用广泛的一个商业集成产品套件,其中包括了OSB服务总线, BPEL业务流程引擎,BPM业务流程管理,ODI大数据服务集成,MFT文件传输平台,基本覆盖了业务集成和数据集成的各方面。

今天整体下Oracle OSB服务总线的技术原来和采用OSB进行服务注册接入的方法流程。

OSB产品基本功能概述

消息交换总线技术是为了实现企业数据共享和应用集成,提供一种基于企业服务总线(ESB)的信息共享交换平台。该技术采用面向服务体系结构(SOA)的设计思想,以信息共享为目标,具有松散耦合的特点,实现了"集中式管理、分布式运行"的工作模式。通过设计标准的适配器组件,实现各种数据库和应用系统之间的数据共享与交换,能有效实现企业中信息共享,并具有良好的可扩展性和可靠性。

Oracle的OSB总线包括ESB(Enterprise Service Bus)和 WSM(Web Service Management)两大部分,是ORACLE公司的消息交换总线产品。

ESB包括MOM, ORBs, RPCs, WebServices功能的新型、综合类型中间件,通过配置集成;WSM包括服务管理,消息跟踪两个部分。使用OSB可以很容易的将企业已有的对外功能集成进来,并且能够集成和开发出来新的功能。

ESB服务总线的核心功能再做简单总结:

服务代理和位置透明

ESB的一个重要功能,即将遗留系统或外部接口或服务能力接入到ESB,通过ESB再包一层后形成统一的服务目录朝外部发布,起到服务中介和原始无法位置透明的作用。最简单的服务代理就是仅仅只做服务路由转发,其它啥都不做,因此在OSB消息流绘制最简单的就是重要的pipeline是空的,仅仅只有业务服务和代理服务。

协议转换和遗留系统适配接入

协议转换是ESB的一个重要功能,其中包括了HTTP,TCP,FTP,JMS,EJB,MQ,FILE,SMTP等多种协议之间转换和适配能力。比如你可以接收一个SOAP WS服务调用请求,并将接收到消息写入到JMS;或者说你也可以通过JCA适配到某一个数据库,将数据库表发布为一个Http Rest查询服务接口。

消息格式和内容转换

这个一定要和协议转换分开来谈,支持多种消息格式和类型往往就是指的可以通过transform和数据映射功能将XML,JSON,Flat File,MFL等多种消息格式类型之间进行数据映射和转换。举例来说,你可以服务调用的输入都是Http Rest服务接口,但是输入可以是Json格式,而输出可以转换为XML文本输出。

服务路由(包括静态路由和动态路由)

路由是ESB中非常重要的仲裁逻辑之一。路由场景是非常普遍的。譬如,针对不同的客户提供不同QoS的场景,执行时需根据客户的类型将其路由到不同执行能力的服务提供者;再比如当响应消息到达ESB时,总是需要将该响应消息送回最初的服务请求者处。

路由可分为静态路由和动态路由。静态路由指得是设计时已经明确路由分支的情况,而动态路由的路由分支选择是在运行时动态确定的。不论是静态路由还是动态路由,路由分支的选择一定伴随着一个或一系列决策依据。决策依据可简单如一个If-Else语句,也可以复杂到需要通过多维决策表并通过多次判断才能得到最后的路由分支。

数据映射转换(Transform)& 内容丰富(Service Enrichment)

数据映射转换是ESB的另外一个核心功能,举个例子来说我们根据一个标准的WSDL契约要求定义一个代理服务,而对于业务服务则是适配和连接到一个数据库表并返回一个结果集,那么这个WSDL结构就需要和数据库返回结果集的业务服务间进行数据映射和转换。

一般而言,大多数ESB产品都提供了多种数据转换的方式,很多产商宣传中力推的都是“拖拽式”可视化映射的转换方式。该功能听起来的确很酷,看上去很直观。但是正如我们前面所说的,ESB是一个偏向技术层整合的组件,业务人员一般不会关心XML是如何转换成SOAP的。所以,对于开发者来说,这种“炫”功能并无太大吸引力。更重要的是,他们可能非常习惯于自己的编程语言,如Java、XSLT、ESQL和PHP等,这些语言操作起来要简单很多。

在OSB 12C增加了可视化的XSLT数据映射功能,XSLT是一个标准的XML转换语言,使用XSLT实现的转换逻辑可很轻易地在不同ESB产品间移植。几乎所有主流商业ESB产品都支持XSLT的转换机制。

对于内容丰富来说,举例来说当接收到消费者的服务调用请求后,我们需要对输入消息内容进行补填再去调用原始的业务服务,也可能是OSB接收到Response返回消息后,我们会进一步补充实例ID,服务状态等信息后再返回给服务消费方,这些都属于内容丰富的范畴。

OSB消息处理机制和运行原理

OSB中的服务包括代理服务(Proxy Service)和业务服务(Business Service)两种。

业务服务一般用作将外部已有服务接入到OSB总线上,代理服务的作用是将已有服务进行重新包装和整合,进行服务路由、逻辑处理之后对外发布新的服务。

在OSB消息流中,一般都是通过Proxy Service对外发布服务的,客户端通过调用在Proxy Service中定义好的URL来调用OSB总线上的服务。

当客户端调用Proxy Service的时候,消息先经过Proxy Service传输层(Transport)进入,传输层是有协议的,他可以解析和接入各种传输协议;然后通过绑定层(Binding)对传输层接入的消息及协议进行解析 ,对消息内容进行解析并且存放到上下文变量中,经过绑定层解析后的消息格式一般是通过SOAP格式进行包装并且附在以后的整个消息流传输过程中,以后的处理节点就通过访问上下文变量来查看、获取、编辑消息内容和消息结构。

OSB核心经过Pipeline管道来进行消息路由,转换,映射,异常处理等一系列操作,如下图:

里面的几个关键组件为:

Pipeline表示一个消息流转中批量的处理逻辑Stage可以被认为是一组动作处理的容器Action是消息流中的逻辑,它用于具体决定如何处理消息Branch节点可以让流程处理进入具体多个可能的处理路径中的一个

在OSB消息流开发过程中,对于各种功能节点都可以使用XQUERY或者XPATH语言对节点属性、处理流程进行配置;而对于消息流的流程控制语句也是使用XQUERY来实现的。对XQUERY和XPATH有个基本的了解是能够进行消息流深入开发的重要基础。

XPATH是标准的XML表达式语言,用于标识或定位XML文档中的某一部分,对于很多消息处理节点中的配置参数,都需要使用XPATH语言来表述,如对于DELETE(作用是删除消息中的某个元素或者属性)处理节点,就需要使用XPATH语言来描述删除目标元素。XQUERY是一种用于XML文档的结构化语言,用来描述循环和判断、函数处理、流程处理和控制、构造SOAP消息、处理消息结构和内容等处理命令的一种语言。

在OSB上,一般比较复杂的处理逻辑都需要这两种语言来实现。

OSB中对消息结构/内容进行转换一般通过XQUERY语言来实现,可以在WORKSHOP中使用可视化界面进行拖拽操作来实现消息格式转换,然后将生成的xq文件上传到控制台即可。

OSB中的其它关键术语进一步解释和说明

业务服务(Business Service)

Business Service是在OSB中所定义的,用于表示希望与后端交换信息的企业服务。简单来说业务服务实际就是需要接入到ESB总线的后端原始服务。

代理服务(Proxy Service)

业务服务接入到OSB后,OSB需要封装一遍然后再发布出去,最终发布出去的服务即代理服务。简单来说业务服务对消费方透明,消费方只能够访问代理服务,然后由OSB路由到具体的原始业务服务上面。

端点(Endpoint)

一个基于资源定位标志符的地址。Business Service的端点是接入的外部服务的资源地址;而Proxy Service是对外发布的新服务的资源地址。注意WSDL地址和端点地址不同,在访问到WSDL后,端点地址在WSDL的Port部分可以看到具体location。

消息流(Message Flow)

消息流定义了代理服务的实现。消息流可以包括管道对和下列节点:开始、路由和分支。消息路由、业务逻辑处理、服务编排、服务整合等操作都是在消息流中实现,在OSB开发中,主要工作就是消息流的开发和调试。

管道对(Pipeline Pair)

通过“编辑消息流”也可以添加管道对节点。管道对节点包含一个请求管道和一个响应管道。消息流可以不包含管道对节点,也可以包含多个管道对节点:代理服务(或对服务的操作)的请求和响应管道,以及可为阶段、管道和代理服务定义的错误处理程序管道。管道可以包括一个或多个阶段,阶段又可以包括操作。

阶段(Stage )

阶段是操作的容器,如消息路由、日志记录、消息广播、消息传送等操作都可以放到阶段中操作。

动作(Action )

动作是用户定义的运行时的逻辑步骤,用户需要实现的功能一般通过添加动作节点来实现,OSB已经提供了很多不同类型功能各异的默认节点,方便用户进行消息流开发。

路由节点(Route Node )

路由节点是在管道对中的请求和返回之间的交换节点,主要是用于调用业务服务。用于定义消息目标的容器也可以用于执行单向通信,例如使用文件或email作为代理服务中请求处理和应答处理的分界点当Route节点分发了请求消息后,请求处理就认为结束,而当Route节点收到应答消息时,表明应答处理的开始。

路由节点一般出现在管道对之后,处于管道对中的请求和应答之间。

上下文变量(Context Variables)

上下文变量是消息进入OSB总线之后的存储载体。在消息通过传输层之后,绑定层会自动根据消息协议和消息内容,将其绑定到上下文变量中;当消息要输出OSB之前,OSB会根据需要自动将上下文变量中的消息内容转换成为符合输出协议类型的消息格式。

功能架构和关键技术原理

从OSB的功能架构图可以看到,实际的OSB架构包括了消息适配,统一安全管理,配置框架,服务虚拟化,服务管理几个部分的内容。而对于实际的服务封装(代理服务,业务服务,管道)都在服务虚拟化部分里面,功能图上只是列出了基于内容动态路由,消息转换和服务消息链等几个关键点。

对于OSB服务总线,基本支持业界常见的各种消息服务接入。

Web Service Transports• HTTP/SOAP, REST, WS-I, WS-Security,WS-Policy, WS-Addressing• SOAP v1.2 and v1.1传统的消息• HTTP, JMS, AQ, MQ Native transport,EJB/RMI, Tuxedo, FTP, SMTP, File• EJB/RMI on WebSphereTransport SDK• Enterprise-specific custom transportsJCA Adpaters• Build-in Oracle EBS, Database• PeopleSoft, Siebel, JD Edwards,SAP

协同工作能力

• .NET, Tibco EMS, IBM WebSphere, Apache Axis, Cyclone B2B Interchange, iWay 5.5 adapters

统一安全管理

对于服务安全管理,最常说的就是服务的传输安全,消息安全,访问控制安全,数据安全等标准内容。而对于功能架构图里面主要是在强调认证、授权、身份验证,签名/加密几个方面的内容。而对于OSB的安全管理体系,个人认为重点仍然要放在OWSM和安全策略上面。

OWSM是用于安全、管理和治理的策略创建的运行时框架。您可以创建策略,将它们附加到服务总线中的服务,并在消息传递生命周期中与OWSM代理一起执行这些策略。Oracle Web服务管理器(OWSM)是服务总线使用的Web服务安全机制。所有新创建的资源,如业务服务和代理服务,都使用OWSM策略来保证安全性。WLS 9策略被弃用,不能用于为新的服务总线资源配置安全性。

服务虚拟化(Service Virtualization)

强大的服务组装能力基本全部体现在服务虚拟化部分,即实际的服务开发和封装,服务路由和转换等基本都是服务虚拟化的内容,包括我们实际在OSB操作中的业务服务和代理服务的创建,消息流的绘制(管道创建,验证,路由,Split/Join)等操作。

具体的服务虚拟化和OSB强大的服务组装能力基本可以参考下图:

OSB支持的协议(Protocols)和消息格式

这是11g里面的一页PPT,对于OSB支持的协议和消息格式相对来说是相对完整,包括了对TCP(Socket)等协议的支持能力。同时对于消息格式包括了对Json,MFL,FlatFile等各种消息格式。

Proxy消息处理机制

这里面需要深入了解,即整个消息处理和运行机制是如何的,具体如下:

1. 传输层Transport Layer(接收消息)2. 绑定层Binding Layer (解包消息,得到真正的消息体)3. 代理服务Proxy Service(消息处理逻辑)4. 绑定层Binding Layer (打包消息,得到真正的消息体)5. 传输层Transport Layer(返回和发送消息)

Business Service是在OSB中所定义的,用于表示希望与后端交换信息的企业服务,理解这点相当重要。因为你既可以把外部已有的业务系统提供的WS引入并映射为一个业务服务,也可以在通过JCA等适配后将外部的业务系统能力发布为一个业务服务。

消息流的绘制和处理(Message Flow)

对于消息流的绘制重点还是在管道Pipeline上,而管道核心是包括了Request请求处理,调用Business Service服务,Response返回三个部分的内容。管道真正将以上三个部分衔接为一个整体,也是OSB的轻量服务能力编排的重要体现。

通过管道就可以实现消息路由,验证和校验,异常处理,Split/Join等操作。

消息格式和内容转换(Transformation)

XML to XML (XQuery or XSLT)XML to Text/Binary (XQuery)Binary to Binary (MFL)

而实际上当前我们使用最多的仍然是XQuery+XSLT进行消息转换。在11g的时候更多的是使用XQuery+XPath代码的方式进行转换和映射,而在12c版本已经增加了XSLT的可视化数据映射能力,这是消息转换这块相对大的一个能力提升。

通过OSB进行代理服务接入

今天详细讲解下在osb console控制台进行最简单的代理服务封装。在前面几篇文章里面已经谈到过,osb console代理服务的封装基本延续创建项目,导入资源,创建代理服务和业务服务,绘制管道和消息流几个关键步骤,今天基于这个步骤做一个讲解。

在进入到osb console控制台后,首先通过右键菜单创建一个新项目,在OSBProject可以看到一个完整的已经设计封装完成的代理服务项目的目录和资源结构,具体如下:

我们首先通过右键菜单创建一个TestProj_Heminglu的新项目出来,然后在这个新项目下创建BusinessServices,ProxyServices,Resources三个子文件夹来分别存放代理服务,业务服务和资源文件信息。在将详细创建过程前,我们先介绍下,在osb console控制台点击右键菜单后创建->资源后可以创建的服务和资源类型信息。

第一个tab是服务,在服务tab里面可以看到,可以创建代理服务,业务服务和管道。

代理服务:代理服务是在 Service Bus 上本地托管的通用中介 Web 服务的 Service Bus 定义。代理服务通过接口 (不一定等同于服务提供程序或服务使用者业务服务的接口) 与外部服务进行通信。

业务服务:业务服务是在业务处理期间交换消息的企业服务的 Service Bus 定义。业务服务的配置包括其接口 (服务类型), 其用于与服务生成器连接的传输类型和配置, 安全要求, 消息处理, 性能优化和 SLA 预警规则。

第二个Tab是接口,更多的是接口契约,里面包括了WSDL,WADL,方案,WS策略等。其中WSDL是常说的基于SOAP WS的服务接口契约,而WADL则是基于REST服务接口的服务契约。

Web 服务策略框架 (WS-Policy) 是一个基于 XML 的可扩展框架, 它使用特定的安全扩展 Web 服务的配置, 并指定 Web 服务的安全要求, 期望和功能。在 Service Bus 中, WS-Policy 的主要用途之一是在代理服务和业务服务中配置消息级安全性。

JCA 绑定资源允许您创建通过 Oracle SOA Suite JCA 适配器与外部服务交互的业务服务和代理服务。JCA 绑定由服务 WSDL 文档和在 Oracle JDeveloper 中创建的相应 JCA 文件组成。在 Oracle Service Bus 控制台中, 需要将 JCA 文件上载到 JCA 绑定资源中才能基于该 JCA 适配器创建业务服务或代理服务。即JCA绑定主要用于数据库适配方面使用。

第三个Tab是转换方面的,里面包括了Xquery和XSLT和MFL,其中Xquery和XSLT主要用于WS服务接口,XML间的数据映射和转换。MFL主要用于二进制消息流的数据映射和转换。

XQuery 资源允许您定义用于在 XML, 非 XML 和 Java 数据类型之间转换数据的映射, 以便快速集成异构应用程序。XQuery 资源还可以包含 XQuery 代码段, 以便使用 XPath 查询 XML 文档并获取数据。

可扩展样式表语言转换 (XSLT) 映射描述 XML 到 XML 的映射。使用“创建 XSLT 文档”对话框可以为 Service Bus 项目创建新的 XSLT 转换。

MFL资源:Oracle JDeveloper 中提供的 Oracle Format Builder 允许您定义非 XML 数据记录的消息结构。定义二进制记录的层次, 字段的布局以及字段和组的分组时, 该信息将另存为消息格式语言 (MFL) 文档, 之后可以使用该文档执行运行时转换。使用 Format Builder 创建 MFL 文档后, 便可以通过创建 MFL 资源并将文件上载到该资源将文件导入到 Oracle Service Bus 中。

剩余的安全和其它两个Tab不再做进一步介绍,可以创建的基础资源介绍完成后,还是回到刚才代理服务的介绍,我们采用查询天气一个wsdl服务地址进行封装,将其发布为一个代理服务。

1. 导入WSDL资源文件

比如本地的查询天气的业务服务地址为:

访问到该WSDL地址和文件后,通过网页另存为,将其存储为一个本地文件globalweather.wsdl文件。创建一个Resource的资源文件夹,然后右键文件夹,点击创建资源->接口->wsdl创建资源,资源名为globalweather.wsdl,然后点击文件上载按钮上传上步存储到本地的wsdl文件。

2. 创建代理服务

在WSDL资源导入完成后,可以开始创建代理服务,代理服务是OSB发布出去的服务。首先创建一个ProxyServices文件夹,然后选中文件夹右键点击创建资源->服务->代理服务创建代理服务。代理服务的创建本身有三种类型,即:

SOAP类型化/无类型 REST向导中的类型化 REST (带 WADL)

在这里我们使用SOAP WS代理服务,对于Rest服务接口后续再做进一步详细介绍。代理服务资源名我们定义为GetWeatherInfoSrv_Proxy,对于服务定义为基于WSDl的服务,通过选择按钮,搜索,然后选中到刚才定义和导入的WSDL资源文件。选后对于端口/绑定,我们选择SOAP 1.1的版本保留兼容性。

对于管道部分checkbox默认选中,这样在代理服务创建完成后会自动创建管道。具体配置完成后的参考界面如下,可以看到配置的详细信息。

代理服务的创建向导最后一步涉及到端点地址,这个端点URI是可以任意配置的,用于和外部接口交互服务消费者使用的服务接口端点地址。你可以修改这端点地址,比如模式端点地址为:

/TestProj_Heminglu/ProxyServices/GetWeatherInfoSrv_Proxy

你也可以将前面的项目路径部分去掉,仅仅保留

/ProxyServices/GetWeatherInfoSrv_Proxy

3. 创建业务服务

注意我们访问 这个地址的时候,在这个文件里面可以看到该WS服务的提供的具体端点地址信息,即

soap:address location=";

我们实际调用的外部服务的端点地址信息在创建业务服的时候要使用到。

首先还是创建一个BusinessServices的文件夹,然后右键点击创建->资源->服务->业务服务来创建一个业务服务。业务服务资源名定义为GetWeatherInfoSrv_Business,

传输部分注意端点地址的配置,该端点地址即为外部实际的端点地址。负载均衡算法暂时默认不用修改。

4. 管道和消息流绘制

在代理服务,业务服务和资源文件全部创建和配置好,剩下的工作就是打开管道进行消息流的实际绘制,简单来说就是将代理服务和业务服务衔接到一起来。中间涉及到路由,分支或异常处理等。

选择ProxyServices目录下面的GetWeatherInfoSrv_Proxy-pipeline文件后,管道基础信息会显示在右边界面上,然后点击右上角的打开消息流小图标,即可以打开消息流绘制界面。

在打开消息流绘制界面后,选择到管道节点,可以看到出现的菜单中可以添加管道对,添加路由,添加条件分支等各种选择。通过添加这些内容进行消息流绘制。在这个案例中我们首先要添加路由,即将Proxy代理服务路由到实际提供业务能力的外部业务服务上。

实际我们要做的事情具体如下:

1. 选择到管道节点后,在菜单中选择添加路由,增加一个路由节点RouteNode1。2. 选择到RouteNode1节点,在出现的菜单中点击编辑路由。3. 点击编辑路由后,按如下进行菜单和按钮点击添加操作-》通信-》路由,进入到路由编辑界面。4. 在出现的编辑里面种有一个路由到服务,选择服务超链接,进入到服务选择界面5. 在服务选择界面中选择我们刚才创建好的业务服务信息。

在编辑路由界面注意,我们还可以在输入和输出增加额外的操作,比如增加日志记录节点等,如下:

5. 服务测试和验证

保存所有更改,选择代理服务,点击测试按钮。点击进去后我们会看到一个服务request信息,我们可以更改传参里面的参数值,以便获取正确的返回,然后点击下面的执行按钮,开始测试。注意点击绿色三角形测试按钮前,需要先激活会话。

标签: #php调用oracle函数