管理 BPEL 生产环境(三)

日期: 2007-12-13 作者:Stany Blanvalet 来源:TechTarget中国

  删除回调和调用消息

  只要实例要求从合作伙伴获得消息(receive、onMessage 等),就针对该特定接收活动发出订阅。一旦接收到交付消息,交付层就会试图将消息与预定的订阅相关联。成功订阅的消息将继续保留在数据库中。这些消息可通过 collaxa.delete_ci(CIKEY) 存储过程删除(操作如同前述的实例存档)。

  所有的回调和调用 XML 消息均是如此。即使已成功解析和交付这些消息,它们仍会保留在数据库中。

  可以使用以下方法删除所有回调、调用以及订阅。

 com.oracle.bpel.client     接口 IBPELDomainHandle
 方法摘要
 int               deleteAllHandledCallback ()
                (删除所有交付至此域的、已成功解析和交付的回调消息)
 int                DeleteAllHandledInvoke ()
                (删除所有交付至此域的、已成功解析和交付的调用消息)
 int               DeleteAllHandledSubscription ()
                (删除此域中所有已成功解析和处理的消息订阅者 — 即已向其交付                                                                          了消息)

  还可以使用 PL/SQL 来执行相同的操作,如以下存储过程所示。建议 DBA 将该脚本用作模版,并对其进行修改来满足特定的存档需求(删除、移至另一数据库、更改 where 子句以包含基于业务条件的选择,等等)。

/**
* Procedure to clean invocation messages for a particular domain.
* Invocation messages are stored in invoke_message and invoke_message_bin table
* It will select all the invocation messages from invoke_message table.
* For each message which has been delivered or resolved, delete it from
* invoke_message and invoke_message_bin table
*/
procedure delete_invoke( p_domain_ref in integer )
as
cursor c_invoke_message is
select message_guid
from invoke_message
where ( state = 2 or state = 3 )
   and domain_ref = p_domain_ref
for update;
   begin
       for r_invoke_message in c_invoke_message loop
         delete from invoke_message_bin where message_guid = r_invoke_message.message_guid;
     delete from invoke_message where current of c_invoke_message;
   end loop;
   commit;
 end delete_invoke;

   
/**
* Procedure to clean callback messages for a particular domain.
* Callback messages are stored in dlv_message and dlv_message_bin table
* It will select all the invocation messages from dlv_message table.
* For each message which has been delivered or resolved, delete it from
* dlv_message and dlv_message_bin table
*/
procedure delete_callback( p_domain_ref in integer )
as
cursor c_dlv_message is
select message_guid
from dlv_message
where ( state = 2 or state = 3 )
  and domain_ref = p_domain_ref
for update;
begin
for r_dlv_message in c_dlv_message loop
delete from dlv_message_bin
where message_guid = r_dlv_message.message_guid;
delete from dlv_message
where current of c_dlv_message;
  end loop;
  commit;
end delete_callback;
 
  接下来,简要介绍一下如何删除陈旧的实例。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • SAP收购CallidusCloud 与Salesforce竞争

    一直被称为后台办公巨头的SAP现在似乎也想在前台办公大展拳脚。 最新的迹象是SAP收购CallidusClou […]

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。