JavaCompute ノードには Out および Alternate という 2 つの出力ターミナルがあります。 したがって、ノードはフィルター・ノードおよびメッセージ変換ノードの両方として使用できます。メッセージを処理した後に、propagate() メソッドを使用してメッセージを出力ターミナルに伝搬します。
out.propagate(assembly);
メッセージ・アセンブリーを Alternate ターミナルに伝搬するには、以下のメソッドを使用します。 alt.propagate(assembly);
MbMessage outMessage = new MbMessage(inMessage);
MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
...
newMsg.finalizeMessage(MbMessage.FINALIZE_NONE);
out.propagate(outAssembly);
...
newMsg.finalizeMessage(MbMessage.FINALIZE_NONE);
out.propagate(outAssembly);
MbOutputTerminal.propagate(MbMessageAssembly, true)
このコードによって、伝搬後にメッセージ・ツリーとパーサー・リソースがリカバリーされるので、次回 MbMessage が伝搬用に構成されるときにそれらのリソースが使用できるようになります。
大規模な入力メッセージを処理して複数の出力メッセージを伝搬するの例を参照してください。このコードを使用するとき、メッセージ・ツリー・リソースは MbMessageAssembly 内の非読み取り専用 MbMessages 用に再利用されます。 結果として、メソッド MbMessage.clearMessage(true) が変更可能な各 MbMessage に対して呼び出されます。それで、それらの MbMessage は再度使用することはできません。
メッセージ・ツリーのフィールドが各 MbMessage についてローカルであった場合、または MbMessageAssembly 内の 3 つの MbMessage 間でのみ切り離しまたは接続された場合、パーサーも再利用できるようにリカバリーされます。 ただし、伝搬されなかった MbMessage にエレメントが切り離しまたは接続された場合、入力レコードの次回の反復でパーサーを再利用することはできません。
伝搬されなかったこのような MbMessage オブジェクトについては、メソッド MbMessage.clearMessage(true) を明示的に呼び出してから、次の入力レコードを処理してください。 このメソッドによって、パーサーの再利用ができるようになります。