Hi

Error handling is hard, especially for non transactional transports
such as File / FTP and the likes.

>From what I understand from your description is that you want to poll
files and upload them to SFTP.
And in case this fails an email should be sent. And if this email
fails then it should ????

If you where doing this with regular Java you would probably use the
try .. catch .. finally.
And they also exists in Camel DSL

.doTry()
   // send file to SFTP
.doCatch(Exception)
   .doTry()
   // send an email
   .doCatch()
   // log failed to send email
   .end()
.end()

And they support handled(true) as well.
See more here
http://davsclaus.blogspot.com/2009/04/on-road-to-camel-20-try-catch-finally.html

And here:
http://camel.apache.org/try-catch-finally.html

However try .. catch .. finally have been overhauled in Camel 2.0m2 so
you have to wait for this release or use SNAPSHOT if you want.


Also the general error handling in Camel 2.0 have had a major overhaul
as well. In fact I do believe that the problem with error handling,
when doing error handling has been fixed in 2.0m2 (SNAPSHOT) as well.

So in your case if the SMTP failed then it would not "catch this" but
it should be fixed in 2.0m2.



If you want to avoid consuming the same file again then use the
Idempotent Consumer EIP
http://camel.apache.org/idempotent-consumer.html




On Tue, May 12, 2009 at 1:30 AM, turp1twin <jeff.tur...@ecloser.net> wrote:
>
> I am new to Camel and am having a tough time getting my route to work
> properly. That being said, it is entirely possible that I am being a moron
> and have missed something simple.... However, I have searched the mailing
> list and have not found the answer I am looking for. Any help would be
> appreciated. I am using Camel 2.0-M1 and I am trying to test my various
> error handling scenarios. I am using a Java DSL with various endpoints
> configured in my Spring camel-context.xml.
>
> Endpoints:
>
> <camel:endpoint id="filePollingDir"
> uri="file:///Users/xxxxx/temp/polldir/"/>
>
> <camel:endpoint id="sFtpDestination"
>
> uri="sftp://r098...@sftp.someserver.com/upload?password=xxxxxx&amp;knownHostsFile=/Users/xxxxx/.ssh/known_hosts"/>
>
> <camel:endpoint id="failedTransferSmtp"
> uri="smtp://smtp.someserver.net?to=u...@mymail.net&amp;from=ad...@mymail.net"/>
>
> Route definition:
>
> from(getEndpoint("filePollingDir")).onException(Exception.class).maximumRedeliveries(0).handled(true).end()
> .to(getEndpoint("sFtpDestination")).onException(Exception.class).maximumRedeliveries(2).handled(true)
> .to(getEndpoint("failedTransferSmtp")).onException(Exception.class).maximumRedeliveries(0).handled(true).end();
>
>
> Basically what I am trying to achieve is that if the SFTP producer fails I
> want to send an email notifying a user that the transfer failed. I also want
> to handle the case where the smtp producer might also fail. I am getting to
> the SMTP endpoint (failedTransferSmtp) just fine, however, when it fails (as
> intended for this particular test) it causes the "filePollingDir" consumer
> to rollback and consume the source file again. This continues in a loop...
> Is this behavior intended? If so, can I configure the consumer to stop
> consuming the same file again? Again, I might be missing something simple,
> but any help would be appreciated. Cheers!
>
> Jeff
>
>
>
> --
> View this message in context: 
> http://www.nabble.com/Error-Handling-tp23493625p23493625.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus
Apache Camel Reference Card:
http://refcardz.dzone.com/refcardz/enterprise-integration
Interview with me:
http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress

Reply via email to