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:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>