Re: [OT] DAO Pattern in Struts

2005-08-24 Thread Rokibul Islam Khan
Whats about a thread local variable to store the connection instead of
as instance variable ?

On 8/24/05, Gareth Evans [EMAIL PROTECTED] wrote:
 Hi Paul,
 
 How about using a DBCP, that way the connections are always there, a getting 
 a connection each time
 you need to do a unit of work becomes less of an overhead.  With dbcp you can 
 create your connection
   by using an xml file usually named 'something.jocl', drop this into you 
 classpath and load a
 connection like you normally would, the url for the connection being
 'jdbc:apache:commons:dbcp:/something'
 
 Take a look at the jocl example
 
 http://cvs.apache.org/viewcvs/jakarta-commons/dbcp/doc/
 
 This allows an easy to create, easy to change database configuration, using a 
 connection pool.
 
 Regards,
 
 Gareth
 
 Paul Benedict wrote:
  Guys,
 
  This is off-topic but I need your help. There are some
  good programmers here and I would like to receive some
  advice back. I am sure there's a simple answer to it.
 
  My Struts app is a multitier app (Web - Business -
  DAO) and it uses Jakarta Commons DbUtils for the DAO
  layer. My DAO methods are the typical get
  connection,execute,close connection pattern. Well,
  suddenly my DAO methods are complex enough that I can
  call my publically defined methods as helpers, which
  leads to all sorts of problems. That would opening a
  connection per call to a sibling method!
 
  What should be done here?
 
  I thought of moving the ownership of the connection
  from the method to the instance level. Is this
  appropriate? At least I could get sharing of a
  connection. But some business layers call multiple
  different DAO objects and it makes even more sense to
  share a connection across all DAO objects. Would this
  be better? I think so, but I don't know how to model
  it.
 
  Please, any help! It is holding up my design.
 
  Thanks,
  Paul
 
 
 
  __
  Yahoo! Mail
  Stay connected, organized, and protected. Take the tour:
  http://tour.mail.yahoo.com/mailtour.html
 
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 --
 Gareth Evans
 
 MSoft eSolutions Limited
 Technology Centre
 Inward Way
 Rossmore Business Park
 Ellesmere Port
 Cheshire
 CH65 3EN
 
 --
 Tel:+44 (0)870 0100 704
 Fax:+44 (0)870 9010 705
 E-Mail: [EMAIL PROTECTED]
 Web:www.msoft.co.uk
 
 --
 Terms:
 Please note that any prices quoted within this e-mail are subject to VAT.
 All program details and code described in this e-mail are subject to
 copyright (c) of MSoft eSolutions Limited and remain the intellectual
 property of MSoft eSolutions Limited.
 Any proposal or pricing information contained within this e-mail are
 subject to MSoft eSolutions' Terms and Conditions
 --
 Disclaimer:
 This message is intended only for use of the addressee. If this message
 was sent to you in error, please notify the sender and delete this
 message. MSoft eSolutions Limited cannot accept responsibility for viruses,
 so please scan attachments. Views expressed in this message do not
 necessarily reflect those of MSoft eSolutions Limited who will not
 necessarily be bound by its contents.
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 


-- 
--
Rokibul Islam Khan
Software Developer

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



Re: [OT] DAO Pattern in Struts

2005-08-24 Thread Emmanouil Batsis

Larry Meadors wrote:


You can (and should) use the DAO pattern with Hibernate, too.



So true, plus a good DAO interface can decouple your database access 
implementation and the rest of your app, so that you can switch from 
hibernate to ibatis or plain jdbc or whatever without having to make 
code changes to anything that uses DB connectivity.


M

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



Re: [OT] DAO Pattern in Struts

2005-08-24 Thread Larry Meadors
EXACTLY! :-D

I think Paul and I mis-communicated on the point of the iBATIS DAO earlier. 

It is something very different from iBATIS SQL Maps.

One of the key principles of Object-Oriented programming is
encapsulation – the separation of an implementation and its public
interface. The DAO pattern is one more tool that allows you to do that
in your applications.

By separating the data access details from the data access API, we are
able to provide a homogeneous set of interfaces over heterogeneous
data access mechanisms. An application can access data from multiple
databases, each with a different underlying API using a single
consistent data access API.

