Shawn,
Bingo, you got it (in reguards to how to use release())

Right about doStartTag and doEndTag.  Just make user you NEVER change a
property that is set through a tag attribute.  This is what causes most
people's problems.  Never use a property's set method.  Reserve this for
container use only. (And don't go sneaking around the set method and do
property=foo; either ;)

Session objects are pooled I think.  I don't think your objects are
pooled though.
--Angus

> -----Original Message-----
> From: Shawn Zernik [mailto:[EMAIL PROTECTED] 
> Sent: Friday, August 08, 2003 12:11 PM
> To: Tomcat Users List
> Subject: RE: Custom Tag Lib
> 
> 
> Mr. Mezick:
> 
> >From what I'm gathering, the release should not be 
> implimented to reset the
> data and classes used by a tag, but only for things like 
> closing files and
> db connections? Just to make sure I'm thinking about this 
> properly, the
> doStartTag should be treated like the constructor: make sure 
> my data is
> setup properly there. The doEndTag should be used for 
> "normal" completion
> without errors.
> 
> Does Tomcat impliment object pooling beyon the tags?  Are my 
> supporting
> classes for the tag pooled?
> 
> Thanks to all who have helped me.
> 
> Shawn
> 
> -----Original Message-----
> From: Angus Mezick [mailto:[EMAIL PROTECTED]
> Sent: Friday, August 08, 2003 8:06 AM
> To: Tomcat Users List
> Subject: RE: Custom Tag Lib
> 
> 
> It would be best if you went a rewrote your tags not to 
> require release
> to be called.  That change will also bring you in-line with the jsp
> spec.  These links might help:
> http://www.onjava.com/lpt/a/1248
> http://www.onjava.com/lpt/a/1250
> http://jakarta.apache.org/taglibs/guidelines.html
> 
> > -----Original Message-----
> > From: Shawn Zernik [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, August 07, 2003 11:41 PM
> > To: Tomcat Users List; [EMAIL PROTECTED]
> > Subject: RE: Custom Tag Lib
> >
> >
> > Mike:
> >
> > Thanks sooooo very much...  I saw their is a config option in
> > the Jasper to
> > turn off tag pooling.  do you thing that would work too, of shouldI
> > impliment it in my source code.  I'm gonna take a look at it
> > right now.
> >
> > Shawn
> >
> > -----Original Message-----
> > From: Mike Cherichetti (Renegade Internet)
> > [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, August 07, 2003 10:28 PM
> > To: Tomcat Users List
> > Subject: RE: Custom Tag Lib
> >
> >
> > Shawn,
> >
> > I ran into this problem as well when switching from 4.0 to
> > 4.1.  I think it
> > has something to do with 4.1 pooling and re-using tag
> > objects.  What I did
> > in all of my doStartTag(), doAfterBody(), etc... methods was
> > manually call
> > release() to reset the data in the tags like so:
> >
> > public int doStartTag() throws JspException
> > {
> >   try
> >   {
> >     ...
> >   }
> >
> >   catch (Exception exception)
> >   {
> >     throw new JspException(exception);
> >   }
> >
> >   finally
> >   {
> >     release();
> >   }
> >
> >   return SKIP_BODY;
> > }
> >
> > Have a nice day ...
> >
> > Sincerely,
> >
> > Mike Cherichetti
> > Renegade Internet
> > Internet Advertising Delivery Solutions
> > www.renegadeinternet.com
> > Phone (724) 658-6346
> > Fax (724) 658-6346
> >
> >
> > -----Original Message-----
> > From: Shawn Zernik [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, August 07, 2003 10:56 PM
> > To: [EMAIL PROTECTED]
> > Subject: Custom Tag Lib
> >
> >
> > Tomcat Users:
> >
> > I've been fighting with some version differences in tom cat
> > wondering why my
> > app acts severly different on Tomcat 4.1.27 then 4.0.6.  It
> > appears that
> > 4.1.27 is not working from my perspective, and have been
> > fighting with it
> > since monday.  None of the books I have touch this subject or
> > ellude to the
> > problem, and I've seached high and low for solutions.
> >
> > I'm having a problem working with my custom tag library.  The
> > stange part to
> > this is it appears to work on tomcat 4.0.6 but not on 4.1.27.
> >  The library
> > has a tage called site that extends a base tag, and those
> > tags use other
> > classes in my data namespace to hit a database.
> >
> > The tags are returning the proper data in both versions, but
> > in 4.1.27, I
> > have to "reload" the contect in the manager for it to
> > "register" the changes
> > from the database.  I have added some printlns to std out to
> > track what's
> > going on.  In tomcat 4.0.6 they are going through all the
> > code as I would
> > exspect it to.  I have included each of the class files that
> > are called.  I
> > have also included the printouts from both versions of tomcat
> > to clierify
> > how each version is handling the calls.
> >
> > The object hiarchey goes as follows:
> >
> > jPublish.Tags site extends inc_tag.
> > jPublish.Data.site_manager extends jPublish.Data.manager,
> > managers contain,
> > load, and fill datas.
> > jPublish.Data.site_data extends jPublish.Data.data, used for
> > storing data
> > and tracking updates.
> >
> >
> > --- INDEX.JSP ---
> > <%@ page contentType="text/html" %>
> > <%@ taglib prefix="inc" uri="inc" %>
> > <inc:site site="1" action="none"/>
> > <html>
> >     <head><title><inc:site action="title" /></title></head>
> >
> >     <body>
> >             <h1>Welcome to <inc:site action="title"/>!</h1>
> >             &copy; <inc:site action="copyright"/>
> >     </body>
> > </html>
> >
> > --- TOMCAT 4.0.6 STDOUT ---
> > Starting service Tomcat-Standalone
> > Apache Tomcat/4.0.6
> > Starting service Tomcat-Apache
> > Apache Tomcat/4.0.6
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.setSite()
> > jPublish.Data.manager()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > Shawn
> > jPublish.Tags.site.doEndTag(): End
> >
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.setSite()
> > jPublish.Data.manager()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > INC
> > jPublish.Tags.site.doEndTag(): End
> >
> > --- TOMCAT 4.1.27 STDOUT: db INC then Shawn ---
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.setSite()
> > jPublish.Data.manager()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Data.manager()
> > jPublish.Tags.site()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.inc_tag.loaded(): not instance
> > jPublish.Data.manager.load()
> > jPublish.Tags.inc_tag.loaded(): load ok
> > jPublish.Tags.inc_tag.loaded(): next ok
> > jPublish.Tags.inc_tag.loaded(): reached fill.
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.site.loaded()
> > INC
> > jPublish.Tags.site.doEndTag(): End
> >
> > <Change INC to Shawn in DB>
> > jPublish.Tags.site.setSite()
> > jPublish.Data.manager()
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.site.loaded()
> > Internetwork Consulting
> > jPublish.Tags.site.doEndTag(): End
> > jPublish.Tags.site.doEndTag(): Begin
> > jPublish.Tags.inc_tag.loaded()
> > jPublish.Tags.site.loaded()
> > INC
> > jPublish.Tags.site.doEndTag(): End
> >
> > --- SITE TAG "inc:site" ---
> > package jPublish.Tags;
> >
> > import jPublish.Data.*;
> >
> > public class site extends inc_tag {
> >     private site_data objSite;
> >
> >     // Constructors
> > ////////////////////////////////////////////////////////////
> >     public site() {
> >             objManager = (manager) new site_manager();
> >             System.out.println("jPublish.Tags.site()");
> >     }
> >
> >     // Properties
> > //////////////////////////////////////////////////////////////
> >     public void setSite(String strNew) {
> >             System.out.println("jPublish.Tags.site.setSite()");
> >             objManager = (manager) new site_manager();
> >             objManager.setWhere("id = " + strNew);
> >     }
> >
> >     // Methods
> > /////////////////////////////////////////////////////////////////
> >     protected boolean loaded() {
> >             if(super.loaded()) {
> >                     objSite = (site_data) objData;
> >
> > System.out.println("jPublish.Tags.site.loaded()");
> >                     return true;
> >             } else
> >                     return false;
> >     }
> >
> >     public int doEndTag() {
> >
> > System.out.println("jPublish.Tags.site.doEndTag(): Begin");
> >
> >             if(strAction.equalsIgnoreCase("id"))
> >                     if(loaded())
> > print(Long.toString(objSite.getID()));
> >
> >             if(strAction.equalsIgnoreCase("design"))
> >                     if(loaded())
> > print(Long.toString(objSite.getDesign()));
> >
> >             if(strAction.equalsIgnoreCase("title"))
> >                     if(loaded()) print(objSite.getTitle());
> >
> >             if(strAction.equalsIgnoreCase("webmaster"))
> >                     if(loaded()) print(objSite.getWebmaster());
> >
> >             if(strAction.equalsIgnoreCase("email"))
> >                     if(loaded()) print(objSite.getEmail());
> >
> >             if(strAction.equalsIgnoreCase("copyright"))
> >                     if(loaded()) print(objSite.getCopyright());
> >
> >             if(strAction.equalsIgnoreCase("logo"))
> >                     if(loaded()) print(objSite.getLogo());
> >
> >             if(strAction.equalsIgnoreCase("next"))
> >                     if(objManager.next()) return
> > this.EVAL_BODY_AGAIN;
> >
> >
> > System.out.println("jPublish.Tags.site.doEndTag(): End");
> >
> >             return this.SKIP_BODY;
> >     }
> > }
> >
> > --- INC_TAG ---
> > package jPublish.Tags;
> >
> > import jPublish.Data.*;
> > import javax.servlet.*;
> > import javax.servlet.jsp.*;
> > import javax.servlet.jsp.tagext.*;
> >
> > public abstract class inc_tag extends TagSupport {
> >     // Data Menebers
> > ///////////////////////////////////////////////////////////
> >     protected manager objManager;
> >     protected data objData;
> >     protected String strWhere;
> >
> >     // Action Data
> >     protected String strAction = "none";
> >     private String strOutput = "none";
> >
> >     // Properties
> > //////////////////////////////////////////////////////////////
> >     public void setAction(String strNew) { strAction = strNew; }
> >     public void setOutput(String strNew) { strOutput = strNew; }
> >     public manager getManager() { return objManager; }
> >
> >     // Internal Methods
> > ////////////////////////////////////////////////////////
> >     protected boolean loaded() {
> >             System.out.println("jPublish.Tags.inc_tag.loaded()");
> >             if(!(objData instanceof data)) {
> >
> > System.out.println("jPublish.Tags.inc_tag.loaded(): not instance");
> >                     if(objManager.load()) {
> >
> > System.out.println("jPublish.Tags.inc_tag.loaded(): load ok");
> >                             if(objManager.next()) {
> >
> > System.out.println("jPublish.Tags.inc_tag.loaded(): next ok");
> >                                     if(objManager.fill()) {
> >
> > System.out.println("jPublish.Tags.inc_tag.loaded(): reached fill.");
> >                                             objData =
> > objManager.getData();
> >                                             return true;
> >                                     } else
> >                                             return false;
> >                             }
> >                     } else
> >                             return false;
> >             }
> >
> >             // Data Exist: Loaded
> >             return true;
> >     }
> >
> >     protected void print(String strOut) {
> >             JspWriter out = pageContext.getOut();
> >
> >             System.out.println(strOut);
> >             try { out.print(format(strOut)); }
> >             catch (Exception e) {
> > System.out.println("Exception error: " + e); }
> >     }
> >
> >     protected String format(String strIn) {
> >             String strTemp = new String();
> >             char cTemp;
> >
> >             // String Safe
> >             if(strOutput.equalsIgnoreCase("stringsafe")) {
> >                     for(int iCnt = 0; iCnt <
> > strIn.length(); iCnt++) {
> >                             cTemp = strIn.charAt(iCnt);
> >                             switch(cTemp) {
> >                                     case '\'':
> >                                             strTemp += "\\\'";
> >                                             break;
> >                                     case '\"':
> >                                             strTemp += "\\\"";
> >                                             break;
> >                                     case '\\':
> >                                             strTemp += "\\\\";
> >                                             break;
> >                                     default:
> >                                             strTemp += cTemp;
> >                                             break;
> >                             }
> >                     }
> >                     return strTemp;
> >             }
> >
> >             // Strip String
> >             if(strOutput.equalsIgnoreCase("stringsafe")) {
> >                     for(int iCnt = 0; iCnt <
> > strIn.length(); iCnt++) {
> >                             cTemp = strIn.charAt(iCnt);
> >                             switch(cTemp) {
> >                                     case '\'':
> >                                             break;
> >                                     case '\"':
> >                                             break;
> >                                     default:
> >                                             strTemp += cTemp;
> >                                             break;
> >                             }
> >                     }
> >                     return strTemp;
> >             }
> >
> >             // HTML Safe
> >             if(strOutput.equalsIgnoreCase("htmlsafe")) {
> >                     for(int iCnt = 0; iCnt <
> > strIn.length(); iCnt++) {
> >                             cTemp = strIn.charAt(iCnt);
> >                             switch(cTemp) {
> >                                     case '<':
> >                                             strTemp += "&lt;";
> >                                             break;
> >                                     case '>':
> >                                             strTemp += "&gt;";
> >                                             break;
> >                                     default:
> >                                             strTemp += cTemp;
> >                                             break;
> >                             }
> >                     }
> >                     return strTemp;
> >             }
> >
> >             // None
> >             return strIn;
> >     }
> > }
> >
> > --- DATA.SITE_MANAGER ---
> > package jPublish.Data;
> >
> > public class site_manager extends manager {
> >     // Constructors
> > ////////////////////////////////////////////////////////////
> >     public site_manager() {
> >             super();
> >             super.setTable("sites");
> >     }
> >
> >     // Methods
> > /////////////////////////////////////////////////////////////////
> >     public boolean fill() {
> >             site_data dataNew = new site_data();
> >
> >             try {
> >                     dataNew.setID(sqlResults.getLong("id"));
> >                     dataNew.setDesign(sqlResults.getLong("design"));
> >                     dataNew.setTitle(sqlResults.getString("title"));
> >
> > dataNew.setWebmaster(sqlResults.getString("webmaster"));
> >                     dataNew.setEmail(sqlResults.getString("email"));
> >
> > dataNew.setCopyright(sqlResults.getString("copyright"));
> >                     dataNew.setLogo(sqlResults.getString("logo"));
> >
> >                     dataNew.setManager((manager) this);
> >                     dataNew.setLoaded();
> >                     objData = (data) dataNew;
> >                     return true;
> >             }
> >
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >             }
> >
> >             return false;
> >     }
> > }
> >
> > --- DATA.SITE_DATA ---
> > package jPublish.Data;
> >
> > public class site_data extends data {
> >     // Data Menebers
> > ///////////////////////////////////////////////////////////
> >     private long lDesign;
> >     private String strTitle;
> >     private String strWebmaster;
> >     private String strEmail;
> >     private String strCopyright;
> >     private String strLogo;
> >     // Child Relationships
> >     private section_manager objSections;
> >     // Parent Relationships
> >     private design_manager objDesigns;
> >
> >     // Constructors
> > ////////////////////////////////////////////////////////////
> >     public site_data() { super(); }
> >
> >     // Properties
> > //////////////////////////////////////////////////////////////
> >     public boolean setDesign(long lNew) {
> >             if(lNew > 0) {
> >                     lDesign = lNew;
> >                     objUpdates.set("design", Long.toString(lNew));
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public boolean setTitle(String strNew) {
> >             if(strNew.length() > 0) {
> >                     strTitle = strNew;
> >                     objUpdates.set("title", strNew);
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public boolean setWebmaster(String strNew) {
> >             if(strNew.length() > 0) {
> >                     strWebmaster = strNew;
> >                     objUpdates.set("webmaster", strNew);
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public boolean setEmail(String strNew) {
> >             if(strNew.length() > 0) {
> >                     strEmail = strNew;
> >                     objUpdates.set("email", strNew);
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public boolean setCopyright(String strNew) {
> >             if(strNew.length() > 0) {
> >                     strCopyright = strNew;
> >                     objUpdates.set("copyright", strNew);
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public boolean setLogo(String strNew) {
> >             if(strNew.length() > 0) {
> >                     strLogo = strNew;
> >                     objUpdates.set("logo", strNew);
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public long getDesign() { return lDesign; }
> >     public String getTitle() { return strTitle; }
> >     public String getWebmaster() { return strWebmaster; }
> >     public String getEmail() { return strEmail; }
> >     public String getCopyright() { return strCopyright; }
> >     public String getLogo() { return strLogo; }
> >
> >     // Child Relationships
> >     public section_manager getSections() {
> >             if(!(objSections instanceof section_manager)) {
> >                     objSections = new section_manager();
> >                     objSections.setWhere("site = " + this.getID());
> >                     objSections.load();
> >             }
> >             return objSections;
> >     }
> >
> >     // Parent Relationships
> >     public design_manager getParentDesign() {
> >             if(!(objDesigns instanceof design_manager)) {
> >                     objDesigns = new design_manager();
> >                     objDesigns.setWhere("site = " +
> > this.getDesign());
> >                     objDesigns.load();
> >             }
> >             return objDesigns;
> >     }
> > }
> >
> > --- DATA.MANAGER ---
> > package jPublish.Data;
> > import java.sql.*;
> >
> > public abstract class manager extends Object {
> >     // Data Members
> > ////////////////////////////////////////////////////////////
> >     protected data objData;
> >     protected String strError = new String();
> >
> >     // SQL Options
> >     private String strTable = new String();
> >     private String strWhere = new String();
> >
> >     // Data SQL Connection
> >     protected Connection sqlConnection;
> >     protected Statement sqlStatement;
> >     protected ResultSet sqlResults;
> >
> >     // Constructors
> > ////////////////////////////////////////////////////////////
> >     manager() {
> >             System.out.println("jPublish.Data.manager()");
> >
> >             try {
> >
> > Class.forName("com.mysql.jdbc.Driver").newInstance();
> >
> >                     sqlConnection = DriverManager.getConnection(
> >                     "jdbc:mysql://localhost/jPublish", "root", "");
> >                     sqlStatement = sqlConnection.createStatement(
> >                     ResultSet.TYPE_SCROLL_INSENSITIVE,
> > ResultSet.CONCUR_UPDATABLE);
> >             }
> >
> >             catch (Exception e) {
> >                     strError = "Execption error: " + e;
> >             }
> >     }
> >
> >     // Properties
> > //////////////////////////////////////////////////////////////
> >     public boolean setTable(String strNew) {
> >             if((strNew instanceof String) &&
> > (strNew.length() > 0)) {
> >                     strTable = strNew;
> >                     return true;
> >             } else
> >                     return false;
> >     }
> >
> >     public boolean setWhere(String strNew) {
> >             if((strNew instanceof String) &&
> > (strNew.length() > 0)) {
> >                     if(strWhere.length() > 0)
> >                             strWhere += " AND " + strNew;
> >                     else
> >                             strWhere = strNew;
> >
> >                     return true;
> >             } else
> >                     return false;
> >     }
> >
> >     public data getData() { return objData; }
> >     public String getError() { return strError; }
> >
> >     public String getTable() { return strTable; }
> >     public String getWhere() { return strWhere; }
> >     public int getCount() {
> >             int iCurr = -1;
> >             int iLast = -1;
> >
> >             try {
> >                     iCurr = sqlResults.getRow();
> >                     sqlResults.last();
> >                     iLast = sqlResults.getRow();
> >                     sqlResults.absolute(iCurr);
> >             }
> >             catch (Exception e) { strError = "Exception
> > Error: " + e; }
> >
> >             return iLast;
> >     }
> >
> >     // Methods
> > /////////////////////////////////////////////////////////////////
> >     public boolean load() {
> >             String strQuery = "";
> >
> >             System.out.println("jPublish.Data.manager.load()");
> >
> >             // Build the Query
> >             strQuery = strQuery + "SELECT * ";
> >             strQuery = strQuery + " FROM " + strTable;
> >             if(strWhere.length() > 0)
> >                     strQuery = strQuery + " WHERE " + strWhere;
> >
> >             // Get Results
> >             try {
> >                     sqlResults =
> > sqlStatement.executeQuery(strQuery);
> >             }
> >
> >             // Get Errors
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >
> >             return true;
> >     }
> >
> >     public boolean loadFrom(String strTable, String strColumn) {
> >             String strQuery = "";
> >
> >             // Build the Query
> >             strQuery = strQuery + "SELECT " + this.strTable + ".* ";
> >             strQuery = strQuery + " FROM " + strTable + ",
> > " + this.strTable;
> >             strQuery = strQuery + " WHERE " + strTable +
> > "." + strColumn;
> >             strQuery = strQuery + " = " + this.strTable + ".id;";
> >
> >             // Get Results
> >             try {
> >                     sqlResults =
> > sqlStatement.executeQuery(strQuery);
> >             }
> >
> >             // Get Errors
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >
> >             return true;
> >     }
> >
> >     public boolean next() {
> >             try { return sqlResults.next(); }
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >     }
> >
> >     public boolean save() {
> >             // Create Varibles
> >             updates objUpdates = objData.getUpdates();
> >             Object[] arrKeys = objUpdates.getKeys();
> >
> >             try {
> >                     // Update Record
> >                     for(int iCnt = 0; iCnt < arrKeys.length; iCnt++)
> >
> > sqlResults.updateString(arrKeys[iCnt].toString(),
> >
> > objUpdates.get(arrKeys[iCnt].toString()));
> >
> >                     // Write Changes
> >                     if(objData.getID() > 0)
> >                             sqlResults.updateRow();
> >                     else
> >                             sqlResults.insertRow();
> >             }
> >
> >             // Update Errors
> >             catch (Exception e) {
> >                     // Set Error
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >
> >             return true;
> >     }
> >     // Abstract Functions
> > //////////////////////////////////////////////////////
> >     // These must be implimented since the extended object
> > only know the
> > tables.
> >     public abstract boolean fill();
> > }
> >
> > --- DATA.MANAGER ---
> > package jPublish.Data;
> > import java.sql.*;
> >
> > public abstract class manager extends Object {
> >     // Data Members
> > ////////////////////////////////////////////////////////////
> >     protected data objData;
> >     protected String strError = new String();
> >
> >     // SQL Options
> >     private String strTable = new String();
> >     private String strWhere = new String();
> >
> >     // Data SQL Connection
> >     protected Connection sqlConnection;
> >     protected Statement sqlStatement;
> >     protected ResultSet sqlResults;
> >
> >     // Constructors
> > ////////////////////////////////////////////////////////////
> >     manager() {
> >             System.out.println("jPublish.Data.manager()");
> >
> >             try {
> >
> > Class.forName("com.mysql.jdbc.Driver").newInstance();
> >
> >                     sqlConnection = DriverManager.getConnection(
> >                     "jdbc:mysql://localhost/jPublish", "root", "");
> >                     sqlStatement = sqlConnection.createStatement(
> >                     ResultSet.TYPE_SCROLL_INSENSITIVE,
> > ResultSet.CONCUR_UPDATABLE);
> >             }
> >
> >             catch (Exception e) {
> >                     strError = "Execption error: " + e;
> >             }
> >     }
> >
> >     // Properties
> > //////////////////////////////////////////////////////////////
> >     public boolean setTable(String strNew) {
> >             if((strNew instanceof String) &&
> > (strNew.length() > 0)) {
> >                     strTable = strNew;
> >                     return true;
> >             } else
> >                     return false;
> >     }
> >
> >     public boolean setWhere(String strNew) {
> >             if((strNew instanceof String) &&
> > (strNew.length() > 0)) {
> >                     if(strWhere.length() > 0)
> >                             strWhere += " AND " + strNew;
> >                     else
> >                             strWhere = strNew;
> >
> >                     return true;
> >             } else
> >                     return false;
> >     }
> >
> >     public data getData() { return objData; }
> >     public String getError() { return strError; }
> >
> >     public String getTable() { return strTable; }
> >     public String getWhere() { return strWhere; }
> >     public int getCount() {
> >             int iCurr = -1;
> >             int iLast = -1;
> >
> >             try {
> >                     iCurr = sqlResults.getRow();
> >                     sqlResults.last();
> >                     iLast = sqlResults.getRow();
> >                     sqlResults.absolute(iCurr);
> >             }
> >             catch (Exception e) { strError = "Exception
> > Error: " + e; }
> >
> >             return iLast;
> >     }
> >
> >     // Methods
> > /////////////////////////////////////////////////////////////////
> >     public boolean load() {
> >             String strQuery = "";
> >
> >             System.out.println("jPublish.Data.manager.load()");
> >
> >             // Build the Query
> >             strQuery = strQuery + "SELECT * ";
> >             strQuery = strQuery + " FROM " + strTable;
> >             if(strWhere.length() > 0)
> >                     strQuery = strQuery + " WHERE " + strWhere;
> >
> >             // Get Results
> >             try {
> >                     sqlResults =
> > sqlStatement.executeQuery(strQuery);
> >             }
> >
> >             // Get Errors
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >
> >             return true;
> >     }
> >
> >     public boolean loadFrom(String strTable, String strColumn) {
> >             String strQuery = "";
> >
> >             // Build the Query
> >             strQuery = strQuery + "SELECT " + this.strTable + ".* ";
> >             strQuery = strQuery + " FROM " + strTable + ",
> > " + this.strTable;
> >             strQuery = strQuery + " WHERE " + strTable +
> > "." + strColumn;
> >             strQuery = strQuery + " = " + this.strTable + ".id;";
> >
> >             // Get Results
> >             try {
> >                     sqlResults =
> > sqlStatement.executeQuery(strQuery);
> >             }
> >
> >             // Get Errors
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >
> >             return true;
> >     }
> >
> >     public boolean next() {
> >             try { return sqlResults.next(); }
> >             catch (Exception e) {
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >     }
> >
> >     public boolean save() {
> >             // Create Varibles
> >             updates objUpdates = objData.getUpdates();
> >             Object[] arrKeys = objUpdates.getKeys();
> >
> >             try {
> >                     // Update Record
> >                     for(int iCnt = 0; iCnt < arrKeys.length; iCnt++)
> >
> > sqlResults.updateString(arrKeys[iCnt].toString(),
> >
> > objUpdates.get(arrKeys[iCnt].toString()));
> >
> >                     // Write Changes
> >                     if(objData.getID() > 0)
> >                             sqlResults.updateRow();
> >                     else
> >                             sqlResults.insertRow();
> >             }
> >
> >             // Update Errors
> >             catch (Exception e) {
> >                     // Set Error
> >                     strError = "Exception error: " + e;
> >                     return false;
> >             }
> >
> >             return true;
> >     }
> >     // Abstract Functions
> > //////////////////////////////////////////////////////
> >     // These must be implimented since the extended object
> > only know the
> > tables.
> >     public abstract boolean fill();
> > }
> >
> > --- DATA.DATA ---
> > package jPublish.Data;
> >
> > public abstract class data extends Object {
> >     // Data Menebers
> > ///////////////////////////////////////////////////////////
> >     protected manager objManager;
> >
> >     // Update Tracking
> >     protected updates objUpdates;
> >
> >     // Data
> >     protected long lID;
> >
> >     // Constructors
> > ////////////////////////////////////////////////////////////
> >     data () {
> >             objUpdates = new updates();
> >     }
> >
> >     // Properties
> > //////////////////////////////////////////////////////////////
> >     public boolean setManager(manager manNew) {
> >             if(manNew != null) {
> >                     objManager = manNew;
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public boolean setLoaded() { return objUpdates.setUpdated(); }
> >
> >     public manager getManager() { return objManager; }
> >     public updates getUpdates() { return objUpdates; }
> >
> >     // Data Properties
> >     public boolean setID(long lNew) {
> >             if(lNew > 0) {
> >                     lID = lNew;
> >                     objUpdates.set("id", Long.toString(lNew));
> >                     return true;
> >             }
> >
> >             return false;
> >     }
> >
> >     public long getID() { return lID; }
> > }
> >
> >
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> >
> >
> >
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

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

Reply via email to