管理 BPEL 生产环境(四)

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

  删除陈旧的实例

  使用 BPEL 控制台可识别所有陈旧的实例,并按如下所示将其清除。

  图 2:在 BPEL 控制台中清除陈旧的实例

  遗憾地是,只能针对特定域搜索到这些陈旧实例。但在生产环境中,可能要跨不同域部署多个流程,从而造成沉重的管理负担。此外,在一次性清除特定域内的所有陈旧实例不可能做到。

  作为一种替代方式,可以通过该 SQL 查询查找每个陈旧实例的特有多维数据集实例键 (cube instance key, cikey)。

SELECT CUBE_INSTANCE.cikey, CUBE_INSTANCE.root_id, CUBE_INSTANCE.process_id,  
CUBE_INSTANCE.domain_ref
FROM CUBE_INSTANCE
WHERE STATE = 9

  一旦识别出了每个陈旧实例的 cikey,就可使用该键通过调用由 SQL 查询找到的每个多维数据集实例 delete_ci(CIKEY) 从 CUBE_INSTANCE 中删除陈旧实例以及其他引用这些多维数据集实例的表。delete_ci(CIKEY) 是一个存储过程,以多维数据集实例作参数;它删除多维数据集实例以及其他引用该多维数据集实例的 BPEL 表上的所有行。

  该方法的好处之一是可跨多个域删除陈旧实例(如果删除了 where 条件中的 domain 子句)。它还允许大量清除陈旧实例。这两个好处使 PL/SQL 成为管理生产环境的理想选择。

  以下的示例代码演示了如何在 EJB 中使用这些方法列出和删除陈旧实例。

WhereCondition where = WhereConditionHelper.whereInstancesStale();
IInstanceHandle[] instances = getLocator(domainId, domainPassword).listInstances(where);
for(int i=0; i<instances.length; i++){
instances[i].delete();
        }

  前两行按域返回了所有陈旧实例的 IInstanceHandle bean 数组。之后,使用 IInstanceHandle.delete() 删除所有这些实例。可轻松扩展该代码来包含所有域。

  存档旧实例和删除陈旧实例以及处理过的 XML 消息将有助于减小表的大小。结果表明,除非截断或重建表,只是删除行并不会将空间释放回表空间。

  使用以下命令重新获取可用空间;可在 Dehydration Store 中针对其他表执行类似命令。

alter table bookings enable row movement;
alter table bookings shrink space cascade;
alter table cube_scope shrink space;
alter table cube_scope disable row movement;

  此外,为了防止以后的增长,DBA 可以操纵 PCTFREE、PCTUSED 以及 PCTVERSION 参数。

  最后,我们来看一下如何处理运行时失败的实例。

  返回失败的实例

  BPEL 流程失败的原因可能有多种,如错误输入、不正确的流程设计或外部应用程序不可用,等等。在任何情况下,流程都不会成功完成它的执行并以“fault”状态结束。如果流程由于不正确的设计而失败,则必须修改流程设计并重新部署 BPEL 流程。

  然而,如果流程失败是由于错误输入或外部问题(网络故障、外部应用程序不可用)导致,则您可能希望在更正输入或解决了外部问题后重新运行流程。理论上,应使用旧的输入重新执行流程,以便可正确处理最初的请求。

  可使用 BPELTest(10.1.3 及以后版本中有提供)实现该目标,这是一个重要的实用程序,可用于在 BPEL 流程上创建和运行测试用例以进行单元测试和集成测试。BPELTest 可模仿合作伙伴调用、执行断言以及提供各种测试结果的信息。(有关详细信息,请查看此处所列的 BPELTest 网络研讨会录像。)

  BPELTest 中最重要的功能是其能够从审计跟踪创建测试用例,这也就是所谓的自动测试生成 (Automatic Test Generation)。例如,考虑一下流程实例由于外部应用程序脱机而导致执行失败的情况。理论上,您可能会在外部应用程序重新联机后以完全相同的条件重新运行该流程。但是,该方法可能比较麻烦;它涉及到重新配置流程所有着可控或不可控的外部相关性。

  而使用 BPELTest,您可以从失败实例的审计跟踪生成基本的测试用例。生成的测试用例将包含完全仿效合作伙伴的命令,就像失败实例所具有的那样。在遇到不正确的数据时,可使用正确数据修改测试用例。如果导致实例失败的原因是外部应用程序不可用,则只需在应用程序可用时重新运行测试用例即可。

  结论

  如您所见,可以针对 BPEL Dehydration Store 使用 BPEL 流程管理器 API 和 EJB 或 PL/SQL 将 BPEL 生产环境的管理进行部分自动化。随着部署的 BPEL 流程越来越多,设计可自动化日常任务并主动解决潜在生产问题的实用程序库势在必行。

 

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

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

【所有原创内容版权均属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和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。