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