Interestingly, the JDBC API is another application of the DAO pattern.
In that realm, you have a set of interfaces, and database vendors
implement them in a way that makes it possible to use them
interchangeably – for the most part. In a few cases, where vendors
feel that the interfaces do not provide the capability to do things
that they want to do, they work outside the interface.

This pattern is one of the things that make tools like iBATIS SQL maps
and Hibernate possible. Because nearly all database vendors implement
the JDBC APIs reasonably accurately, tools can be written that operate
against those interfaces instead of the underlying implementations,
and for the most part, those tools will work with any vendor's
implementation.

This is one of the goals of the iBATIS DAO – to help you provide a set
of interfaces to your applications that hide the underlying
implementation of the data access. So, if you have a Hibernate based
application that uses the DAO pattern, you can replace that with a SQL
Map based implementation, or a JDBC based implementation without
having to rewrite the entire application. Instead, all that needs to
be changed is the implementations of the interfaces that the
application is using. As long as the DAO interface is implemented
correctly, the application will continue to function as expected.

Larry

On 8/24/05, Emmanouil Batsis [EMAIL PROTECTED] wrote:
 Larry Meadors wrote:
 
 You can (and should) use the DAO pattern with Hibernate, too.
 
 
 So true, plus a good DAO interface can decouple your database access
 implementation and the rest of your app, so that you can switch from
 hibernate to ibatis or plain jdbc or whatever without having to make
 code changes to anything that uses DB connectivity.
 
 M
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 



[OT] DAO Pattern in Struts

2005-08-23 Thread Paul Benedict
Guys,

This is off-topic but I need your help. There are some
good programmers here and I would like to receive some
advice back. I am sure there's a simple answer to it.

My Struts app is a multitier app (Web - Business -
DAO) and it uses Jakarta Commons DbUtils for the DAO
layer. My DAO methods are the typical get
connection,execute,close connection pattern. Well,
suddenly my DAO methods are complex enough that I can
call my publically defined methods as helpers, which
leads to all sorts of problems. That would opening a
connection per call to a sibling method!

What should be done here?

I thought of moving the ownership of the connection
from the method to the instance level. Is this
appropriate? At least I could get sharing of a
connection. But some business layers call multiple
different DAO objects and it makes even more sense to
share a connection across all DAO objects. Would this
be better? I think so, but I don't know how to model
it.

Please, any help! It is holding up my design.

Thanks,
Paul



__ 
Yahoo! Mail 
Stay connected, organized, and protected. Take the tour: 
http://tour.mail.yahoo.com/mailtour.html 


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



Re: [OT] DAO Pattern in Struts

2005-08-23 Thread Larry Meadors
Have you looked at using something like the iBATIS DAO?

I think it could save you alot of pain.

One thing to watch out for is thread safety - putting a connection on
an instance (especially a shared instance) is pretty risky, especially
when you start thinking about transactions and the like...that kind of
thing is really better handled at the thread level (which is what
iBATIS does).

Larry


On 8/23/05, Paul Benedict [EMAIL PROTECTED] wrote:
 Guys,
 
 This is off-topic but I need your help. There are some
 good programmers here and I would like to receive some
 advice back. I am sure there's a simple answer to it.
 
 My Struts app is a multitier app (Web - Business -
 DAO) and it uses Jakarta Commons DbUtils for the DAO
 layer. My DAO methods are the typical get
 connection,execute,close connection pattern. Well,
 suddenly my DAO methods are complex enough that I can
 call my publically defined methods as helpers, which
 leads to all sorts of problems. That would opening a
 connection per call to a sibling method!
 
 What should be done here?
 
 I thought of moving the ownership of the connection
 from the method to the instance level. Is this
 appropriate? At least I could get sharing of a
 connection. But some business layers call multiple
 different DAO objects and it makes even more sense to
 share a connection across all DAO objects. Would this
 be better? I think so, but I don't know how to model
 it.
 
 Please, any help! It is holding up my design.
 
 Thanks,
 Paul
 
 
 
 __
 Yahoo! Mail
 Stay connected, organized, and protected. Take the tour:
 http://tour.mail.yahoo.com/mailtour.html
 
 
 -
 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]



Re: [OT] DAO Pattern in Struts

