We use Spring (and Spring-LDAP) for that layer. It works great, manages all our DAO's and their resources, and then injects them into the Actions as needed. (*Chris*)
On Thu, Jan 7, 2010 at 10:06 AM, Jasvinder S. Bahra < bbdl21...@blueyonder.co.uk> wrote: > Does anyone know of any techniques that would allow a Database Access > Object (DAO) to be used from the various actions that make up a Struts > application? > > I have a DAO which, when instantiated, acquires a data source from the > servlet container (in this case, Apache Tomcat). Thereafter, I can execute > the various methods provided by the object which use the data source to > execute SQL queries/statements, and return usable data in the form of > Strings, Maps, Vectors etc, as appropriate. > > Instantiating the DAO in the execute() method of each of my action's > however, seems a little inefficient. Does Struts provide any way to > instantiate the object once and then make it available for the lifetime of > the container (in a way that my Actions can access it)? > > Note please that i'm well aware that this is a somewhat non-standard > approach to database interaction. I am intending to investigate Hibernate > (and like) at some point, but for the time being I want to avoid such. > > This is the skeleton of the DAO I have in mind... > > ---------------------------------------------------------------------- > import java.sql.*; > import javax.sql.*; > import javax.naming.*; > import javax.servlet.*; > > public class MyDataAccessObject { > > private DataSource dataSource; > private String SQL; > > public MyDataAccessObject() throws Exception { > > try { > Context init = new InitialContext(); > Context ctx = (Context) init.lookup("java:comp/env"); > dataSource = (DataSource) ctx.lookup("jdbc/mysqldb"); > } catch (NamingException ne) { > throw new Exception("Cannot retrieve java:comp/env/jdbc/mysqldb", > ne); > } > > SQL = null; > } > > public String getValue(String name) { > > Connection dbcon = null; > PreparedStatement pstmt = null; > ResultSet rs = null; > > String value = null; > > try { > dbcon = dataSource.getConnection(); > > SQL = "SELECT value FROM table WHERE name = ?"; > > pstmt = dbcon.prepareStatement(SQL); > pstmt.setString(1, name); > > rs = pstmt.executeQuery(); > while (rs.next()) { > value = rs.getString("value"); > } > > rs.close(); > rs = null; > > pstmt.close(); > pstmt = null; > > dbcon.close(); > dbcon = null; > } catch (SQLException ex) { > log(ex); > } catch (Exception ex) { > log(ex); > } finally { > if (rs != null) { > try { rs.close(); } catch (Exception fe1) { log(fe1); } > rs = null; > } > > if (pstmt != null) { > try { pstmt.close(); } catch (Exception fe2) { log(fe2); } > pstmt = null; > } > > if (dbcon != null) { > try { dbcon.close(); } catch (Exception fe3) { log(fe3); } > dbcon = null; > } > } > > SQL = null; > return value; > } > > private void log(...) { > // Handle logging > } > } > ---------------------------------------------------------------------- > > Thanks, > > Jazz > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > >