You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Edgar P Dollin <ed...@blue-moose.net> on 2003/12/08 23:22:17 UTC

RE: HELP: about to get datasource of struts and pass to logic bea ns...

Don't spend the time to get DataSource working.  It is deprecated and will
be removed from struts in 1.2.  I use Poolman at sourceforge (I highly
reccomend it for non-j2ee projects).  Most others use the DataSource
supplied with the container.

Edgar

-----Original Message-----
From: Caroline Jen [mailto:jiapei_jen@yahoo.com]
Sent: Monday, December 08, 2003 4:29 PM
To: Struts Users Mailing List
Subject: Re: HELP: about to get datasource of struts and pass to logic
beans...


There are lots of classes involved.  I will give you
an example:

1. my LogonAction calls EditorService.java (business
delegate)
2. EditorService.java calls MySQLEditorDAO.java (data
access object implements EditorDAO.java, which is a
data access interface)
3. the MySQLEditorDAO.java returns EditorBean.java (a
Java bean with three properties)

Here is my LogonAction.java:

package org.apache.artimus.logon;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;

import org.apache.artimus.lang.Tokens;

public final class LogonAction extends Action {

    public ActionForward execute(ActionMapping
mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)
        throws java.lang.Exception {
        
        // Obtain username and password from web tier
        String username = ((LogonForm)
form).getUsername();
        String password = ((LogonForm)
form).getPassword();
        
        EditorService service = new EditorService();
        EditorBean editor = service.findEditorData(
username );

        HttpSession session = request.getSession();
        session.setAttribute( "editor", editor );

        // Log this event, if appropriate

        if (servlet.getDebug() >= Tokens.DEBUG) {
            StringBuffer message =
                new StringBuffer("LogonAction: User
'");
            message.append(username);
            message.append("' logged on in session ");
            message.append(session.getId());
            servlet.log(message.toString());
        }

        // Return success
        return (mapping.findForward(Tokens.VALID));

    }

} // End LogonAction

Here is the EditorService.java:

package org.apache.artimus.logon;

import org.apache.artimus.logon.dao.*;

public class EditorService 
{
   EditorDAO ed = new MySQLEditorDAO();
   public EditorBean findEditorData( String username )
   {    
      return ed.findEditor( username );
   }
}

Here is the EditorDAO.java:

package org.apache.artimus.logon.dao;

import org.apache.artimus.logon.EditorBean;
import
org.apache.artimus.logon.exceptions.EditorDAOSysException;

public interface EditorDAO.java
{
    public EditorBean findEditor( String username )
        throws EditorDAOSysException;
}

Here is the MySQLEditorDAO.java:

package org.apache.artimus.logon.dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

import org.apache.artimus.logon.EditorBean;
import
org.apache.artimus.logon.exceptions.EditorDAOSysException;
import org.apache.artimus.ConnectionPool.DBConnection;

public class MySQLEditorDAO implements EditorDAO
{
   // Here the return type is EditorBean
   public EditorBean findEditor( String username ) 
       throws EditorDAOSysException 
   {
      Connection conn = null;
      Statement stmt = null;
      ResultSet rs = null;

      try 
      {
         conn = DBConnection.getDBConnection();
         stmt = conn.createStatement();
         String query = "SELECT user_role,
journal_category FROM members WHERE user_name = '" +
username + "'";   
         rs = stmt.executeQuery( query );
         if (rs.next()) 
         {
            return new EditorBean( username,
rs.getString( "user_role" ), rs.getString(
"journal_category" ) );
         }
         else
         {
            System.out.println( "invalid user name" );
            return null;            
         }
      } 
      catch (SQLException se)
      {
         throw new
EditorDAOSysException("SQLException: " +
se.getMessage());
      }
      finally
      {
         if ( conn != null )
         {
            try
            {
               rs.close();
               rs = null;
               stmt.close();
               stmt = null;
               conn.close();
            }
            catch( SQLException sqlEx )
            {
               System.out.println( "Problem occurs
while closing " + sqlEx );
            }
            conn = null;
         }       
      }
   }
}

Here is the EditorBean.java:

package org.apache.artimus.logon;

import org.apache.artimus.logon.dao.*;

public class EditorBean {

   private String username;
   private String userrole;
   private String keyValue;

