Pieter, although this looks easy its not that easy, I am aware that I can queue a mail sending task, problem is that task has to be idempotent to achiev desired behaviour,
a queue task can be executed for example twice, since those are specifications and this would result in sending mail twice, a naive aproach would be to update some db lock to prevent sending mail more than 1 time, but it is not easy, this is much more complicated, in other words operation is either atomic or it isnt, and without very precise mechanism you cannot prove that task will be runned only one. My own tests proved that due to email quota being reached (task fail and has be resheduled) some of the mails has been send twice. If Mail API would allowed to send mail only in case of some db transaction success it would be very easy to garant that mail will be send exactly 1 time. (although if it fails for some other reasons like recipient not found or so thats whole another story :) Basically this can be solved by 1) adding new API for sending mail (dont know if it so easy or whole problem isnt much much bigger than i think - distributed transactions ?) 2) implementing locking mechanism On Jul 12, 9:13 pm, Pieter Coucke <pieter.cou...@onthoo.com> wrote: > Create a task for sending e-mail instead of calling the mailservice > directly. > > use this in your task (a task can be part of a transaction) > > try{ > ... > > } catch (Throwable thr) { > log.error(...); > } > > and all exceptions will be catched. I think a task will be re-executed only > if it fails (throws an exception). > > > > > > > > On Sat, Jul 10, 2010 at 6:43 PM, Marcus Brody <mhrab...@gmail.com> wrote: > > Hello, > > > I would like to ask, if there is some way how to send mail only in > > case that some db transaction will be successful. > > I am not very experienced with gae, but I did study it now for about 2 > > weeks. > > > Desired output: > > > 1) prepare email > > 2) db transaction.begin() > > 3) do some db operation > > 4) bind sending mail with current transaction (similar to > > how can you can attach Task to queue) > > 5) db transaction.commit() > > > I am aware that I can queue mail sending task to task queue, but i > > cannot find the way how to do that mail sending task Idempotent > > without (i think) complicated locking mechanism . > > Most simple solution would be to put mail sending task to task queue, > > but this means mail could be send twice in some rare situation. (this > > is maybe not that bad but if there is some way how to avoid it, I > > would like to know) > > > Thank you, > > > Marcus > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google App Engine for Java" group. > > To post to this group, send email to > > google-appengine-j...@googlegroups.com. > > To unsubscribe from this group, send email to > > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/google-appengine-java?hl=en. > > -- > Pieter Coucke > Onthoo BVBAhttp://www.onthoo.comhttp://www.koopjeszoeker.be -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-j...@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.