[TransWarp] Windows, LDAP, and transactions
Roché Compaan
roche at upfrontsystems.co.za
Tue Dec 31 04:36:35 EST 2002
On Mon, 30 Dec 2002 16:16:14 -0500
"Phillip J. Eby" <pje at telecommunity.com> wrote:
> At 03:50 PM 12/30/02 -0500, Phillip J. Eby wrote:
> >At 03:32 PM 12/30/02 +0200, Roché Compaan wrote:
> >>But an EntityDM wants to join a transaction in __getitem__ so how will
> >>they work with a LDAPConnection?
> >
> >They'll work just fine. LDAPConnection objects just aren't going to be
> >transactional. I'll probably give them modification methods (e.g. add,
> >change, delete) that require autocommit to be engaged. Thus, you won't be
> >able to use an LDAP connection for modification operations unless you give
> >it a transaction of its own and engage its autocommit flag. The result
> >will be that you'll be forced to acknowledge the non-transactionality of
> >LDAP in order to perform modifications with it.
>
> Just to clarify the above a bit... keep in mind that the EntityDM and the
> LDAPConnection don't have to be part of the same transaction. Also, just
> because the DM has joined a transaction, doesn't mean the LDAP connection
> has to. If you want to have a DM that wants to be able to *write* to an
> LDAP connection, your job is going to be a bit more complex. You'll need
> to have the save() method put items in some kind of modification queue, to
> be executed in the voting phase of the DM's transaction. Ideally, you'd do
> this in a way that ensured that the LDAP write operation took place as the
> very first real database write in the whole transaction, and that there was
> only one LDAP write operation per transaction. That would be the only way
> to do it safely, I believe.
There's one problem: the LDAP write operation might succeed and
subsequent writes by other DMs to other storage devices in the same
transaction might fail.
> Of course, if you can also guarantee that no other "real" writes to storage
> devices (files, databases, etc.) are taking place in the same transaction,
> then you can bypass all of this stuff. Just go ahead and do the LDAP write
> in the DM's save() method. If it succeeds, great. If it fails, you get an
> error and tell the user. So, if your use cases for LDAP modification can
> be fit into that pattern, you're all set.
This seems like the *only* safe way and I think one should seriously
consider this when you design your app.
--
Roché Compaan
Upfront Systems http://www.upfrontsystems.co.za
More information about the PEAK
mailing list