I'll echo the Spring suggestion.  It simplifies Action-level programming by
quite a bit.

On the flip side, it requires some extra XML configuration, but IMO it's a
good tradeoff.

-Brian


On Thu, Jan 7, 2010 at 12:18 PM, Chris Pratt <thechrispr...@gmail.com>wrote:

> 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
> >
> >
>

Reply via email to