You could take a look at the Spring framework - very cool!
|---------+---------------------------->
| | "Sean Schofield" |
| | <[EMAIL PROTECTED]|
| | chof.com> |
| | |
| | 09/17/2004 03:04 |
| | PM |
| | Please respond to|
| | "Struts Users |
| | Mailing List" |
| | |
|---------+---------------------------->
>------------------------------------------------------------------------------------------------------------------------|
|
|
| To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
|
| cc:
|
| Subject: Re: Idea for chain and DB transactions
|
>------------------------------------------------------------------------------------------------------------------------|
I had thought about this but it involves duplicating each DAO method. Also
if I ever wanted to switch to EJB I would have to undo all of the methods
again. Its definitely an option though. I was just hoping for something
that would involve less changes to my DAO's.
Thanks for the feedback.
sean
----- Original Message -----
From: "Erik Weber" <[EMAIL PROTECTED]>
To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
Sent: Friday, September 17, 2004 2:49 PM
Subject: Re: Idea for chain and DB transactions
> Overload each existing DAO method with a secondary method that accepts
the
> Connection as a parameter instead of getting it on its own. Then let your
> service layer object obtain the Connection, set autocommit to false,
> invoke all the DAO methods you need, passing the customized Connection to
> each. Then commit and set autocommit back to true in your service layer
> object.
>
> Erik
>
>
> Sean Schofield wrote:
>
>>I have a problem and a proposed solution. I would greatly appreciate any
>>feedback about the proposed solution.
>>
>>Problem:
>>=======
>>I'm currently using a Struts application with a connection pool (using
>>DBCP as supplied by Tomat). When a database update is needed, the Struts
>>actions will call the facade which will talk to my service layer
>>(currently POJO's which handle business logic.) My service layer in turn
>>talks to the appropriate DAO. Each of these DAO's extends from a common
>>abstract class that provides basic functionality including obtaining a
>>connection from the DataSource (via the pool). A key aspect of my design
>>is that some updates are in distinct areas of the database and so I have
>>different DAO's for each area (ex. one for "workflow" on for "document.")
>>As currently implemented I am unable to take advantage of transactions
>>because the two DAOs will be getting a connection indepently from the
pool
>>and they will most likely not obtain the connection each time. If I
could
>>just get the same connection each time, then I could use
>>setAutoCommit(false).
>>
>>Proposed Solution:
>>==============
>>I'm thinking I could set up a few chains for the various kind of updates.
>>The chains would be called by the POJO service layer (instead of calling
>>the DAO's directly.) The first Command in the chain would be to
indentify
>>all database updates in the chain as needing transactions. This would be
>>done through a static method on a new object called TransactionManager.
>>Basically I would have a hashtable that would maintain connections for
the
>>duration of the chain. The connections would be stored by the current
>>thread (use that as the key to the table.)
>>Then when a command down the line needs a database connection, it would
>>first check to see if there is one already set aside for it to use.
>>Actually the command would call the DAO and the DAO would check. The
>>command would also be decorated by a custom wrapper so that if the DAO's
>>try to close the connection, I'll ignore it. Then when the chain does
the
>>post processing in reverse order. So the last clean up step will be to
>>check for my custom DAOException. If there is one, then rollback,
>>otherwise commit. Finally, the connection is removed from the
>>TransactionManager.
>>
>>I think this might be crazy enough to work. I know we could allways use
>>EJB and get transactions but that might be overkill since the volume is
>>very light (this is custom software for a government agency not
>>ecommerce.) Please let me know what you think. A big question I have is
>>about storing and retrieving the datbase connection using the current
>>thread as the key to a hashtable. Also, I know that I will have to be
>>careful with thread synchronization.
>>
>>Thanks,
>>sean
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]