struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Miguel Angel Mulero Martinez <miguel-angel.mul...@mad.tecsidel.es>
Subject RE: Database Connection in Logic Beans - pooling?
Date Mon, 02 Sep 2002 06:34:49 GMT
You can too use the DBCP from jakarta, I'm using it and works perfectly:

http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-how
to.html



-----Mensaje original-----
De: Steve McLeod [mailto:steve.mcleod@ingena.com.au]
Enviado el: lunes, 02 de septiembre de 2002 2:10
Para: 'struts-user@jakarta.apache.org'
Asunto: Database Connection in Logic Beans - pooling?

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.


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>


Mime
View raw message