Subject: Re: Model Persistence Survey
From: Vic Cekvenich <[EMAIL PROTECTED]>
 ===
Easy enough to do delegates.

Keith Chew wrote:

> Hi
> 
> Just some thoughts. You could use the delegate pattern instead of
> inheritence. This will help decouple your FormBeans from your DaoBeans.
> 
> Keith
> 
> 
> 
> -----Original Message-----
> From: Struts Newsgroup [mailto:@[EMAIL PROTECTED]]
> Sent: Thursday, 24 January 2002 9:10 a.m.
> To: [EMAIL PROTECTED]
> Subject: Re: Model Persistence Survey
> 
> 
> Subject: Re: Model Persistence Survey
> From: Vic Cekvenich <[EMAIL PROTECTED]>
>  ===
> 
> 
> Here is a sample DAO Extended Form Bean code :
> 
> public class NameZoomFrm extends daoFormBean {
> 
> private String fstName;
> private String lstName;
> 
> 
> public String getFstName() {   //get it from _crs RowSet
>          CachedRowSet cr = getCrs();
>         try{   this.fstName = cr.getString("first_name");  } // try
>          catch (Exception e)   {System.out.println(e);} // catch
>          return (this.fstName);  }// get
> public String getLstName() {  //get it from _crs RowSet
>          CachedRowSet cr = getCrs();
>         try{  this.lstName = cr.getString("last_name");    } // try
>          catch (Exception e)   {System.out.println(e);} // catch
>          return (this.lstName);
>      }// get
>   public void setFstName(String aFstName) {   //get it from _crs RowSet
>         CachedRowSet cr = getCrs();
>         try{ cr.updateString("first_name",aFstName);
>         this.fstName = aFstName;
>         } // try
>         catch (Exception e)   {System.out.println(e);} // catch
>         setCrs(cr);
> } //setFst
> public void setLstName(String aLstName) {   //get it from _crs RowSet
>         CachedRowSet cr = getCrs();
>         try{ cr.updateString("last_name",aLstName);
>         this.lstName=aLstName;
>          } // try
>         catch (Exception e)   {System.out.println(e);} // catch
>         setCrs(cr);
> } //setFst
> 
> 
> public int retrieve(BigDecimal aBD) {
> try{
>      CachedRowSet cr = getCrs();
>      cr = new CachedRowSet(); // easier then resultset
>      // you must test this sql string manualy for a SQL IDE
>      cr.setCommand("select * from contact where id = ?");
>      // driver issues fix:
>      cr.setTableName("contact");
>       // to limit the number of rows coming back, we only need a page at
> a time
>       cr.setBigDecimal(1,aBD);
>        exec(cr);
> } // try
> catch (Exception e)
> { System.out.println(e);
>    e.printStackTrace();} // catch
> return 0;
> }// retrieve
> 
> public void blank()
> {  try { CachedRowSet cr = getCrs();
>      cr.updateNull("first_name");
>      cr.updateNull("last_name");
>      cr.updateNull("id");
>     }  catch (Exception e)   { procE(this,e);} // catch
> }// blank
> }//class
> 
> 
> Here is the DAO implementation ... using RowSet, but could use JDO, such
> as Castor.
> 
> import com.wintecinc.struts.action.ValidatorForm;
> public class daoFormBean extends ValidatorForm  {
> 
> 
>      private Connection con=null;
>      private Connection upCon=null;
>      private DataSource ds;
>      private CachedRowSet _crs;
>      private String sqlString;
>      private BigDecimal PK;
> 
> 
>      public Connection getCon() {return con;}
>      public CachedRowSet getCrs() {return this._crs;}
>      public void setCrs(CachedRowSet aCRS) {this._crs=aCRS;}
> 
> 
> 
>          public Hashtable getIterateMap() { //is there a better way?
> like use crs.getCollection?
>              CachedRowSet cr = getCrs();
>              int rc=cr.size();
>              Hashtable iterateMap = new Hashtable();
>              // count out the number of rows with dummy map
>              for (int i=1; i <= rc; i++) { iterateMap.put(new
> Integer(i),new Integer(i));}
>              return iterateMap;}
> 
> 
>              public BigDecimal getPK() {  //get it from _crs RowSet
>                  try{  this.PK = _crs.getBigDecimal("id");    } // try
>                  catch (Exception e)   {System.out.println(e);} // catch
>                  return (this.PK);
>              }// get
> 
>              public void dbCon() {  // connect to db
>                  try{  ds = PoolMan.findDataSource("jndiSample");
>                  //we should in production give it a password in code
> not in file pool.xml
>                  con=ds.getConnection();}
>                  catch (Exception e)  {
>                      debug(this, "We did not connect");
>                      procE(this,e);} // catch
>              }// con
> 
>              public void dbDisCon() {
>                  try{if (con!=null) con.close();
>                  ds=null;
>                  }
>                  catch (Exception e) {System.out.println(e);  }//catch
>              } //disCon
> 
>              public int getRowNext() {  // get the next row
>                  try{
>                      CachedRowSet cr = getCrs();
>                      cr.next();
>                  }
>                  catch (Exception e)  { debug(this,"what row");
>                  System.out.println(e);  e.printStackTrace();} // catch
>                  return 0; } // rowNext()
> 
>                  public long update(){
>                      try{
>                          // update should be using a different con pool
> to same db
>                          dbCon();
>                          _crs.updateRow();
>                          _crs.acceptChanges(getCon());
>                          dbDisCon();
>                      } catch (Exception e)  { procE(this,e);} // catch
>                      return 0; } // update() should return new PK
> 
>                      public void setDelete() { // mark this row deleted
>                          CachedRowSet cr = getCrs();
>                          try{
>                              cr.updateString("DEL_FLG","X");
>                              // send to DB
>                              update();
>                          } // try
>                          catch (Exception e)   {System.out.println(e);}
> // catch
>                      } //del
> 
>                      public void newRow()
>                      { try {
>                            debug(this," Insert begin");
>                            dbCon();
>                            BigDecimal tmp = new BigDecimal(1);
>                            retreive(tmp); // descemdat SQL Row signature
>                            CachedRowSet cr = getCrs();
>                            cr.moveToInsertRow();
>                            blank();
>                            debug(this," before InsertRow");
>                            cr.insertRow();
>                            cr.moveToCurrentRow();
>                            cr.next();
>                            debug(this," we HAVE set up an insert");
>                        } catch (Exception e)  {
>                            debug(this, "oh no new row, check driver");
>                            e.printStackTrace();
>                            procE(this,e);} // catch
>                      } // newRow()
> 
>                      public void blank() { } // stub
> 
>               public int retrieve(BigDecimal aBD) { System.out.println("should
> never be called"); return 0;} // stub
>                      // implement in descendent
> 
>                      public void setSqlString(String aSQL)
>                      { sqlString = aSQL;}
> 
>      public daoFormBean() { // cons
>          super();
>          try{
>              _crs = new CachedRowSet();
>          } // try
>          catch (Exception e)  {
>              System.out.println(e);
>              e.printStackTrace();}
>      } //cons
> 
>      public int exec(CachedRowSet pCR) {
>          int c=0;
>          try{
>              pCR.execute(getCon());
>              pCR.first();
>              c= pCR.size();
>              //debug(this,c+" rc "+pCR.getCommand());
>              setCrs(pCR);
>          }// try
>          catch (Exception e)   {procE(this,e);
>          } // catch
>          return c;
>      } // exec
> 
> 
> }//class
> 
> And to call above in perform:
> 
> public ActionForward perform( ActionMapping mapping, ActionForm form,
>                                 HttpServletRequest request,
> HttpServletResponse response)
>                                   throws IOException, ServletException
> {
> 
> NameZoomFrm frm  = (NameZoomFrm) form;
> if (frm == null) {frm = new NameZoomFrm();}
> String PK = request.getParameter("PK");
> String parameter = mapping.getParameter();
> 
> if (parameter == null) parameter ="X";
> 
> if (parameter.equals("del"))
>     {  BigDecimal pkBD = new BigDecimal (PK);
>        frm.setDelete();
>        return(mapping.findForward("searchNam"));
>      } else
> if (PK != null) { // do we have an argument PK passed? Display!
>      BigDecimal pkBD = new BigDecimal (PK);
>      frm.dbCon();
>      frm.retrieve(pkBD);
>      frm.dbDisCon();
>     } else
> if (parameter.equals("new"))
>     {
>         frm.newRow();
> 
>      }
> else { // Save
>      ActionErrors errors = frm.validate(mapping,request);
>      if (!errors.empty()) {
>      saveErrors(request, errors);
>      return (new ActionForward(mapping.getInput()));}
>      frm.update(); // save the cached row to DB
>      return(mapping.findForward("searchNam"));
> } // else
> 
> return(mapping.findForward("nameZoomPg"));
> // go to search pg.
> }// perform Act
> } // class
> 
> 
> 
> Ted Husted wrote:
> 
> 
>>If anyone has any brief code examples or other notes to share regarding
>>how they handle the interface between ActionForm beans and their model
>>beans, I'd be happy to compile something for the Users Guide.
>>
>>-- Ted Husted, Husted dot Com, Fairport NY USA.
>>-- Java Web Development with Struts.
>>-- Tel +1 585 737-3463.
>>-- Web http://www.husted.com/struts/
>>
>>--
>>To unsubscribe, e-mail:
>>
> <mailto:[EMAIL PROTECTED]>
> 
>>For additional commands, e-mail:
>>
> <mailto:[EMAIL PROTECTED]>
> 
> 
> 
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to