面对批处理 mule esb 中的错误
Facing error in Batch Processing mule esb
我在批处理 mule esb 中遇到问题。如果我在进程记录面中设置任何有效负载并尝试在 oncomplete 面中获取该有效负载,则不会获取该有效负载。变量和 属性 也有同样的问题。
如果我在过程记录阶段设置任何 属性 并尝试进入完成阶段,那么总是得到空值。
如何在 oncomplete 阶段获得这些价值?
下面是流程..
<batch:job name="TestBatch" max-failed-records="-1">
<batch:input>
<component class="com.test.RecordTest"
doc:name="Java" />
<json:object-to-json-transformer
doc:name="Object to JSON" />
<custom-transformer class="com.test.CustomTr"
doc:name="Java" />
</batch:input>
<batch:process-records>
<batch:step name="Batch_Step1" accept-policy="ALL">
<batch:commit size="5" doc:name="Batch Commit">
<!-- Insert record in Salesforce -->
</batch:commit>
</batch:step>
<batch:step name="Batch_Step2" accept-policy="ONLY_FAILURES">
<logger message="STEPP #[getStepExceptions()]" level="INFO" doc:name="Logger"/>
<set-property propertyName="error" value="STEPP #[getStepExceptions()]" doc:name="Property"/>
<set-payload value="#[getStepExceptions()]" doc:name="Set Payload"/>
</batch:step>
</batch:process-records>
<batch:on-complete>
<logger level="INFO" doc:name="Logger" message="--> #[payload.failedRecords] --> #[message.payload] "/>
<logger message="error--- #[message.outboundProperties['error']] " level="INFO" doc:name="Logger"/>
</batch:on-complete>
</batch:job>
我在 属性 记录器
中得到了 null
我该如何解决这个问题?
我从你那里得到了一些坏消息:-)。
批处理设计不会让您可能尝试在步骤中设置的任何值过时,尤其是负载。
当我开始使用它时,我还希望会话变量在完整阶段处于正确状态,但事实并非如此,它们在每一步都被完全擦除。
现在我不认为这是一个错误,但它确实是一个我可以理解的设计功能,即使我不是很喜欢它。
我使用 object store connector.
解决了同样的问题
它将允许您通过 nice XML 配置块访问 mule Object Store API,这样您就可以将变量存储在内存中,您可以在完成后恢复这些变量而无需他们受流程逻辑的影响。
希望对您有所帮助
我在批处理 mule esb 中遇到问题。如果我在进程记录面中设置任何有效负载并尝试在 oncomplete 面中获取该有效负载,则不会获取该有效负载。变量和 属性 也有同样的问题。 如果我在过程记录阶段设置任何 属性 并尝试进入完成阶段,那么总是得到空值。 如何在 oncomplete 阶段获得这些价值? 下面是流程..
<batch:job name="TestBatch" max-failed-records="-1">
<batch:input>
<component class="com.test.RecordTest"
doc:name="Java" />
<json:object-to-json-transformer
doc:name="Object to JSON" />
<custom-transformer class="com.test.CustomTr"
doc:name="Java" />
</batch:input>
<batch:process-records>
<batch:step name="Batch_Step1" accept-policy="ALL">
<batch:commit size="5" doc:name="Batch Commit">
<!-- Insert record in Salesforce -->
</batch:commit>
</batch:step>
<batch:step name="Batch_Step2" accept-policy="ONLY_FAILURES">
<logger message="STEPP #[getStepExceptions()]" level="INFO" doc:name="Logger"/>
<set-property propertyName="error" value="STEPP #[getStepExceptions()]" doc:name="Property"/>
<set-payload value="#[getStepExceptions()]" doc:name="Set Payload"/>
</batch:step>
</batch:process-records>
<batch:on-complete>
<logger level="INFO" doc:name="Logger" message="--> #[payload.failedRecords] --> #[message.payload] "/>
<logger message="error--- #[message.outboundProperties['error']] " level="INFO" doc:name="Logger"/>
</batch:on-complete>
</batch:job>
我在 属性 记录器
中得到了 null我该如何解决这个问题?
我从你那里得到了一些坏消息:-)。 批处理设计不会让您可能尝试在步骤中设置的任何值过时,尤其是负载。
当我开始使用它时,我还希望会话变量在完整阶段处于正确状态,但事实并非如此,它们在每一步都被完全擦除。
现在我不认为这是一个错误,但它确实是一个我可以理解的设计功能,即使我不是很喜欢它。 我使用 object store connector.
解决了同样的问题它将允许您通过 nice XML 配置块访问 mule Object Store API,这样您就可以将变量存储在内存中,您可以在完成后恢复这些变量而无需他们受流程逻辑的影响。
希望对您有所帮助