On 1/31/07, Cecilia Castillo <[EMAIL PROTECTED]> wrote:

I am new to Struts, Struts2, and Spring.  (And maybe know too much about
jdbc.)

I have written my application with Struts2 and am only using Spring
to manage my database connections.  I have defined my oracle database
as a JNDI resource in my Tomcat server.xml file.

I have defined a dataSource bean in my  applicationContext.xml for my
database JNDI resource.

I have written some DAO classes which are spring beans defined in my
applicationContext.xml.  These all have a dataSource property
pointing to my database.  These DAO classes have methods which
execute various db stored procedures or select statements.

Now, I have some strut2 ActionSupport  subclasses which do something
like this in my execute() method
                ThingDao thingDao= (ThingDao )getBean("ThingDao");


All is well, all is working.

However, what I want to know is something about how Spring
works.  Does it manage these beans as singletons?


In Spring 2, bean lifecycle is controlled by the "scope" attribute of the
<bean> element.

See
http://www.springframework.org/docs/reference/beans.html#beans-factory-scopesfor
more info.

Also, the scope defaults to "singleton", which is counter to the original
model for Struts2 Actions, where each action is generally expected to be
instantiated once per request.

For your DAO bean, etc, of course you would choose for yourself whether to
set to a "singleton" scope or a "prototype" scope.

Or every time the
execute() method is called, and I get my dao bean, does it
instantiate a new instance of the dao bean object?  Should I save
this dao bean object in a private member of my ActionSupport class
and reuse it everytime execute() is called?


This suggests that your model is also counter to the Struts2 model.  If you
are writing Action classes with properties that are populated based on
request parameters, you will be subject to concurrency problems (race
conditions) if you have singleton actions.  I'd recommend against it.
Actions are supposed to be lightweight.

At what point does Spring get a database connection...when  the dao
bean is instantiated, or when the dao bean executes() some jdbc
call.  (I assume this is when it makes a jdbc call, but I just want
to confirm).


This I can't answer directly, but remember that Spring is open source.  You
could check the code.

If anyone can enlighten me or point me to some good documentation on
this subject, I would appreciate it.


Spring's own documentation (referenced above) is thorough and pretty clear.
There are also a number of good Spring books.

Hope this helps.

Joe

--
Joe Germuska
[EMAIL PROTECTED] * http://blog.germuska.com

"The truth is that we learned from João forever to be out of tune."
-- Caetano Veloso

Reply via email to