在我们的上一篇文章中、 将Oracle BRM与企业应用相结合我们解释了实现BRM到CRM集成的一种方法。建议的解决方案是在BRM一侧建立一个连接器,让它连接到第三方应用程序。然而,也可以采取不同的方法,使用 Oracle高级排队这将是本文的主题。
最近,我们参与了一个项目,客户想要一个 "安全 "的集成,而不需要是实时的;他们说,一个接近实时的解决方案就足够了。我们所说的安全集成是指有一个解决方案,不会因为Oracle BRM和第三方软件之间的通信链接失败(或任何其他错误)而影响任何执行的动作,如购买产品或创建账单。在实现数据集成的自定义dm连接器时,任何未成功完成的操作都会回滚整个操作。虽然这可能是一个理想的行为,但在这种情况下,它不是;因此,我们决定采用Oracle高级排队。我们已经确定,我们在这里最坏的情况是数据库问题,但也会有许多其他问题;首先,BRM系统将无法正常运行。
我们已经确定的其他优势是数据的持久性(事件存储在数据库中,直到消费者应用程序准备好处理排队的消息)和已经被证明的Oracle AQ技术。
我们已经成功地将这些变化部署到Oracle BRM 7.3和7.3.1版本,并使用Oracle数据库10g(10.2.0.1.0 64bit)和11g(11.2.0.1.0 64bit)的高级队列(AQ)组件。
使用Oracle高级排队工作发布Oracle BRM业务事件的过程可以在下图中看到:
为了制定这样一个同步过程,有必要采取一些初步措施。这些步骤包括:
1.EAI管理器的安装。
o EAI连接管理器(CM)模块(包括EAI要求的操作代码)、
o EAI数据管理器、
o 有效载荷生成器外部模块(EM)--也称为EAI Java服务器或eai_js。
2.完成 EAI Manager 的安装后,在 CM 和 EAI DM 配置文件(pin.conf)以及 Payload Generator 属性文件(Infranet.properties)中配置数值。
3.通过编辑事件通知的配置文件($BRM_HOME/sys/data/config/pin_notify*文件)来配置你希望发布的事件通知列表,并在运行load_pin_notify工具前将其合并。
4.在 Payload Generator EM 配置文件(payloadconfig.xml)中定义业务事件。
初步步骤完成后,现在是创建和配置Oracle高级队列的时候了。以下是步骤(第三步可能有所不同,因为它取决于你的设置):
1.创建队列:
pin_ifw_sync_oracle.pl create -l $USER/$PASS@$DB -q TEST_QUEUE -t TEST_QUEUE
2.测试队列(可选步骤):
pin_ifw_sync_oracle.pl test -l $USER/$PASS@$DB -q TEST_QUEUE
3.以SYSTEM用户身份登录数据库,为 "t_user "设置适当的授予权限:
exec dbms_aqadm.grant_queue_privilege('ALL', 'PUSER.TEST_QUEUE', 't_user') ;
在puser.pin_event_ty上授予t_user执行;
grant execute on sys.dbms_aqin to t_user;
接下来,我们需要一个队列生产者,这个应用程序将对前面定义的业务事件进行排队。开发生产者模块类似于建立你的自定义连接器应用程序(见这里)。有必要实现一个自定义模块(库),并在dm_eai配置文件的 "plugin_name "项下定义它。
还有一个更简单的方法来完成这项任务。如果你已经安装了 "账户同步DM",那么你会在dm_ifw_sync数据管理器下找到一个队列生产者模块的实现。然而,如果你选择这个选项,在dm_eai配置文件中需要一些额外的条目。
在你有一个工作的队列生产者之后,继续调用你的一些业务事件,看看它们是否被排队。队列可以在队列创建时定义的表中进行查询。
最后,你将需要一个队列消费者,一个将读取和取消排队消息的应用程序。有几个编程接口可用于访问Oracle Streams AQ,其编程语言如下:Java(JMS)、PL/SQL、C(OCI)、Visual Basic(OO4O)、AQ XML Servlet(IDAP)。
有了你的自定义客户端实现,你将完全控制处理消息的速度、时间和数量。例如,在非高峰时段,你可以比在高峰时段处理更多的数据。
希望我们已经给了你一些有效的指导,告诉你如何在Oracle BRM和第三方系统和/或应用程序之间进行整合/同步的过程。