2005-08-23 Thread erikweber
Not sure if this is really much help because I'm sure you've thought of this, 
but I mirror many or all of my DB DAO methods with methods that take the 
Connection as a parameter . . . In the primary method, they obtain their own 
Connections, but in the secondary method, they use whatever Connection is 
passed as a parameter. Then I have an adapter between the business manager and 
the DAOs which obtains a Connection (and for example turns off autocommit), 
passes it to many DAO methods, and then releases the Connection (after turning 
autocommit back on).

If you are using Connection pooling though, the cost still may be very low and 
not worth the trouble, as you are not really opening any Connections for each 
DAO call -- the pool keeps them open all the time. When you get a Connection, 
it comes from a cache. When you invoke close on the Connection, you are really 
invoking close on an adapter which releases the Connection back to the cache . 
. .

(But sometimes you need to share a Connection for another reason besides 
optimization.)

Someone correct me if I'm wrong. Hope that helps, as I'm not familiar with the 
Jakarta DAO stuff.

Erik


-Original Message-
From: Paul Benedict [EMAIL PROTECTED]
Sent: Aug 23, 2005 6:35 PM
To: user@struts.apache.org
Subject: [OT] DAO Pattern in Struts

Guys,

This is off-topic but I need your help. There are some
good programmers here and I would like to receive some
advice back. I am sure there's a simple answer to it.

My Struts app is a multitier app (Web - Business -
DAO) and it uses Jakarta Commons DbUtils for the DAO
layer. My DAO methods are the typical get
connection,execute,close connection pattern. Well,
suddenly my DAO methods are complex enough that I can
call my publically defined methods as helpers, which
leads to all sorts of problems. That would opening a
connection per call to a sibling method!

What should be done here?

I thought of moving the ownership of the connection
from the method to the instance level. Is this
appropriate? At least I could get sharing of a
connection. But some business layers call multiple
different DAO objects and it makes even more sense to
share a connection across all DAO objects. Would this
be better? I think so, but I don't know how to model
it.

Please, any help! It is holding up my design.

Thanks,
Paul



__ 
Yahoo! Mail 
Stay connected, organized, and protected. Take the tour: 
http://tour.mail.yahoo.com/mailtour.html 


-
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]



Re: [OT] DAO Pattern in Struts

2005-08-23 Thread Paul Benedict
Erik,

Oh, I have worked on a project where that was the
pattern I designed for myself!! One accepted a
connection for transactions, the other for
self-contained singleton executions. Yup, it's a great
pattern.

You raise an interesting point. I never thought about
using a middle-man between my business tier and DAO.
I'll have to think about that. 

And yes, I do use connection pooling -- good point! I
guess there is not a performance gain in keeping the
connection around at the instance level. Perhaps I am
being scrupulous and trying to save time with the pool
code, but that's ridiculous. It's better to put it
back in the pool because at the millisecond level,
many more threads could be using it in between my
thread.

And, I like the IBATIS idea described by Larry... but
sorry, I love Hibernate :-) I don't use it yet, but I
am on board whenever I get to use it.

Thanks!
Paul




Start your day with Yahoo! - make it your home page 
http://www.yahoo.com/r/hs 
 

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



Re: [OT] DAO Pattern in Struts

2005-08-23 Thread Larry Meadors
You can (and should) use the DAO pattern with Hibernate, too.

The iBATIS DAO even has built-in support for hibernate (of course, it
has support for sql maps, too).

Larry


On 8/23/05, Paul Benedict [EMAIL PROTECTED] wrote:
 Erik,
 
 Oh, I have worked on a project where that was the
 pattern I designed for myself!! One accepted a
 connection for transactions, the other for
 self-contained singleton executions. Yup, it's a great
 pattern.
 
 You raise an interesting point. I never thought about
 using a middle-man between my business tier and DAO.
 I'll have to think about that.
 
 And yes, I do use connection pooling -- good point! I
 guess there is not a performance gain in keeping the
 connection around at the instance level. Perhaps I am
 being scrupulous and trying to save time with the pool
 code, but that's ridiculous. It's better to put it
 back in the pool because at the millisecond level,
 many more threads could be using it in between my
 thread.
 
 And, I like the IBATIS idea described by Larry... but
 sorry, I love Hibernate :-) I don't use it yet, but I
 am on board whenever I get to use it.
 
 Thanks!
 Paul
 
 
 
 
 Start your day with Yahoo! - make it your home page
 http://www.yahoo.com/r/hs
 
 
 -
 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]