You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Martin Krasser (JIRA)" <ji...@apache.org> on 2009/03/15 20:05:40 UTC
[jira] Commented: (CAMEL-1371) Resequencer - stream - add predicate
to allow me to supply my own gap detection
[ https://issues.apache.org/activemq/browse/CAMEL-1371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=50553#action_50553 ]
Martin Krasser commented on CAMEL-1371:
---------------------------------------
In its current version you can customize gap detection by implementing {{org.apache.camel.processor.resequencer.ExpressionResultComparator}} and set it via the {{comparator()}} DSL element.
{code}
// Custom gap detection
ExpressionResultComparator myComparator = ...
// Resequencing route
from(...).resequence().stream().comparator(myComparator).to(...);
{code}
The comparator's relevant methods for gap detection are {{predecessor()}} and {{successor()}}. The {{compare()}} method (from {{java.util.Comparator}}) is needed to order elements in the resequencing queue:
{code}
public class MyComparator implements ExpressionResultComparator {
...
public boolean predecessor(Exchange o1, Exchange o2) {
// check if o1 is predecessor of o2
...
}
public boolean successor(Exchange o1, Exchange o2) {
// check if o1 is sucessor of o2
...
}
public int compare(Exchange o1, Exchange o2) {
// compare o1 to o2
...
}
...
}
{code}
I see however that there are easier ways for implementing custom gap detection than implementing {{ExpressionResultComparator}} and like the idea to provide something more high-level as described by this issue. I can provide a patch if you want. At the moment, I'm not sure if a Camel {{Predicate}} or {{Expression}} is suitable for implementing custom gap detections. Do you mind if the interface for gap detection is resequencer-specific?
> Resequencer - stream - add predicate to allow me to supply my own gap detection
> -------------------------------------------------------------------------------
>
> Key: CAMEL-1371
> URL: https://issues.apache.org/activemq/browse/CAMEL-1371
> Project: Apache Camel
> Issue Type: New Feature
> Components: camel-core
> Reporter: Claus Ibsen
> Fix For: Future
>
>
> The resequencer stream based uses Long for gap detection as Camel then knows if there is a gap if eg a number in between is missing.
> However sometimes you can not convert/compute a Long that is in sequence based on your needs.
> Imagine you consume files from a folder and want them to be resequenced so you process them in the correct order.
> The file names have this pattern: YYYYMMDD-DNNN.txt. Where YYYYMMDD is the date pattern and D is a fixed string and NNN is a numeric value for that particular day.
> Eg: 20090223-D001.txt, 20090223-D002.txt ...
> So if we could add a predicate to the resequencer where I could impl. the gap detection, then I would be able to do:
> {code}
> from("file://inbox").resequence(header("CamelFileName")).gapPredicate(new MyGapPredicate()).timeout(60000).to("bean:processFileInSequence");
> {code}
> Where *gapPredicate* is the new feature. Think about a better name for it, than gap predicate!!
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.