调解编程的编码技巧

编写调解代码时可帮到您的编程提示。

  • 请注意避免在正向路由路径中产生循环。例如,如果将路径中的目标设置为与当前目标相同,那么消息将不断地循环,每次都将路由路径复位成当前目标。调解框架不会检查路由路径中是否存在循环。
  • 尽可能避免使用静态字段。可以部署单个调解来同时处理多条消息。
  • 不要高速缓存根据消息上下文或消息内容计算出来的值。这些值可能会随消息不同而不同。一种例外情况是,为了提高性能而只对从调解处理程序属性派生的值进行高速缓存。
  • 调解编程与编写 EJB 具有相同的限制。有关这些限制的更多信息,请参阅 EJB 1.1 规范中的 18.1.2 这一节。
  • 对调解选择适当级别的事务性控制:例如,对一条消息中的字段执行操作的调解不太可能牵连到事务性控制。在另一个极端,如果调解将更新数据库字段,那么它需要事务性控制,并且您应提醒管理员在调解定义中设置 UseGlobalTransaction 标志。此标志缺省为 False 值。
  • 特地应用于消息格式的提示:
    • 在调解功能已对消息执行操作之后,最好是检查该消息是否符合期望的格式。应该使用 SIMessage 接口中的 isWellFormed 方法来检查是否所有消息属性值都可序列化,并且消息的数据图符合消息的格式。
    • 根据您想要如何处理消息,可指定满足需要的格式而不接受自然的格式。例如,如果您想要将 SOAP 消息作为字节字符串来处理,那么使用 SIMessage 接口中的 getNewDataGraph 方法并指定格式 JMS/bytes。getNewDataGraph 将返回新的 SDO 数据图,该数据图包含由格式字段指定的树形表示中 SIMessage 有效内容的副本,在此示例中,是作为字节字符串处理的。
    • 最好是检查调解代码中的消息格式,这是因为调解不太可能成功地处理具有意外格式的消息。在 SIMessage 接口上使用 getFormat 方法。
  • 调解支持的 SDO 版本只有 V1
  • 由于 SDO 用户界面中存在对消息的限制,消息访问方法没有任何 "throws" 子句。因此,由于产生语法分析错误而由访问方法抛出的异常是未经检查的异常。通过检查 com.ibm.websphere.sib.exception 包中的异常类 SIMessageParseException,调解就可以捕获语法分析异常。使用类似于以下示例的代码:
    try {
      // Function involving SDO message access
    } catch (SIMessageParseException e) {
      // Look at the real cause of the runtime exception, and act on it.
      // It is likely to indicate a parse failure...
      Throwable cause = e.getCause();
    }
    注: 如果调解不捕获 SIMessageParseException,那么会将原始版本的消息发送至异常目标。
  • 当部署调解时,为处理程序和处理程序列表指定容易记忆和描述性的名称。
  • 当对单个目标部署单个调解时,在管理控制台中对调解处理程序、调解处理程序列表和调解对象使用完全相同的名称。
  • 由于性能方面的原因,指定选择器规则,以便仅调解经过目标的消息的必需子集。

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjy0115
文件名:cjy0115.html