Oracle ESB的adapter适配器调用EBS的业务事件说明

文章介绍了如何使用Oracle的OSB(OracleServiceBus)作为ESB产品进行业务事件集成,特别是通过建立触发器和业务事件来实现实时消息推送,同时避免对EBS系统造成压力。文中详细阐述了开发步骤,如创建业务事件、订阅配置以及适配器的监控机制。此外,还列举了可能遇到的问题,如事件延迟、适配器无法监控到事件及队列表过大,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成

        公司开始上OSB就是Oracle 的ESB产品,有一个很好的功能,可以实时推送消息,又不会对EBS造成太多压力,并且可以避开请求堵塞的情况。就是利用OSB的adapter适配器,订阅EBS的事件,获得消息后在调用对应的EBS程序完成系统数据的传递。

        但是限于实施公司的能力做的不太好,在上线后遇到了一些坑,我们发现了一些,还有一些问题没有解决,做一下总结。

        做以下记录:

                1. 做下业务事件方式集成的开发说明;

                2. 对遇到的坑做下说明(持续更新)

开发步骤

        1. ERP对数据变更的表建立触发器,如果监控的字段数据发生变更,则调用工作流事件,产生相应的事件,事件中包括事件名称和相关参数;

        sysadmin用户登录:系统管理员->工作流->管理员工作流->业务事件,点击“创建事件”

        名称规范:参考java的规范,必须唯一

        显示名称:对该时间做说明

        责任人姓名和标记:我是用的应用的TOP名

        完成后店家“创建”,会生成一行业务事件,上面有三个按钮“订阅”、“更新”、”测试“

                订阅:一个业务会产生一个订阅

                        注意:订阅中有一个参数 执行条件->阶段,一般是50,阶段的值小于99事件会实时被adapter调用,大于100以上adapter的监控会有延迟

                更新:对业务事件的设置做更新

                测试:可以在界面生成业务事件,快速测试

        2. OSB的adapter适配器会秒级监控EBS的业务事件表,发现新的事件之后,获取事件中的参数,包括EBS注册的事件名称和参数;

        3. OSB根据获得的事件名确认需要调用EBS的程序包,将业务事件中的参数传递给EBS程序包,获得返回参数(真实的报文),并将返回参数传递给其他系统,完成数据集成;

        以上是OSB业务事件的一种集成方法,主要是借用Oracle的高级队列AQ,建立业务事件,通过业务事件触发系统数据集成。这种方法也可以完成其他的需求。

        这种集成方式,适合于做单据类数据下发,因为单据产生的频率较低。不适合大批量数据变更的下发,因为一旦有大批量数据变更,鉴于表级的触发器,会产生大量的业务事件,造成ESB的集成事件拥堵。

        比如物料表建立触发器,每便跟一行物料数据就建立一个业务事件,如果瞬间更新100W的物料信息,则会瞬间产生100W的集成业务。

避坑说明

        1. 业务事件很久才会被adapter发现:

                查看业务事件的订阅,执行条件->阶段,如果该参数值大于100会延迟,一般改成50

        2.ESB的adapter一直监控不到该业务事件:


                OSB在建立了监听后,会在EBS生成一个订阅者,查询sql为

SELECT *
  FROM Aq$wf_Bpel_Qtab_r t WHERE t.RULE LIKE '%gtk.oracle.apps.erp.subinventory.change%';

其中的name字段为订阅者名称,该名称需要与OSB中设定参数一致,才会被OSB获取到。

如果name名称与OSB中设置的不一致,或者根本不存在,则需要在EBS重新注册,代码如下:

DECLARE
  Subscriber Sys.Aq$_Agent;
BEGIN
  Subscriber := Sys.Aq$_Agent('my name', 'APPS.WF_BPEL_Q', 0);
  Dbms_Aqadm.Add_Subscriber('WF_BPEL_Q'
                           ,Subscriber
                           ,'my rule');
  COMMIT;
END;

以上代码中,my name需要OSB提供,my rule需要OSB提供

以下是例子

DECLARE
  Subscriber Sys.Aq$_Agent;
BEGIN
  Subscriber := Sys.Aq$_Agent('ORA_8op3gdpp8cp36da460s3ah216h', 'APPS.WF_BPEL_Q', 0);
  Dbms_Aqadm.Add_Subscriber('WF_BPEL_Q'
                           ,Subscriber
                           ,'tab.user_data.event_name = ''gtk.oracle.apps.erp.vendor.change'' AND tab.user_data.getvalueforparameter(''GROUP'') IS NULL');
  COMMIT;
END;

参考文档:metalink文档  Doc ID 1954592.1

3. Wf_Bpel_Qtab表过大

        该表存储数据过大,历史无效数据未被删除,无法直接delete和truncate,具体清理方法还不确定。

        考虑dequeue,应该有方法的。持续更新

        参考metalink文档:Doc ID 549040.1

相关sql

查看生成的业务事件

SELECT  /*+parallel(t,12)*/ t.State
      ,t.User_Data.Event_Name
      ,t.User_Data.Send_Date
      ,t.User_Data.Event_Key
      ,t.*
  FROM Apps.Wf_Bpel_Qtab t
 WHERE 1=1
 AND t.User_Data.Event_Name = 'gtk.oracle.apps.erp.subinventory.change' --客户
 --AND t.User_Data.Event_Name = 'gtk.oracle.apps.erp.project.change' --项目
 --WHERE t.User_Data.Event_Name = 'cux.oracle.apps.wms.sale.order.event'--子库存
   AND t.User_Data.Send_Date > To_Date('2023/3/17 14:41:38', 'YYYY-MM-DD HH24:MI:SS')
   ORDER BY t.User_Data.Send_Date DESC;

查看队列状态

SELECT Corrid
      ,Decode(State
             ,0
             ,'0 = Ready'
             ,1
             ,'1 = Wait'
             ,2
             ,'2 = Processed'
             ,3
             ,'3 = Exception'
             ,To_Char(State)) State
      ,COUNT(*) COUNT
  FROM Wf_Deferred
 GROUP BY Corrid
         ,State;

select * from user_queue_tables;--业务时间表
select * from user_queues t WHERE t.name = 'WF_BPEL_Q';--队列
select * from user_queue_subscribers;--订阅者
select * from user_queue_schedules;

1. 练习一:Oracle Service Bus 的安装.......................................................................................3 2. 练习二:配置OSB 的域模版.................................................................................................6 3. 练习三:部署WebServices 及其客户端应用......................................................................12 4. 练习四:使用Service Bus Console 创建配置项目..............................................................16 5. 练习五:创建Business Service 和Proxy Service ................................................................22 6. 练习六:OSB 中使用Java 方法...........................................................................................40 7. 练习七:OSB 中调用EJB ....................................................................................................52 8. 练习八:OSB 中使用文件服务............................................................................................72 9. 练习九:OSB 中配置Local Proxy .......................................................................................82 10. 练习十:OSB 中使用文件代理............................................................................................87 11. 练习十一:OSB 中的项目导入和导出................................................................................94 12. 练习十二:OSB 中使用JMS 服务.....................................................................................102
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值