第二次聚合文件在Mule 3.2中不起作用
我已经从mule 3.2.1升级到3.3.1,我面临以下问题。 我使用自定义聚合器和自定义转换器聚合多个文件以进行处理。问题是,在第一次聚合之后,当我删除另一组文件时,只调用transformer类,没有其他组件得到执行。控制台上也没有错误。 当我重新启动mule时,这个过程也只是第一次执行 我的变压器等级是: 第二次执行后第二次聚合文件在Mule 3.2中不起作用,mule,Mule,我已经从mule 3.2.1升级到3.3.1,我面临以下问题。 我使用自定义聚合器和自定义转换器聚合多个文件以进行处理。问题是,在第一次聚合之后,当我删除另一组文件时,只调用transformer类,没有其他组件得到执行。控制台上也没有错误。 当我重新启动mule时,这个过程也只是第一次执行 我的变压器等级是: 第二次执行后 对于每一组文件,关联id是文件的名称,它在不同的文件集中是唯一的。任何人都不能告诉我代码有什么问题。您不能重用相关id,因为它保存在对象存储中(这解释了为什么重新启动Mul
对于每一组文件,关联id是文件的名称,它在不同的文件集中是唯一的。任何人都不能告诉我代码有什么问题。您不能重用相关id,因为它保存在对象存储中(这解释了为什么重新启动Mule时它会再次工作)。
您必须为每个聚合组使用不同的关联id。您不能重用关联id,因为它保存在对象存储中(这解释了为什么重新启动Mule时它会再次工作)。
您必须为每个聚合组使用不同的correlationid。在custom transformer中,我将correlationid设置为文件名。例如:我有两个文件要聚合abcdef12.csv和abcdef22.csv,我将关联id设置为abcdef,大小为2。这对于每一组文件都是不同的。因此,在每个过程开始时,都会调用自定义转换器并设置相关id。是的,您不能重复使用相关id,但是您可以每次将salt(基于时间窗口的值)添加到相关id并使其唯一。在自定义转换器中,我将correlationid设置为文件名。例如:我有两个文件要聚合abcdef12.csv和abcdef22.csv,我将关联id设置为abcdef,大小为2。这对于每一组文件都是不同的。因此,在每个流程开始时,都会调用自定义转换器并设置相关id。是的,您不能重用相关id,但可以添加salt(基于时间窗口的值)每次设置相关id并使其唯一..我不明白是否需要自定义聚合器:转换器设置正确的相关id和组大小,因此,一个标准的
收集聚合器应该能够对消息进行分组。我不理解在这里需要一个自定义聚合器
:转换器设置了正确的相关ID和组大小,因此一个标准的收集聚合器
应该能够对消息进行分组。
public class FileCorrelationTransformer extends AbstractMessageTransformer {
@Override
public Object transformMessage(MuleMessage message, String arg1)
throws TransformerException {
System.out.println("FileCorelationTransformer called");
System.out.println("=============================");
System.out.println("Extract Name = "
+ message.getOutboundProperty("originalFilename"));
final String fileName = message.getOutboundProperty("filename");
final String extractName = Generate.extractName(fileName);
final ArrayList<ExtractVO> extractVOs = ExtractDAO.getInstance()
.load(extractName);
System.out.println("Group Size: " + extractVOs.get(0).getNoOfParts());
System.out.println("=============================");
message.setCorrelationId(extractName);
message.setCorrelationGroupSize(extractVOs.get(0).getNoOfParts());
return message;
}
}
public class FileCollectionAggregator extends AbstractAggregator {
@Override
protected EventCorrelatorCallback getCorrelatorCallback(
MuleContext muleContext) {
return new CollectionCorrelatorCallback(muleContext, false, "") {
@Override
public MuleEvent aggregateEvents(EventGroup events)
throws AggregationException {
CopyOnWriteArrayList<File> list = new CopyOnWriteArrayList<File>();
try {
for (Iterator<MuleEvent> iterator = events.iterator(); iterator
.hasNext();) {
MuleEvent event = iterator.next();
try {
list.add(new File(event.transformMessageToString()));
} catch (TransformerException e) {
throw new AggregationException(events, null, e);
}
}
} catch (ObjectStoreException e) {
throw new AggregationException(events, null, e);
}
return new DefaultMuleEvent(new DefaultMuleMessage(list,
muleContext), events.getMessageCollectionEvent());
}
};
}
}
<vm:connector name="ConnectorSinglePartMonthly"
dynamicNotification="true" doc:name="VM" />
<custom-transformer
class="com.transformers.FileCorrelationTransformer" name="fileMultiPartCorrelationTransformer"
doc:name="Java" />
<flow name="CountTP" doc:name="CountTP">
<file:inbound-endpoint path="c:/test/input"
connector-ref="fileConnector" doc:name="Count CSV">
<file:filename-regex-filter pattern="UGJERT[0-9]*.csv"
caseSensitive="false" />
</file:inbound-endpoint>
<vm:outbound-endpoint connector-ref="ConnectorMultiPartMonthly"
path="monthlyMultiPartFiles" transformer-refs="fileMultiPartCorrelationTransformer"
doc:name="TP Multi VM Out" />
<logger message="Done with the Flow!" doc:name="Logger" />
</flow>
<flow name="MultiPartMonthlyFlow" doc:name="MultiPartMonthlyFlow">
<vm:inbound-endpoint connector-ref="ConnectorMultiPartMonthly"
path="monthlyMultiPartFiles" doc:name="TP Multi Monthly VM In" />
<custom-aggregator class="com.routing.FileCollectionAggregator"
doc:name="Custom Aggregator" />
<component doc:name="Csv Reader">
<prototype-object
class="com.utility.CsvReader" />
</component>
</flow>
INFO 2013-07-19 16:51:02,296 [[test].fileConnector.receiver.05] org.mule.transport.file.FileMessageReceiver: Lock obtained on file: C:\test\input\UGJERT12.csv
INFO 2013-07-19 16:51:02,311 [[test].fileConnector.receiver.05] org.mule.transport.file.FileMessageReceiver: Lock obtained on file: C:\test\input\UGJERT22.csv
FileCorelationTransformer called
FileCorelationTransformer called
=============================
=============================
Extract Name = UGJERT12.csv
Extract Name = UGJERT22.csv
Group Size: 2
=============================
Group Size: 2
=============================
INFO 2013-07-19 16:51:02,421 [[test].ConnectorMultiPartMonthly.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager: Initialising: 'ConnectorMultiPartMonthly.dispatcher.6508195'. Object is: VMMessageDispatcher
INFO 2013-07-19 16:51:02,421 [[test].ConnectorMultiPartMonthly.dispatcher.02] org.mule.lifecycle.AbstractLifecycleManager: Initialising: 'ConnectorMultiPartMonthly.dispatcher.29350820'. Object is: VMMessageDispatcher
INFO 2013-07-19 16:51:02,421 [[test].ConnectorMultiPartMonthly.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager: Starting: 'ConnectorMultiPartMonthly.dispatcher.6508195'. Object is: VMMessageDispatcher
INFO 2013-07-19 16:51:02,421 [[test].ConnectorMultiPartMonthly.dispatcher.02] org.mule.lifecycle.AbstractLifecycleManager: Starting: 'ConnectorMultiPartMonthly.dispatcher.29350820'. Object is: VMMessageDispatcher
Process execution starts and extractName is = UGJERT
INFO 2013-07-19 16:53:18,530 [[test].fileConnector.receiver.09] org.mule.transport.file.FileMessageReceiver: Lock obtained on file: C:\test\input\UGJERT12.csv
INFO 2013-07-19 16:53:18,546 [[test].fileConnector.receiver.09] org.mule.transport.file.FileMessageReceiver: Lock obtained on file: C:\test\input\UGJERT22.csv
FileCorelationTransformer called
=============================
Extract Name = UGJERT12.csv
Group Size: 2
=============================
FileCorelationTransformer called
=============================
Extract Name = UGJERT22.csv
Group Size: 2
=============================