   static EditorDAO ed = new MySQLEditorDAO();

   public EditorBean() {}
   public EditorBean( String username, String
userrole, String keyValue )
   {
      setUsername( username );
      setUserrole( userrole );
      setKeyValue( keyValue );
   }
   public String getUsername() {
      return username;
   }
   public void setUsername( String username ) {
      this.username = username;
   }
   public String getUserrole() {
      return userrole;
   }
   public void setUserrole( String userrole ) {
      this.userrole = userrole;
   }
   public String getKeyValue() {
      return keyValue;
   }
   public void setKeyValue( String keyValue ) {
      this.keyValue = keyValue;
   }
}

Here is the DBConnection.java, which gets a connection
object from a connection pool (you have to configure
your server's connection pool):

package org.apache.artimus.ConnectionPool;

import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DBConnection 
{
   public static Connection getDBConnection() throws
SQLException
   {
      Connection conn = null;

      try
      {
         InitialContext ctx = new InitialContext();
         DataSource ds = ( DataSource ) ctx.lookup(
"java:comp/env/jdbc/MySQLDB" );

         try 
         {
            conn = ds.getConnection();
         }
         catch( SQLException e )
         {  
            System.out.println( "Open connection
failure: " + e.getMessage() );
         }
      }
      catch( NamingException nEx )
      {
         nEx.printStackTrace();
      }
      return conn;
   }
}

Here is the exception handling class:

package org.apache.artimus.logon.exceptions;

/**
 * EditorDAOSysException is an exception that extends
the standard
 * RunTimeException Exception. This is thrown by the
DAOs of the article
 * component when there is some irrecoverable error
(like SQLException)
 */

public class EditorDAOSysException extends
RuntimeException {

    /**
     * Constructor
     * @param str    a string that explains what the
exception condition is
     */
    public EditorDAOSysException (String str) {
        super(str);
    } 

    /**
     * Default constructor. Takes no arguments
     */
    public EditorDAOSysException () {
        super();
    }
}

-Caroline
--- Ricky <Ri...@hotmail.com> wrote:
> hi, there, 
> 
>     with my project i had several queries about get
> datasource in struts. i know how to get datasource
> in struts, just as in myAction, use getDataSource
> method and return DataSource object, and go on to
> get connection .... 
> 
>     i also know the logic beans between the
> Controller and Module, so i create a logic bean ,i
> don't know how to get datasourc of pass the
> datasource, in some tutorial , i got a way to solve
> this, create a method getDAO(HttpServletRequest
> request) and pass the request to the method to get
> DataSource, i was lost here, i dont' know what
> should i return in getDAO, should i return a
> DataSource object or others and in my logic bean i
> can use the datasource and also get connection ,
> statement and resultset object , there i have to
> close it after i finish my process ....what do you
> think of this i did ? in general, when i got a
> DataSource, i will got a connection from datasource
> and a PrepareStatement and also a ResultSet , when i
> finished my process, i can close all object i opened
> before in final method of try
> ...catch...experession.. now what should i do to
> return a proper object in getDAO method and in logic
> beans i can use the object to process logic
> business...
> 
> i appologized for this ... i hope you can give me
> some suggestion or flow...... thanx!
> 
> now here is my flow of struts framework to pass the
> datasource to the logic beans...  i hope you can
> reword if you have some good idea...of correct my
> mistake... :)
> 
>     myAction :
> 
>     myAction extends Action() {
>       public ActionForward execute(ActionMapping
> mapping,
>                                ActionForm form,
>                                HttpServletRequest
> request,
>                                HttpServletResponse
> response) {
>         LogicBean bean = new LogicBean();
>         Object objcet =
> bean.doMethod(getDAO(request), other param)
>       }
>       
>       public DataSource getDAO(HttpServletRequest
> request) {
>         DataSource ds = null;
>         ds = getDataSource(request);
>         return ds;
>       }
>     }
> 
>     and in my logic bean :
> 
>     class LogicBean {
>       public Objct doMethod(DataSource ds, other
> param) {
>         try {
>           Connection conn = ds.getConnection();
>           PrepareStatment stmt =
> conn.prepareStatment("SELECT .......");
>           stmt.setInt(1,....);
>           ResultSet rs = stmt.executeQuery();
>           ....
>           return Object.....;
>         } catch (SQLException ex) {
>           ex.printStactTrace();
>         } final {
>           try {
>             rs.close();
>             stmt.close();
>             conn.close()
>           } catch (Exception ex) {
>             ex.printStactTrace();
>           }
>         }
>         return null;
>       }
>     }
> 
>     should i pass the DataSource to my logic beans?
> otherwise what object should i pass....
> 
> 
> 
> 
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail:
> struts-user-help@jakarta.apache.org
> 


__________________________________
Do you Yahoo!?
New Yahoo! Photos - easier uploading and sharing.
http://photos.yahoo.com/

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


Re: HELP: about to get datasource of struts and pass to logic bea ns...

Posted by Vic Cekvenich <ce...@basebeans.com>.
Ah a small comment... The Struts DataSource should not be used, I agree;
  the J2EE container DataSource should be used; but it will not be 
removed for a while AFIAK.

(Deprecated just means it might be removed in some futre version. Just 
like hopefully bean, logic and html:link get deprecated in 2.0 in favor 
of JSTL. It's just a nudge from developers (of which I am not one) for 
you to start considering the better alternatives. I even think Java 
should deprecate Connection , ResultSet and java.util.Date  in favor of 
DataSource, RowSet and Calendar)
Poolman is very, very nice... I used it before 2001; when I switched to 
RowSet (before I started using a SQL based DAO). DAO is best thing to do 
now, and all the DB issues would disapper.

.V


Edgar P Dollin wrote:
> Don't spend the time to get DataSource working.  It is deprecated and will
> be removed from struts in 1.2.  I use Poolman at sourceforge (I highly
> reccomend it for non-j2ee projects).  Most others use the DataSource
> supplied with the container.
> 
> Edgar
> 
> -----Original Message-----
> From: Caroline Jen [mailto:jiapei_jen@yahoo.com]
> Sent: Monday, December 08, 2003 4:29 PM
> To: Struts Users Mailing List
> Subject: Re: HELP: about to get datasource of struts and pass to logic
> beans...
> 
> 
> There are lots of classes involved.  I will give you
> an example:
> 
> 1. my LogonAction calls EditorService.java (business
> delegate)
> 2. EditorService.java calls MySQLEditorDAO.java (data
> access object implements EditorDAO.java, which is a
> data access interface)
> 3. the MySQLEditorDAO.java returns EditorBean.java (a
> Java bean with three properties)
> 
> Here is my LogonAction.java:
> 
> package org.apache.artimus.logon;
> 
> import java.io.IOException;
> import javax.servlet.ServletException;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpSession;
> import javax.servlet.http.HttpServletResponse;
> import org.apache.struts.action.Action;
> import org.apache.struts.action.ActionError;
> import org.apache.struts.action.ActionErrors;
> import org.apache.struts.action.ActionForm;
> import org.apache.struts.action.ActionForward;
> import org.apache.struts.action.ActionMapping;
> import org.apache.struts.action.ActionServlet;
> 
> import org.apache.artimus.lang.Tokens;
> 
> public final class LogonAction extends Action {
> 
>     public ActionForward execute(ActionMapping
> mapping,
>             ActionForm form,
>             HttpServletRequest request,
>             HttpServletResponse response)
>         throws java.lang.Exception {
>         
>         // Obtain username and password from web tier
>         String username = ((LogonForm)
> form).getUsername();
>         String password = ((LogonForm)
> form).getPassword();
>         
>         EditorService service = new EditorService();
>         EditorBean editor = service.findEditorData(
> username );
> 
>         HttpSession session = request.getSession();
>         session.setAttribute( "editor", editor );
> 
>         // Log this event, if appropriate
> 
>         if (servlet.getDebug() >= Tokens.DEBUG) {
>             StringBuffer message =
>                 new StringBuffer("LogonAction: User
> '");
>             message.append(username);
>             message.append("' logged on in session ");
>             message.append(session.getId());
>             servlet.log(message.toString());
>         }
> 
>         // Return success
>         return (mapping.findForward(Tokens.VALID));
> 
>     }
> 
> } // End LogonAction
> 
> Here is the EditorService.java:
> 
> package org.apache.artimus.logon;
> 
> import org.apache.artimus.logon.dao.*;
> 
> public class EditorService 
> {
>    EditorDAO ed = new MySQLEditorDAO();
>    public EditorBean findEditorData( String username )
>    {    
>       return ed.findEditor( username );
>    }
> }
> 
> Here is the EditorDAO.java:
> 
> package org.apache.artimus.logon.dao;
> 
> import org.apache.artimus.logon.EditorBean;
> import
> org.apache.artimus.logon.exceptions.EditorDAOSysException;
> 
> public interface EditorDAO.java
> {
>     public EditorBean findEditor( String username )
>         throws EditorDAOSysException;
> }
> 
> Here is the MySQLEditorDAO.java:
> 
> package org.apache.artimus.logon.dao;
> 
> import java.io.IOException;
> import java.sql.Connection;
> import java.sql.ResultSet;
> import java.sql.Statement;
> import java.sql.SQLException;
> 
> import org.apache.artimus.logon.EditorBean;
> import
> org.apache.artimus.logon.exceptions.EditorDAOSysException;
> import org.apache.artimus.ConnectionPool.DBConnection;
> 
> public class MySQLEditorDAO implements EditorDAO
> {
>    // Here the return type is EditorBean
>    public EditorBean findEditor( String username ) 
>        throws EditorDAOSysException 
>    {
>       Connection conn = null;
>       Statement stmt = null;
>       ResultSet rs = null;
> 
>       try 
>       {
>          conn = DBConnection.getDBConnection();
>          stmt = conn.createStatement();
>          String query = "SELECT user_role,
> journal_category FROM members WHERE user_name = '" +
> username + "'";   
>          rs = stmt.executeQuery( query );
>          if (rs.next()) 
>          {
>             return new EditorBean( username,
> rs.getString( "user_role" ), rs.getString(
> "journal_category" ) );
>          }
>          else
>          {
>             System.out.println( "invalid user name" );
>             return null;            
>          }
>       } 
>       catch (SQLException se)
>       {
>          throw new
> EditorDAOSysException("SQLException: " +
> se.getMessage());
>       }
>       finally
>       {
>          if ( conn != null )
>          {
>             try
>             {
>                rs.close();
>                rs = null;
>                stmt.close();
>                stmt = null;
>                conn.close();
>             }
>             catch( SQLException sqlEx )
>             {
>                System.out.println( "Problem occurs
> while closing " + sqlEx );
>             }
>             conn = null;
>          }       
>       }
>    }
> }
> 
> Here is the EditorBean.java:
> 
> package org.apache.artimus.logon;
> 
> import org.apache.artimus.logon.dao.*;
> 
> public class EditorBean {
> 
>    private String username;
>    private String userrole;
>    private String keyValue;
> 
>    static EditorDAO ed = new MySQLEditorDAO();
> 
>    public EditorBean() {}
>    public EditorBean( String username, String
> userrole, String keyValue )
>    {
>       setUsername( username );
>       setUserrole( userrole );
>       setKeyValue( keyValue );
>    }
>    public String getUsername() {
>       return username;
>    }
>    public void setUsername( String username ) {
>       this.username = username;
>    }
>    public String getUserrole() {
>       return userrole;
>    }
>    public void setUserrole( String userrole ) {
>       this.userrole = userrole;
>    }
>    public String getKeyValue() {
>       return keyValue;
>    }
>    public void setKeyValue( String keyValue ) {
>       this.keyValue = keyValue;
>    }
> }
> 
> Here is the DBConnection.java, which gets a connection
> object from a connection pool (you have to configure
> your server's connection pool):
> 
> package org.apache.artimus.ConnectionPool;
> 
> import java.sql.Connection;
> import java.sql.SQLException;
> import javax.naming.InitialContext;
> import javax.naming.NamingException;
> import javax.sql.DataSource;
> 
> public class DBConnection 
> {
>    public static Connection getDBConnection() throws
> SQLException
>    {
>       Connection conn = null;
> 
>       try
>       {
>          InitialContext ctx = new InitialContext();
>          DataSource ds = ( DataSource ) ctx.lookup(
> "java:comp/env/jdbc/MySQLDB" );
> 
>          try 
>          {
>             conn = ds.getConnection();
>          }
>          catch( SQLException e )
>          {  
>             System.out.println( "Open connection
> failure: " + e.getMessage() );
>          }
>       }
>       catch( NamingException nEx )
>       {
>          nEx.printStackTrace();
>       }
>       return conn;
>    }
> }
> 
> Here is the exception handling class:
> 
> package org.apache.artimus.logon.exceptions;
> 
> /**
>  * EditorDAOSysException is an exception that extends
> the standard
>  * RunTimeException Exception. This is thrown by the
> DAOs of the article
>  * component when there is some irrecoverable error
> (like SQLException)
>  */
> 
> public class EditorDAOSysException extends
> RuntimeException {
> 
>     /**
>      * Constructor
>      * @param str    a string that explains what the
> exception condition is
>      */
>     public EditorDAOSysException (String str) {
>         super(str);
>     } 
> 
>     /**
>      * Default constructor. Takes no arguments
>      */
>     public EditorDAOSysException () {
>         super();
>     }
> }
> 
> -Caroline
> --- Ricky <Ri...@hotmail.com> wrote:
> 
>>hi, there, 
>>
>>    with my project i had several queries about get
>>datasource in struts. i know how to get datasource
>>in struts, just as in myAction, use getDataSource
>>method and return DataSource object, and go on to
>>get connection .... 
>>
>>    i also know the logic beans between the
>>Controller and Module, so i create a logic bean ,i
>>don't know how to get datasourc of pass the
>>datasource, in some tutorial , i got a way to solve
>>this, create a method getDAO(HttpServletRequest
>>request) and pass the request to the method to get
>>DataSource, i was lost here, i dont' know what
>>should i return in getDAO, should i return a
>>DataSource object or others and in my logic bean i
>>can use the datasource and also get connection ,
>>statement and resultset object , there i have to
>>close it after i finish my process ....what do you
>>think of this i did ? in general, when i got a
>>DataSource, i will got a connection from datasource
>>and a PrepareStatement and also a ResultSet , when i
>>finished my process, i can close all object i opened
>>before in final method of try
>>...catch...experession.. now what should i do to
>>return a proper object in getDAO method and in logic
>>beans i can use the object to process logic
>>business...
>>
>>i appologized for this ... i hope you can give me
>>some suggestion or flow...... thanx!
>>
>>now here is my flow of struts framework to pass the
>>datasource to the logic beans...  i hope you can
>>reword if you have some good idea...of correct my
>>mistake... :)
>>
>>    myAction :
>>
>>    myAction extends Action() {
>>      public ActionForward execute(ActionMapping
>>mapping,
>>                               ActionForm form,
>>                               HttpServletRequest
>>request,
>>                               HttpServletResponse
>>response) {
>>        LogicBean bean = new LogicBean();
>>        Object objcet =
>>bean.doMethod(getDAO(request), other param)
>>      }
>>      
>>      public DataSource getDAO(HttpServletRequest
>>request) {
>>        DataSource ds = null;
>>        ds = getDataSource(request);
>>        return ds;
>>      }
>>    }
>>
>>    and in my logic bean :
>>
>>    class LogicBean {
>>      public Objct doMethod(DataSource ds, other
>>param) {
>>        try {
>>          Connection conn = ds.getConnection();
>>          PrepareStatment stmt =
>>conn.prepareStatment("SELECT .......");
>>          stmt.setInt(1,....);
>>          ResultSet rs = stmt.executeQuery();
>>          ....
>>          return Object.....;
>>        } catch (SQLException ex) {
>>          ex.printStactTrace();
>>        } final {
>>          try {
>>            rs.close();
>>            stmt.close();
>>            conn.close()
>>          } catch (Exception ex) {
>>            ex.printStactTrace();
>>          }
>>        }
>>        return null;
>>      }
>>    }
>>
>>    should i pass the DataSource to my logic beans?
>>otherwise what object should i pass....
>>
>>
>>
>>
>>
>>
> 
> ---------------------------------------------------------------------
> 
>>To unsubscribe, e-mail:
>>struts-user-unsubscribe@jakarta.apache.org
>>For additional commands, e-mail:
>>struts-user-help@jakarta.apache.org
>>
> 
> 
> 
> __________________________________
> Do you Yahoo!?
> New Yahoo! Photos - easier uploading and sharing.
> http://photos.yahoo.com/



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