MB与MQ操作相关

时间:2021-01-08 11:43:10

JavaCompute 节点创建新消息

 

调用 MbMessage 的缺省构造函数以创建空白消息

MbMessage outMessage = new MbMessage();

从入局消息复制这些头

copyMessageHeaders(inMessage, outMessage);

 

创建新的消息体

首先,添加*解析器元素

对于 XML

然后,可以使用 createElement 方法和代理 XPath 实现的扩展语法构建该消息的其余部分。

 

 

 

 

文档与java操作。

<document>

  <chapter title='Introduction'>

    某些文本。

  </chapter>

</document>

 

 

示例程序。

import com.ibm.broker.javacompute.MbJavaComputeNode;

import com.ibm.broker.plugin.*;

public class pub_sub_flow_JavaCompute extends MbJavaComputeNode {

 

       public void evaluate(MbMessageAssembly inAssembly) throws MbException {

              MbOutputTerminal out = getOutputTerminal("out");

              MbOutputTerminal alt = getOutputTerminal("alternate");

 

              MbMessage inMessage = inAssembly.getMessage();

 

              // create new message

              MbMessage outMessage = new MbMessage(inMessage);

              MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,

                            outMessage);

 

              try {

                     // ----------------------------------------------------------

                    

                     /**

                     <document>

                       <chapter title='Introduction'>

                         某些文本。

                       </chapter>

                     </document>

                     */

                     // get the chapter

                     MbElement root = inAssembly.getMessage().getRootElement();

 

                     MbElement chapter = root.getLastChild().getFirstChild().getFirstChild();

                    

                     // Add user code below

                    

                     // get the LocalEnvironment.

                     inAssembly.getLocalEnvironment();

                    

                     // get the GlobalEnvironment.

                     inAssembly.getGlobalEnvironment();

                    

                     // get the message from the MbMessageAssembly.;

                     // first too check the MbMessageAssembly.

                     MbMessage msg = inAssembly.getMessage();

                    

                     // get the root. it is the root.

                     MbElement eleroot = msg.getRootElement();

                    

                     // get the attribute. it is the first child;

                     MbElement eleatt  = eleroot.getFirstChild();

                    

                     // get the MQMD.

                     MbElement elemqmd = eleroot.getNextSibling();

                    

                     // get the xml. it is the message.

                     MbElement msgbody = eleroot.getLastChild();

                     msgbody = elemqmd.getNextSibling();

 

                     // End of user code

                     // ----------------------------------------------------------

 

                     // The following should only be changed

                     // if not propagating message to the 'out' terminal

                     System.out.println("AAAAAA");

                     out.propagate(outAssembly);

 

              } finally {

                     // clear the outMessage

                     outMessage.clearMessage();

              }

       }

}

 

 

 

 

JavaCompute 节点复制消息

 

MbMessage outMessage = new MbMessage(inAssembly.getMessage);

 MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);

 

 

JavaCompute 节点创建新元素

 

使用 JavaCompute 节点中的以下方法可在消息树中创建新元素:

  • createElementAsFirstChild()

  • createElementAsLastChild()

  • createElementBefore()

  • createElementAfter()

该方法返回对新建元素的引用。每个方法都有三个重载形式:

createElement...(int type)

创建指定类型的空白元素。有效的一般类型是:

·   MbElement.TYPE_NAME。这种类型的元素只有名称,例如,XML 元素。

·   MbElement.TYPE_VALUE。这种类型的元素只有值,例如,未包含在 XML 元素中的 XML 文本。

·   MbElement.TYPE_NAME_VALUE。这种类型的元素既有名称,也有值,例如,XML 属性。

也可以分配特定的类型值。这类信息的含义取决于解析器。元素名称和值信息必须使用 setName() setValue() 方法进行指定。

createElement...(int type, String name, Object value)

用于在创建时设置元素值和元素名称的方法。

createElement...(String parserName)

createElement...() 的特殊形式,仅用于创建*解析器元素。

以下 Java 代码示例向 JavaCompute 节点访问消息树中的元素中给出的 XML 示例添加新的 chapter 元素:

MbElement root = outMessage.getRootElement();

MbElement document = root.getLastChild().getFirstChild();

MbElement chapter2 = document.createElementAsLastChild(MbElement.TYPE_NAME,"Chapter",null);

 

// add title attribute

MbElement title2 = chapter2.createElementAsFirstChild(MbElement.TYPE_NAME_VALUE,

"title", "Message Flows");

这段代码生成以下 XML 输出:

<document>

<chapter title="Introduction">

某些文本。

 

  </chapter>

<chapter title="Message Flows"/>

</document>

 

 

JavaCompute 节点访问消息头

 JavaCompute 节点复制消息头

 

 JavaCompute 节点访问 MQMD

 

 

 

 JavaCompute 节点访问 MQRFH2

 

 

 

 

 

 

JavaCompute 节点更新 Local Environment

创建本地环境的新副本,以更新它。使用副本构造函数的完全版本创建新的 MbMessageAssembly 对象,如下例所示:

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

编辑该副本以更新本地环境。

 

JavaCompute 节点更新 Global Environment

Global Environment 跨消息流更改,因此不必创建用于更改的副本。以下 Java 代码显示了如何更改 Global Environment

MbMessage env = assembly.getGlobalEnvironment();

env.getRootElement().createElementAsFirstChild(MbElement.TYPE_NAME_VALUE, "Status", "Success");

 

getOutputTerminal("out").propagate(assembly);

 

 

将消息传播到 JavaCompute 节点 Out Alternate 终端上

JavaCompute 节点有两个输出终端:Out Alternate。因此,您可以将该节点用作 filter 节点和消息转换节点。处理消息后,可使用 propagate() 方法将该消息传播到输出终端上。要将消息套件传播到 Out 终端上,请使用以下方法:

out.propagate(assembly);

要将消息套件传播到 Alternate 终端上,请使用以下方法:

alt.propagate(assembly);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

内置节点

WebSphere Message Broker 提供了内置节点,您可以使用它们来定义您的消息流。要获取有关这些节点中的每个节点的信息,请参考下面相应的链接。此处列出的节点根据其功能进行分组。

输入和输出

消息处理和转换

整理请求

作出决定

子流标识

错误处理和报告