struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Frederic Laub" <in...@012.net.il>
Subject RE: Database Connection in Logic Beans - pooling?
Date Mon, 02 Sep 2002 16:45:57 GMT
Hi,

How do achieve the following:
In some cases I want to get a connection at the beginning of a request
(request scope), pass the same connection to all the java beans that are
called in the request and return the connection at the end of the request.
Where do I put the code to return the connection to the pool at the end of
the request and in case of an error be sure that the connection is returned
to the pool?
A same connection is required when all DML statements throughout a request
are part of a same transaction.
The commit (or rollback in case of an error) statement is issued at the end
of the request before the connection is returned to the pool.
Sorry if the vocabulary I used is database oriented and not 100 %
java/struts compatible.

Your help will be appreciated.
Frederic


-----Original Message-----
From: thart@part.net [mailto:thart@part.net]
Sent: Monday, September 02, 2002 9:06 AM
To: Struts Users Mailing List
Subject: Re: Database Connection in Logic Beans - pooling?


Steve McLeod writes:

> I am using:
> Tomcat 4.0
> Struts 1.0.2
>
> The problem
> ========
>
> I have successfully used the Struts database connection pooling in a trial
> web app, but as far as I can tell, a reference to the datasource can only
be
> obtained from within an Action class (or directly within a JSP page but
> let's not think about that today).
>
> However I would like to have logic beans which handle database access,
> rather than have this in the Action class. But I can't get a reference to
> the datasource from the logic bean because it doesn't have a
ServletContext
> to which I can get a handle.
>
> I have toyed with various ideas:
> - Initialise a logic bean by passing it a reference to the Servlet
> - Acquire a connection in the Action class and pass that to the bean
>
> But really, I would rather the logic bean know inherently how to acquire a
> database connection.
>
> My current workaround is to not use the Struts connection pooling, and
> rather to manually create a connection each time database access needs to
be
> done, then destroy it. But this is clearly not suitable for our production
> environment.

There are a few ways to solve your problem. One way would be to bind a
datasource to some JNDI name that your logic beans are aware of. Then, using
that name, your logic beans can lookup the datasource completely independent
of struts.

Give it a try,

Troy

>
>
> The context of my problem
> ==================
>
> I want to use some code like this in a JSP:
>
> <jsp:useBean id="abean" scope="page"
> class="au.com.sunesis.timesheets.ClientManager" />
> <table border="1">
>     <tr>
>         <th>#</th>
>         <th>Client</th>
>         <th>Active</th>
>     </tr>
> <logic:iterate id="clientList" name="abean" property="clients"
> type="au.com.sunesis.timesheets.Client">
>     <tr>
>         <td><bean:write name="clientList" property="clientID"/></td>
>         <td><bean:write name="clientList" property="clientName"/></td>
>         <td><bean:write name="clientList" property="active"/></td>
>     </tr>
> </logic:iterate>
>
>
> The idea is that ClientManager is used to handle all general database
tasks
> for the Client bean (which maps to a Client entity in the database).
> ClientManager.getClients() connects to the database, creates an ArrayList
of
> Client objects, one for each row in the database, and returns the
ArrayList.
>
> ClientManager has other methods, such as:
> -         ClientManager.delete(Client c), which deletes the row in the
> database entity corresponding to the specified client.
> -         ClientManager.findByPrimaryKey(int ID) which returns the Client
> which matches the specified ID
> -         ClientManager.save(Client c), which stores the client in the
> database, creating or updating as necessary
>
> So an Action class can also call any of these directly, and it really
> shouldn't care about how these work and how they store to/retrieve from
the
> database. But I can't think of the elegant way to do this and still be
able
> to use the Struts connection pooling.
>
> Any thoughts?
>
> Thanks
>
> Steve McLeod
>
>
>


--
To unsubscribe, e-mail:
<mailto:struts-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail:
<mailto:struts-user-help@jakarta.apache.org>




--
To unsubscribe, e-mail:   <mailto:struts-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-user-help@jakarta.apache.org>


Mime
View raw message