[Zope] preventing transaction rollback
Jonathan Hobbs
toolkit at magma.ca
Sun Sep 19 08:55:47 EDT 2004
----- Original Message -----
From: "Sean Hastings" <whysean at softhome.net>
> I have a section of code that I want to have run only once during a
request.
> It mails out some information about the request. I want only one email per
> request even if a conflict occurs during the request. I am having no luck
> eliminating duplicate emails. I have tried this a few different ways now,
> but currently my code looks something like this:
>
> def theFunction(self,REQUEST):
> "docstring"
> ...do some stuff...
> get_transaction().commit()
> try:
> ...send the email...
> get_transaction().commit()
> except:
> pass
> ...do some more stuff...
> return self.return_page_template(REQUEST)
>
> I thought that this try block with a commit() would isolate the send mail
> code in its own transaction, and then catch any conflict exception and
> ignore it. But I am still getting multiple emails per transaction when
> multiple requests happen at the same time and conflicts occur.
An ugly solution:
Create a variable (property field) on a temporary folder (contents stored in
memory). When you send an email have the emailer routine load a unique
identifier into the variable. In subsequent emails, check the contents of
the variable before sending the email.
As I said, 'ugly', but it should work!
HTH
Jonathan
More information about the Zope
mailing list