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]

Reply via email to