On Mon, 25 Aug 2003 16:32:07 +0200, Federico Real wrote:
> Hi Mick, I like your implementation od DAO , Can you send me a example for
> this? I would like use it.
> ----- Original Message -----
> From: "Robert Taylor" <[EMAIL PROTECTED]>
> To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
> Sent: Monday, August 25, 2003 3:07 PM
> Subject: RE: Is singleton DAO acceptable? -- Best Practices
> The design pattern doesn't states how DAO's are to be implemented, but
> rather what problem they are supposed to solve.
> 
> One reason why you might not want a DAO to be a singleton is if you
> instantiate
> one with an Connection. This might be done to avoid having to pass the
> Connection
> to each method.
> 
> I think your implementation is appropriate. It makes sense performance wise
> and it
> is also intuitively more OO. Why create a new instance of an object if it
> does
> not maintain state?
>> -----Original Message-----
>> From: news [mailto:[EMAIL PROTECTED] Behalf Of Mick Wever
>> Sent: Sunday, August 24, 2003 12:59 PM
>> To: [EMAIL PROTECTED]
>> Subject: Is singleton DAO acceptable? -- Best Practices
>>
>> All the DAO examples I've read have DaoFactory classes that always return
>> a new DAO instance, and typically the action using it keeps a handle to it
>> for that session.
>>
>> The DAOs that I've created have no state or instance variables, and get
>> their connections from a synchronized pool (and always returning the
>> connection within the same method call). So, since they are
>> multi-threaded, it makes sense to me performance wise it is better
>> for the factory to always return a singleton instance of the DAO.
>> This single instance of the DAO is shared across all sessions in
>> the JVM.
>> (Note this is not the traditional usage of singleton where the singleton
>> itself is responsible for returning the single instance through a static
>> method).
>>
>> My question is, is this such a good idea? Am I missing or misunderstanding
>> something crucial about the DAO Design Pattern?

Sorry the code is not open-source.
But the basic idea is if your DAO is multi-thread capable, ie it does not
have instance variables, or acesses all instance variables in a
synchronized manner, then your DAOFactory can return the same instance all
the time.
For example:

where you would have (in your DAOFactory):

<pre>
    public static MyDAO getMyDAO() throws MyDAOException{
        return new MyDAOImpl(); // OR however you choose to plug in the chosen 
implementation
    }
</pre>

instead you would have:

<pre>
    private static MyDAO instance;

    public static MyDAO getMyDAO() throws MyDAOException{
      if( instance == null){ // of course you need to synchronize this or make 
instance violatile
        instance = new MyDAOImpl(); // OR however you choose to plug in the chosen 
implementation
      }
      return instance;
    }
</pre>

Infact I have a SuperDAOFactory that all my DAOFactory subclass and 
it has a method that finds the DAOImpl I will use given the DAO interface
being requested from JNDI. Then all my instances are stored in the SuperDAOFactory
inside a Hashtable. (This solves the synchronization on the instance variable above).

Mick.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to