You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Vic Cekvenich <ce...@basebeans.com> on 2003/12/09 00:33:51 UTC
Re: HELP: about to get datasource of struts and pass to logic bea
ns...
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