[cvs] expresso/expresso-web/expresso/doc/edg edg.html edg_asyncprocess.html edg_caching.html edg_components.html edg_configure.html edg_connectionpool.html edg_controllers.html edg_dbmaint.html edg_dbobject-types.html edg_dbobjects.html edg_deploy.html edg_developing.html edg_editedg.html edg_event.html edg_go01.html edg_healthcheck.html edg_index.html edg_internationalization.html edg_intro.html edg_ix01.html edg_jobcontrol.html edg_jsp.html edg_logging.html edg_overview.html edg_registration.html edg_reporting.html edg_security2.html edg_taglib.html edg_unittest.html edg_utility.html edg_workflow.html edg_xml.html edg.pdf

JCorporate Ltd jcorp at jcorp2.servlets.net
Sun May 9 17:04:32 PDT 2004


Update of /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/edg
In directory jcorp2.servlets.net:/tmp/cvs-serv15686

Modified Files:
	edg.html edg_asyncprocess.html edg_caching.html 
	edg_components.html edg_configure.html edg_connectionpool.html 
	edg_controllers.html edg_dbmaint.html edg_dbobject-types.html 
	edg_dbobjects.html edg_deploy.html edg_developing.html 
	edg_editedg.html edg_event.html edg_go01.html 
	edg_healthcheck.html edg_index.html 
	edg_internationalization.html edg_intro.html edg_ix01.html 
	edg_jobcontrol.html edg_jsp.html edg_logging.html 
	edg_overview.html edg_registration.html edg_reporting.html 
	edg_security2.html edg_taglib.html edg_unittest.html 
	edg_utility.html edg_workflow.html edg_xml.html edg.pdf 
Log Message:
current regeneration


Index: edg_connectionpool.html
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/edg/edg_connectionpool.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** edg_connectionpool.html	27 Apr 2004 07:26:18 -0000	1.3
--- edg_connectionpool.html	10 May 2004 00:04:27 -0000	1.4
***************
*** 1,3 ****
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter&nbsp;10.&nbsp;Database Connection Pooling</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.61.2" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_dbmaint.html" title="Chapter&nbsp;9.&nbsp;Database Maintenance"><link rel="next" href="edg_jsp.html" title="Chapter&nbsp;11.&nbsp;Developing The View in the MVC"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&nbsp;10.&nbsp;Database Connection Pooling</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_dbmaint.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_jsp.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="connectionpool"></a>Chapter&nbsp;10.&nbsp;Database Connection Pooling</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="edg_connectionpool.html#N114FC">Introduction</a></dt><dt><a href="edg_connectionpool.html#N11506">Why Is a Database Connection Pool Used?</a></dt><dt><a href="edg_connectionpool.html#N11511">EJB Server Connection Pools</a></dt><dt><a href="edg_connectionpool.html#N11516">Expresso Implementation</a></dt><dt><a href="edg_connectionpool.html#N1151D">Database and Application Server Independent</a></dt><dt><a href="edg_connectionpool.html#N11526">DB Pooling Management</a></dt><dt><a href="edg_connectionpool.html#N11531">Queued Connections</a></dt><dt><a href="edg_connectionpool.html#N11538">Database Connections</a></dt><dt><a href="edg_connectionpool.html#N1153F">Conclusion</a></dt><dd><dl><dt><a href="edg_connectionpool.html#N11542">Contributors</a></dt></dl></dd></dl></div><p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>If you find this EDG documentation helpful please consider
    <a href="edg_connectionpool.html#donate_connectionpool">DONATING</a>! to keep the doc alive
    and current.</p></div></p><p><div class="informaltable"><table width="100%" border="0"><colgroup><col align="left"><col align="right"></colgroup><tbody><tr><td align="left"><span class="bold"><b>Version:</b></span><span class="version">Expresso 5.5</span></td><td align="right"><span class="bold"><b>Maintainer:</b></span><a href="mailto:dlloyd at jgroup.net?Subject=EDG" target="_top"><span class="maintainer">David
--- 1,3 ----
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter&nbsp;14.&nbsp;Database Connection Pooling</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.62.4" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_dbmaint.html" title="Chapter&nbsp;13.&nbsp;Database Maintenance"><link rel="next" href="edg_jsp.html" title="Chapter&nbsp;15.&nbsp;Developing The View in the MVC"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&nbsp;14.&nbsp;Database Connection Pooling</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_dbmaint.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_jsp.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="connectionpool"></a>Chapter&nbsp;14.&nbsp;Database Connection Pooling</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="edg_connectionpool.html#N11955">Introduction</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N1195F">Why Is a Database Connection Pool Used?</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N1196A">EJB Server Connection Pools</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N1196F">Expresso Implementation</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N11976">Database and Application Server Independent</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N1197F">DB Pooling Management</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N1198A">Queued Connections</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N11991">Database Connections</a></span></dt><dt><span class="sect1"><a href="edg_connectionpool.html#N11998">Conclusion</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_connectionpool.html#N1199B">Contributors</a></span></dt></dl></dd></dl></div><p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>If you find this EDG documentation helpful please consider
    <a href="edg_connectionpool.html#donate_connectionpool">DONATING</a>! to keep the doc alive
    and current.</p></div></p><p><div class="informaltable"><table width="100%" border="0"><colgroup><col align="left"><col align="right"></colgroup><tbody><tr><td align="left"><span class="bold"><b>Version:</b></span><span class="version">Expresso 5.5</span></td><td align="right"><span class="bold"><b>Maintainer:</b></span><a href="mailto:dlloyd at jgroup.net?Subject=EDG" target="_top"><span class="maintainer">David
***************
*** 9,13 ****
    abstracting the connection process even further than the JDBC API. A
    sophisticated connection pool object provides access to one or more
!   databases in an efficient manner.</b></span></span></i><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N114FC"></a>Introduction</h2></div></div><div></div></div><p>Expresso offers a fully Java package for handling multiple
      concurrent database connections for handing out and returning database
      connections from a configurable pool of connections. This completely
--- 9,13 ----
    abstracting the connection process even further than the JDBC API. A
    sophisticated connection pool object provides access to one or more
!   databases in an efficient manner.</b></span></span></i><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11955"></a>Introduction</h2></div></div><div></div></div><p>Expresso offers a fully Java package for handling multiple
      concurrent database connections for handing out and returning database
      connections from a configurable pool of connections. This completely
***************
*** 24,28 ****
        fromservlets on a timely basis, maximum numbers of connections, and a
        few other things you may run into when you're scaling to support
!       larger groups of users. </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11506"></a>Why Is a Database Connection Pool Used?</h2></div></div><div></div></div><p>One of the advantages over CGI is that a Servlet can keep
      information between requests and share common resources. One common use of
      this feature is a database connection pool.</p><p>Connection pooling is a technique used to avoid the overhead of
--- 24,28 ----
        fromservlets on a timely basis, maximum numbers of connections, and a
        few other things you may run into when you're scaling to support
!       larger groups of users. </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1195F"></a>Why Is a Database Connection Pool Used?</h2></div></div><div></div></div><p>One of the advantages over CGI is that a Servlet can keep
      information between requests and share common resources. One common use of
      this feature is a database connection pool.</p><p>Connection pooling is a technique used to avoid the overhead of
***************
*** 40,44 ****
      connections open, and will open as many as it either needs or is allowed
      (e.g. you set a max) and hand them out to separate invocations of the same
!     servlet when many hits arrive at once. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11511"></a>EJB Server Connection Pools</h2></div></div><div></div></div><p>Jcorporate's connection pooling can work with the connection
      pooling provided by Enterprise JavaBean application servers, if the
      database objects that make up the system being implemented are created as
--- 40,44 ----
      connections open, and will open as many as it either needs or is allowed
      (e.g. you set a max) and hand them out to separate invocations of the same
!     servlet when many hits arrive at once. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1196A"></a>EJB Server Connection Pools</h2></div></div><div></div></div><p>Jcorporate's connection pooling can work with the connection
      pooling provided by Enterprise JavaBean application servers, if the
      database objects that make up the system being implemented are created as
***************
*** 46,50 ****
      pooling of connections for the entity EJB's, and the application
      framework's connection pool is used for all other database accesses,
!     ensuring the entire system maintains high performance. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11516"></a>Expresso Implementation</h2></div></div><div></div></div><p>With security handled at the application level with the Expresso
      Framework and other components, it is practical to use "connection
      pooling" e.g. holding a number of connections open even after they
--- 46,50 ----
      pooling of connections for the entity EJB's, and the application
      framework's connection pool is used for all other database accesses,
!     ensuring the entire system maintains high performance. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1196F"></a>Expresso Implementation</h2></div></div><div></div></div><p>With security handled at the application level with the Expresso
      Framework and other components, it is practical to use "connection
      pooling" e.g. holding a number of connections open even after they
***************
*** 57,61 ****
      particularly helpful for objects such as the configuration values, which
      might be read many times without being written or changed. These two
!     facilities ensure that the application framework scales up well. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1151D"></a>Database and Application Server Independent</h2></div></div><div></div></div><p>You are not tied to any one database or application server company
      which means you can make changes to the software being utilized on your
      server as needed.</p><p>Jcorporate connection pooling implements a sophisticated
--- 57,61 ----
      particularly helpful for objects such as the configuration values, which
      might be read many times without being written or changed. These two
!     facilities ensure that the application framework scales up well. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11976"></a>Database and Application Server Independent</h2></div></div><div></div></div><p>You are not tied to any one database or application server company
      which means you can make changes to the software being utilized on your
      server as needed.</p><p>Jcorporate connection pooling implements a sophisticated
***************
*** 65,69 ****
      number of popular database engines have been tested with the system - see
      the system requirements documentation for recommendations of database
!     engines to use with the system.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11526"></a>DB Pooling Management</h2></div></div><div></div></div><p>Database connections are expensive in terms of performance to make
      &amp; re-make, so rather than making and breaking connections as required,
      a "pool" of database connections is maintained by the system on
--- 65,69 ----
      number of popular database engines have been tested with the system - see
      the system requirements documentation for recommendations of database
!     engines to use with the system.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1197F"></a>DB Pooling Management</h2></div></div><div></div></div><p>Database connections are expensive in terms of performance to make
      &amp; re-make, so rather than making and breaking connections as required,
      a "pool" of database connections is maintained by the system on
***************
*** 84,88 ****
      access to the database. Individual users are typically granted no access
      to the database at all, eliminating any security issues that might arise
!     from allowing users access to the database directly (e.g. via ODBC).</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11531"></a>Queued Connections</h2></div></div><div></div></div><p>Connections can also be "queued" - if there is a specified
      maximum number of connections to the database (due to limitations on
      either the database itself or for performance reasons), then objects
--- 84,88 ----
      access to the database. Individual users are typically granted no access
      to the database at all, eliminating any security issues that might arise
!     from allowing users access to the database directly (e.g. via ODBC).</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1198A"></a>Queued Connections</h2></div></div><div></div></div><p>Connections can also be "queued" - if there is a specified
      maximum number of connections to the database (due to limitations on
      either the database itself or for performance reasons), then objects
***************
*** 93,97 ****
      interactive requests are waiting for connections.</p><p>Database object security means that maintaining multiple connections
      for multiple users is not required, further reducing the demands on the
!     system and improving overall performance.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11538"></a>Database Connections</h2></div></div><div></div></div><p>Most servlets in the system utilize a connection to one or more
      databases. These databases may be one of a number of different types, and
      are connected via the JDBC API and a suitable JDBC driver.</p><p>Each database context also has a database connection pool
--- 93,97 ----
      interactive requests are waiting for connections.</p><p>Database object security means that maintaining multiple connections
      for multiple users is not required, further reducing the demands on the
!     system and improving overall performance.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11991"></a>Database Connections</h2></div></div><div></div></div><p>Most servlets in the system utilize a connection to one or more
      databases. These databases may be one of a number of different types, and
      are connected via the JDBC API and a suitable JDBC driver.</p><p>Each database context also has a database connection pool
***************
*** 99,103 ****
      immediately, but the pool grows (to a maximum size specified in the Setup
      values) as objects request access to the database. The connection
!     information for the pool is stored in the expresso-config.xml file.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1153F"></a>Conclusion</h2></div></div><div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11542"></a>Contributors</h3></div></div><div></div></div><p> The following persons have
      contributed their time to this chapter: <div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p> Sandra Cann</p></li></ul></div> </p></div><p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p><a name="donate_connectionpool"></a> Was this EDG documentation
      helpful? Do you wish to express your appreciation for the time expended
--- 99,103 ----
      immediately, but the pool grows (to a maximum size specified in the Setup
      values) as objects request access to the database. The connection
!     information for the pool is stored in the expresso-config.xml file.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11998"></a>Conclusion</h2></div></div><div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1199B"></a>Contributors</h3></div></div><div></div></div><p> The following persons have
      contributed their time to this chapter: <div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p> Sandra Cann</p></li></ul></div> </p></div><p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p><a name="donate_connectionpool"></a> Was this EDG documentation
      helpful? Do you wish to express your appreciation for the time expended
***************
*** 111,113 ****
      Paypal account. Thank you in advance. </p><p> <a href="http://www.jcorporate.com/edgdoc.html" target="_top">
      <span class="inlinemediaobject"><img src="../images/edg/paypal.bmp"></span> </a> </p></div> Copyright &copy;
!     2001-2004 Jcorporate Ltd. All rights reserved.</p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="edg_dbmaint.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="edg_index.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="edg_jsp.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Chapter&nbsp;9.&nbsp;Database Maintenance&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="edg_index.html">Home</a></td><td valign="top" align="right" width="40%">&nbsp;Chapter&nbsp;11.&nbsp;Developing The View in the MVC</td></tr></table></div></body></html>
\ No newline at end of file
--- 111,113 ----
      Paypal account. Thank you in advance. </p><p> <a href="http://www.jcorporate.com/edgdoc.html" target="_top">
      <span class="inlinemediaobject"><img src="../images/edg/paypal.bmp"></span> </a> </p></div> Copyright &copy;
!     2001-2004 Jcorporate Ltd. All rights reserved.</p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="edg_dbmaint.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="edg_index.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="edg_jsp.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Chapter&nbsp;13.&nbsp;Database Maintenance&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="edg_index.html">Home</a></td><td valign="top" align="right" width="40%">&nbsp;Chapter&nbsp;15.&nbsp;Developing The View in the MVC</td></tr></table></div></body></html>
\ No newline at end of file

Index: edg_go01.html
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/edg/edg_go01.html,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -d -r1.32 -r1.33
*** edg_go01.html	27 Apr 2004 07:26:18 -0000	1.32
--- edg_go01.html	10 May 2004 00:04:27 -0000	1.33
***************
*** 1,3 ****
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Glossary</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.61.2" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_components.html" title="Appendix&nbsp;B.&nbsp;The Expresso Component Architecture [Future Direction]"><link rel="next" href="edg_ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Glossary</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_components.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_ix01.html">Next</a></td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="N131CB"></a>Glossary</h2></div></div><div></div></div><dl><dt>ASCII</dt><dd><p>(American Standard Code for Information Interchange) This standard character
  encoding scheme is used extensively in data transmission.</p></dd><dt>ANSI</dt><dd><p>(American National Standards Institute) This group is the U.S. member
  organization that belongs to the ISO, the International Organization for Standardization.
--- 1,3 ----
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Glossary</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.62.4" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_components.html" title="Appendix&nbsp;B.&nbsp;The Expresso Component Architecture [Future Direction]"><link rel="next" href="edg_ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Glossary</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_components.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_ix01.html">Next</a></td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="N136BF"></a>Glossary</h2></div></div><div></div></div><dl><dt>ASCII</dt><dd><p>(American Standard Code for Information Interchange) This standard character
  encoding scheme is used extensively in data transmission.</p></dd><dt>ANSI</dt><dd><p>(American National Standards Institute) This group is the U.S. member
  organization that belongs to the ISO, the International Organization for Standardization.

Index: edg_controllers.html
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/edg/edg_controllers.html,v
retrieving revision 1.31
retrieving revision 1.32
diff -C2 -d -r1.31 -r1.32
*** edg_controllers.html	27 Apr 2004 07:26:18 -0000	1.31
--- edg_controllers.html	10 May 2004 00:04:27 -0000	1.32
***************
*** 1,8 ****
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter&nbsp;8.&nbsp;Using Controller Objects</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.61.2" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_dbobject-types.html" title="Chapter&nbsp;7.&nbsp;Specific DataObject types."><link rel="next" href="edg_dbmaint.html" title="Chapter&nbsp;9.&nbsp;Database Maintenance"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&nbsp;8.&nbsp;Using Controller Objects</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_dbobject-types.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_dbmaint.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="controllers"></a>Chapter&nbsp;8.&nbsp;Using Controller Objects</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="edg_controllers.html#N10FF8">Introduction</a></dt><dt><a href="edg_controllers.html#N11001">MVC Architecture</a></dt><dt><a href="edg_controllers.html#N11016">Controllers Overview</a></dt><dd><dl><dt><a href="edg_controllers.html#N1101F">Why Use Controllers?</a></dt><dt><a href="edg_controllers.html#N11057">Pitfalls to Avoid in Using Controllers</a></dt><dt><a href="edg_controllers.html#N11087">UI-Independant</a></dt><dt><a href="edg_controllers.html#N110B0">Form-Handling</a></dt><dt><a href="edg_controllers.html#N110B5">Controllers
!   and EJBs</a></dt></dl></dd><dt><a href="edg_controllers.html#N110D9">Controller Basics</a></dt><dd><dl><dt><a href="edg_controllers.html#N110E4">Inputs</a></dt><dt><a href="edg_controllers.html#N110EB">Outputs</a></dt><dt><a href="edg_controllers.html#N110F2">Transitions</a></dt><dt><a href="edg_controllers.html#N110F7">Blocks</a></dt><dt><a href="edg_controllers.html#N1110D">Types of Controller</a></dt><dt><a href="edg_controllers.html#N11122">Controller
!   Objects Included with Expresso</a></dt><dt><a href="edg_controllers.html#N11181">Controller
!   Activity Explained</a></dt></dl></dd><dt><a href="edg_controllers.html#N1119F">States</a></dt><dd><dl><dt><a href="edg_controllers.html#N111AD">Internal
!   States</a></dt><dt><a href="edg_controllers.html#N111D3">External States</a></dt><dt><a href="edg_controllers.html#N111E8">Transitioning</a></dt></dl></dd><dt><a href="edg_controllers.html#N11202">Extending Controllers</a></dt><dd><dl><dt><a href="edg_controllers.html#N11209">Background information</a></dt><dt><a href="edg_controllers.html#N11210">Extending the User Interface</a></dt><dt><a href="edg_controllers.html#N1123E">Extending the
!   default controller behaviors.</a></dt></dl></dd><dt><a href="edg_controllers.html#N1124B">Workflow</a></dt><dt><a href="edg_controllers.html#N11264">Conclusion</a></dt><dd><dl><dt><a href="edg_controllers.html#N11267">Contributors</a></dt></dl></dd></dl></div><p>
  		<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
  If you find this EDG documentation helpful please consider <a href="edg_controllers.html#donate_controllers">DONATING</a>!
--- 1,8 ----
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter&nbsp;12.&nbsp;Using Controller Objects</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.62.4" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_dbobject-types.html" title="Chapter&nbsp;11.&nbsp;Specific DataObject types."><link rel="next" href="edg_dbmaint.html" title="Chapter&nbsp;13.&nbsp;Database Maintenance"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&nbsp;12.&nbsp;Using Controller Objects</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_dbobject-types.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_dbmaint.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="controllers"></a>Chapter&nbsp;12.&nbsp;Using Controller Objects</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="edg_controllers.html#N11451">Introduction</a></span></dt><dt><span class="sect1"><a href="edg_controllers.html#N1145A">MVC Architecture</a></span></dt><dt><span class="sect1"><a href="edg_controllers.html#N1146F">Controllers Overview</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_controllers.html#N11478">Why Use Controllers?</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N114B0">Pitfalls to Avoid in Using Controllers</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N114E0">UI-Independant</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11509">Form-Handling</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N1150E">Controllers
!   and EJBs</a></span></dt></dl></dd><dt><span class="sect1"><a href="edg_controllers.html#N11532">Controller Basics</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_controllers.html#N1153D">Inputs</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11544">Outputs</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N1154B">Transitions</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11550">Blocks</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11566">Types of Controller</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N1157B">Controller
!   Objects Included with Expresso</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N115DA">Controller
!   Activity Explained</a></span></dt></dl></dd><dt><span class="sect1"><a href="edg_controllers.html#N115F8">States</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_controllers.html#N11606">Internal
!   States</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N1162C">External States</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11641">Transitioning</a></span></dt></dl></dd><dt><span class="sect1"><a href="edg_controllers.html#N1165B">Extending Controllers</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_controllers.html#N11662">Background information</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11669">Extending the User Interface</a></span></dt><dt><span class="sect2"><a href="edg_controllers.html#N11697">Extending the
!   default controller behaviors.</a></span></dt></dl></dd><dt><span class="sect1"><a href="edg_controllers.html#N116A4">Workflow</a></span></dt><dt><span class="sect1"><a href="edg_controllers.html#N116BD">Conclusion</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_controllers.html#N116C0">Contributors</a></span></dt></dl></dd></dl></div><p>
  		<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
  If you find this EDG documentation helpful please consider <a href="edg_controllers.html#donate_controllers">DONATING</a>!
***************
*** 15,19 ****
  by providing a framework for a clean separation of data, presentation,
  and application logic. </b></span> </em></span>
! 	</span></i><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10FF8"></a>Introduction</h2></div></div><div></div></div><p>
  An Expresso Controller is a Struts Action subclass. (Contrary to what may
  be initial expectation, a "Controller" does not therefore extend the Struts
--- 15,19 ----
  by providing a framework for a clean separation of data, presentation,
  and application logic. </b></span> </em></span>
! 	</span></i><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11451"></a>Introduction</h2></div></div><div></div></div><p>
  An Expresso Controller is a Struts Action subclass. (Contrary to what may
  be initial expectation, a "Controller" does not therefore extend the Struts
***************
*** 41,45 ****
  to be used by a wider audience of users, where all states might be available
  to only certain users (say, system administrators).
! 		</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11001"></a>MVC Architecture</h2></div></div><div></div></div><p>
  Keeping the elements of Model (business tier), View (presentation and user
  interface) and Controller separated is a central issue of good application
--- 41,45 ----
  to be used by a wider audience of users, where all states might be available
  to only certain users (say, system administrators).
! 		</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1145A"></a>MVC Architecture</h2></div></div><div></div></div><p>
  Keeping the elements of Model (business tier), View (presentation and user
  interface) and Controller separated is a central issue of good application
***************
*** 69,73 ****
  		</p><p>
  Expresso includes a package of components for creating several types of
! <a href="edg_controllers.html" title="Chapter&nbsp;8.&nbsp;Using Controller Objects">"Controller" objects</a>. These Controller
  objects encapsulate a series of interactions with the user, in a manner
  similar to Session EJB's (in fact a Controller can be a Session EJB in
--- 69,73 ----
  		</p><p>
  Expresso includes a package of components for creating several types of
! <a href="edg_controllers.html" title="Chapter&nbsp;12.&nbsp;Using Controller Objects">"Controller" objects</a>. These Controller
  objects encapsulate a series of interactions with the user, in a manner
  similar to Session EJB's (in fact a Controller can be a Session EJB in
***************
*** 75,79 ****
  from any kind of client: a Servlet, a JSP, an Applet, or an Application.
  Controllers are covered in more detail in their own chapter in this guide.
! 		</p><a name="N11010" class="indexterm"></a></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11016"></a>Controllers Overview</h2></div></div><div></div></div><p>
  Controller objects provide a means for a sequence of interactions to be
  encapsulated in a way that makes them available to virtually any kind of
--- 75,79 ----
  from any kind of client: a Servlet, a JSP, an Applet, or an Application.
  Controllers are covered in more detail in their own chapter in this guide.
! 		</p><a name="N11469" class="indexterm"></a></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1146F"></a>Controllers Overview</h2></div></div><div></div></div><p>
  Controller objects provide a means for a sequence of interactions to be
  encapsulated in a way that makes them available to virtually any kind of
***************
*** 99,103 ****
  where all states might be available to only certain users (say, system
  administrators).
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1101F"></a>Why Use Controllers?</h3></div></div><div></div></div><p>
  Controllers provide a number of advantages:
  				<div class="itemizedlist"><ul type="disc"><li><p>
--- 99,103 ----
  where all states might be available to only certain users (say, system
  administrators).
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11478"></a>Why Use Controllers?</h3></div></div><div></div></div><p>
  Controllers provide a number of advantages:
  				<div class="itemizedlist"><ul type="disc"><li><p>
***************
*** 146,150 ****
  a JSP.
  						</p></li></ul></div>
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11057"></a>Pitfalls to Avoid in Using Controllers</h3></div></div><div></div></div><p>
  Controllers are generally run in a servlet context. This means that they
  remain resident in RAM, and multiple threads run through them. Controllers
--- 146,150 ----
  a JSP.
  						</p></li></ul></div>
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N114B0"></a>Pitfalls to Avoid in Using Controllers</h3></div></div><div></div></div><p>
  Controllers are generally run in a servlet context. This means that they
  remain resident in RAM, and multiple threads run through them. Controllers
***************
*** 184,188 ****
  failures, adapt the test to focus on the pages in question in order to
  reproduce the failure.
! 					</p></li></ul></div><a name="N11081" class="indexterm"></a></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11087"></a>UI-Independant</h3></div></div><div></div></div><p>
  The controller architecture is independant of the method used to present
  the outputs of the controller to the user - User Interfaces (UI) are available
--- 184,188 ----
  failures, adapt the test to focus on the pages in question in order to
  reproduce the failure.
! 					</p></li></ul></div><a name="N114DA" class="indexterm"></a></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N114E0"></a>UI-Independant</h3></div></div><div></div></div><p>
  The controller architecture is independant of the method used to present
  the outputs of the controller to the user - User Interfaces (UI) are available
***************
*** 205,214 ****
  appropriate XSL stylesheet into WML, PDF, HTML, XHTML, XML, and many other
  formats. This function is part of the Expresso XML sub-project.
! 					</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N110B0"></a>Form-Handling</h3></div></div><div></div></div><p>
  Special support facilities exist to make using Controller objects easier
  in a web forms-based environment, providing the ability to validate forms,
  especially against DB Objects, suppliing error handling and retry abilities,
  and provide the ability for the user to navigate between forms easily.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N110B5"></a>Controllers
    and EJBs</h3></div></div><div></div></div><p>
  DBObjects are not Enterprise Java Beans. However, if you have Expresso
--- 205,214 ----
  appropriate XSL stylesheet into WML, PDF, HTML, XHTML, XML, and many other
  formats. This function is part of the Expresso XML sub-project.
! 					</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11509"></a>Form-Handling</h3></div></div><div></div></div><p>
  Special support facilities exist to make using Controller objects easier
  in a web forms-based environment, providing the ability to validate forms,
  especially against DB Objects, suppliing error handling and retry abilities,
  and provide the ability for the user to navigate between forms easily.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1150E"></a>Controllers
    and EJBs</h3></div></div><div></div></div><p>
  DBObjects are not Enterprise Java Beans. However, if you have Expresso
***************
*** 251,255 ****
  2001) For more info look at TheServerSide.com for Chuck Cavaness' preview
  book chapter on ``EJB and Struts''.
! 			</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N110D9"></a>Controller Basics</h2></div></div><div></div></div><p>
  A Controller object can be thought of as a finite-state machine, transitioning
  from state to state and performing the appropriate business logic at each
--- 251,255 ----
  2001) For more info look at TheServerSide.com for Chuck Cavaness' preview
  book chapter on ``EJB and Struts''.
! 			</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11532"></a>Controller Basics</h2></div></div><div></div></div><p>
  A Controller object can be thought of as a finite-state machine, transitioning
  from state to state and performing the appropriate business logic at each
***************
*** 281,285 ****
  object. This object contains a group of ControllerElement objects, of 4
  types:
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N110E4"></a>Inputs</h3></div></div><div></div></div><p>
  An Input object is a request from the Controller for the client to supply
  some information. Some additional attributes of the Input object can provide
--- 281,285 ----
  object. This object contains a group of ControllerElement objects, of 4
  types:
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1153D"></a>Inputs</h3></div></div><div></div></div><p>
  An Input object is a request from the Controller for the client to supply
  some information. Some additional attributes of the Input object can provide
***************
*** 292,296 ****
  Normally, if a particular state of a Controller requests an input, the
  subsequent states will require it as a parameter.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N110EB"></a>Outputs</h3></div></div><div></div></div><p>
  An Output object represents a response from the Controller to be presented
  to the user. This can be as simple as a single String, or as complex as
--- 292,296 ----
  Normally, if a particular state of a Controller requests an input, the
  subsequent states will require it as a parameter.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11544"></a>Outputs</h3></div></div><div></div></div><p>
  An Output object represents a response from the Controller to be presented
  to the user. This can be as simple as a single String, or as complex as
***************
*** 305,314 ****
  for example, the "invoice" Output might have an attribute called "count",
  which might give the number of line items associated with this invoice.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N110F2"></a>Transitions</h3></div></div><div></div></div><p>
  A Transition object represents a choice for the client to transition to
  a new state - only states that are appropriate given the current state
  and allowed given the current user's permission have action items generated
  for them.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N110F7"></a>Blocks</h3></div></div><div></div></div><p>
  For easier use in JSP's (and other environments) where there are a lot
  of inputs, outputs and transitions, the concept of "blocks" is available
--- 305,314 ----
  for example, the "invoice" Output might have an attribute called "count",
  which might give the number of line items associated with this invoice.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1154B"></a>Transitions</h3></div></div><div></div></div><p>
  A Transition object represents a choice for the client to transition to
  a new state - only states that are appropriate given the current state
  and allowed given the current user's permission have action items generated
  for them.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11550"></a>Blocks</h3></div></div><div></div></div><p>
  For easier use in JSP's (and other environments) where there are a lot
  of inputs, outputs and transitions, the concept of "blocks" is available
***************
*** 398,402 ****
  mechanics of the HTML&nbsp;output generation is not shown here to keep the example
  simple and to the point. </em></span>
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1110D"></a>Types of Controller</h3></div></div><div></div></div><p>
  There are several types of controllers available, all extending the base
  class com.javacorporate.common.controller.Controller. They each have a
--- 398,402 ----
  mechanics of the HTML&nbsp;output generation is not shown here to keep the example
  simple and to the point. </em></span>
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11566"></a>Types of Controller</h3></div></div><div></div></div><p>
  There are several types of controllers available, all extending the base
  class com.javacorporate.common.controller.Controller. They each have a
***************
*** 431,441 ****
  controllers to be still accessible for Administrators (for example), but
  not for everyone in the Internet.
! 					</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11122"></a>Controller
    Objects Included with Expresso</h3></div></div><div></div></div><p>
  The following table lists some of the important Controller classes included
  with Expresso. All of them belong to the com.jcorporate.expresso.services.controller
  package.
! 			</p><div class="table"><a name="N11127"></a><p class="title"><b>Table&nbsp;8.1.&nbsp;Controller
!   Objects Included with Expresso</b></p><table summary="Controller
    Objects Included with Expresso" border="1"><colgroup><col><col></colgroup><tbody><tr><td><span class="bold"><b>Controller Class</b></span></td><td><span class="bold"><b>Description</b></span></td></tr><tr><td>CacheControl</td><td>Controls
    the CacheManager. Instead of controlling the CacheManager directly, this
--- 431,441 ----
  controllers to be still accessible for Administrators (for example), but
  not for everyone in the Internet.
! 					</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1157B"></a>Controller
    Objects Included with Expresso</h3></div></div><div></div></div><p>
  The following table lists some of the important Controller classes included
  with Expresso. All of them belong to the com.jcorporate.expresso.services.controller
  package.
! 			</p><div class="table"><a name="N11580"></a><p class="title"><b>Table&nbsp;12.1.&nbsp;Controller
!   Objects Included with Expresso</b></p><table summary="Controller
    Objects Included with Expresso" border="1"><colgroup><col><col></colgroup><tbody><tr><td><span class="bold"><b>Controller Class</b></span></td><td><span class="bold"><b>Description</b></span></td></tr><tr><td>CacheControl</td><td>Controls
    the CacheManager. Instead of controlling the CacheManager directly, this
***************
*** 466,470 ****
    connections, and server-task tasks.</td></tr><tr><td>ValidationController</td><td>Monitors
    and reacts to the user interaction of the URL being clicked from the
!   validation job.</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11181"></a>Controller
    Activity Explained</h3></div></div><div></div></div><p>
  
--- 466,470 ----
    connections, and server-task tasks.</td></tr><tr><td>ValidationController</td><td>Monitors
    and reacts to the user interaction of the URL being clicked from the
!   validation job.</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N115DA"></a>Controller
    Activity Explained</h3></div></div><div></div></div><p>
  
***************
*** 531,535 ****
  are completely concealed within the states themselves, and the client does
  not need to be aware of them.
! 			</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1119F"></a>States</h2></div></div><div></div></div><p>
  It is the states within a Controller that actually contain the logic for
  the controller to perform it's functions. These states can be coded simply
--- 531,535 ----
  are completely concealed within the states themselves, and the client does
  not need to be aware of them.
! 			</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N115F8"></a>States</h2></div></div><div></div></div><p>
  It is the states within a Controller that actually contain the logic for
  the controller to perform it's functions. These states can be coded simply
***************
*** 558,562 ****
  does not require
  				</p></div>
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N111AD"></a>Internal
    States</h3></div></div><div></div></div><p>
  If states are to be coded "internal" to the Controller class, then the
--- 558,562 ----
  does not require
  				</p></div>
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11606"></a>Internal
    States</h3></div></div><div></div></div><p>
  If states are to be coded "internal" to the Controller class, then the
***************
*** 601,605 ****
  automatically find your internal state function through the use of the
  Java Reflection API's.
! 			</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N111B9"></a>Servlet Container Specific Controllers [Expresso 5.3]</h4></div></div><div></div></div><p>
  
  Controllers are inherently made to be able to be run outside a servlet
--- 601,605 ----
  automatically find your internal state function through the use of the
  Java Reflection API's.
! 			</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11612"></a>Servlet Container Specific Controllers [Expresso 5.3]</h4></div></div><div></div></div><p>
  
  Controllers are inherently made to be able to be run outside a servlet
***************
*** 639,643 ****
  This feature is not yet available for External States as described below
  						</p></div>
! 				</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N111D3"></a>External States</h3></div></div><div></div></div><p>
  In a more complex controller, or one with more states, it is often better
  to create individual "State" objects, rather than the "internal states"
--- 639,643 ----
  This feature is not yet available for External States as described below
  						</p></div>
! 				</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1162C"></a>External States</h3></div></div><div></div></div><p>
  In a more complex controller, or one with more states, it is often better
  to create individual "State" objects, rather than the "internal states"
***************
*** 692,701 ****
  and of course it can also submit jobs, access other controllers, and generally
  perform whatever processing is required of it.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N111E8"></a>Transitioning</h3></div></div><div></div></div><p>
  Controller sometimes also need to transition from one state to another
  programmatically - in other words, not in response to a user clicking a
  button or selecting a link, but in response to logic within a state. This
  can be done in one of several ways:
! 			</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N111ED"></a>Transitioning in an internal state method</h4></div></div><div></div></div><p>
  From a state method within a controller it is very easy to transition to
  another state in the same Controller. Simply call: transition("newstate",
--- 692,701 ----
  and of course it can also submit jobs, access other controllers, and generally
  perform whatever processing is required of it.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11641"></a>Transitioning</h3></div></div><div></div></div><p>
  Controller sometimes also need to transition from one state to another
  programmatically - in other words, not in response to a user clicking a
  button or selecting a link, but in response to logic within a state. This
  can be done in one of several ways:
! 			</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11646"></a>Transitioning in an internal state method</h4></div></div><div></div></div><p>
  From a state method within a controller it is very easy to transition to
  another state in the same Controller. Simply call: transition("newstate",
***************
*** 705,714 ****
  to call "return" immediately after the transition, as you usually don't
  want to do any further processing in the current state.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N111F2"></a>Transitioning in an external State object</h4></div></div><div></div></div><p>
  In an external state object, the transition call is identical to the transition
  method from within a controller. Again, the first argument must be the
  name of another state within the same controller, and you should still
  call "return" immediately afterwards.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N111F7"></a>Transitioning to another Controller</h4></div></div><div></div></div><p>
  
  Transitioning into another state is done via the Transition object. You
--- 705,714 ----
  to call "return" immediately after the transition, as you usually don't
  want to do any further processing in the current state.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N1164B"></a>Transitioning in an external State object</h4></div></div><div></div></div><p>
  In an external state object, the transition call is identical to the transition
  method from within a controller. Again, the first argument must be the
  name of another state within the same controller, and you should still
  call "return" immediately afterwards.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11650"></a>Transitioning to another Controller</h4></div></div><div></div></div><p>
  
  Transitioning into another state is done via the Transition object. You
***************
*** 728,732 ****
  controller "SomeOtherController" and a specific state of that controller.
  Once the transition is called, we return from the state method.
! 				</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11202"></a>Extending Controllers</h2></div></div><div></div></div><p>
  Expresso has a very good framework to develop your web applications, however,
  there are many ways to extend it's boxed functionality to better suit your
--- 728,732 ----
  controller "SomeOtherController" and a specific state of that controller.
  Once the transition is called, we return from the state method.
! 				</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1165B"></a>Extending Controllers</h2></div></div><div></div></div><p>
  Expresso has a very good framework to develop your web applications, however,
  there are many ways to extend it's boxed functionality to better suit your
***************
*** 738,742 ****
  own needs. Specifically we'll talk about providing custom User Interfaces
  easily and how to change the default behavior of a controller.
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11209"></a>Background information</h3></div></div><div></div></div><p>
  As of Expresso 5.0, developers can easily derive their own controllers
  from existing controllers. The mechanics of this is a rewrite of the reflection
--- 738,742 ----
  own needs. Specifically we'll talk about providing custom User Interfaces
  easily and how to change the default behavior of a controller.
! 		</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11662"></a>Background information</h3></div></div><div></div></div><p>
  As of Expresso 5.0, developers can easily derive their own controllers
  from existing controllers. The mechanics of this is a rewrite of the reflection
***************
*** 750,754 ****
  Now, you have the ability to derive your own controller and ONLY override
  the states where you want to change the default behavior of the base controller.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11210"></a>Extending the User Interface</h3></div></div><div></div></div><p>
  One of the annoying aspects of dealing with frameworks like Expresso is
  the fact that normally to change the user interface, you'd have to change
--- 750,754 ----
  Now, you have the ability to derive your own controller and ONLY override
  the states where you want to change the default behavior of the base controller.
! 			</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11669"></a>Extending the User Interface</h3></div></div><div></div></div><p>
  One of the annoying aspects of dealing with frameworks like Expresso is
  the fact that normally to change the user interface, you'd have to change
***************
*** 761,765 ****
  The solution is to create your own controller, and then create your own
  JSP pages based upon this new controller
! 			</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11217"></a>Step 1 - Derive your own
    Controller Class</h4></div></div><div></div></div><p>
  
--- 761,765 ----
  The solution is to create your own controller, and then create your own
  JSP pages based upon this new controller
! 			</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11670"></a>Step 1 - Derive your own
    Controller Class</h4></div></div><div></div></div><p>
  
***************
*** 783,787 ****
  All state handlers use the base class, and since, for this example, we
  want the default behavior, we won't be changing anything there.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11220"></a>Step2 - Make your own struts-config file entries</h4></div></div><div></div></div><p>
  
  Now that you have your own controller, you must create your own configuration
--- 783,787 ----
  All state handlers use the base class, and since, for this example, we
  want the default behavior, we won't be changing anything there.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11679"></a>Step2 - Make your own struts-config file entries</h4></div></div><div></div></div><p>
  
  Now that you have your own controller, you must create your own configuration
***************
*** 832,836 ****
  to jsps that you have worked up with your own application's look and feel.
  And you haven't modified the default pages one iota!
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N1122B"></a>Step 3- Copy Message
    Resources [Pre Expresso 5.0.4 Only]</h4></div></div><div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
  Expresso 5.0.4 has a new mechanism for finding messages that makes this
--- 832,836 ----
  to jsps that you have worked up with your own application's look and feel.
  And you haven't modified the default pages one iota!
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11684"></a>Step 3- Copy Message
    Resources [Pre Expresso 5.0.4 Only]</h4></div></div><div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
  Expresso 5.0.4 has a new mechanism for finding messages that makes this
***************
*** 847,851 ****
  more on Messages) this portion can be tedious at best, and we are working
  on a better resolution for this.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N11233"></a>Step 4 - Login Controller Only</h4></div></div><div></div></div><p>
  There are various parts of Expresso that need to know where to send the
  login requests. So to accomplish this, we need to define a Class Handler
--- 847,851 ----
  more on Messages) this portion can be tedious at best, and we are working
  on a better resolution for this.
! 				</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="N1168C"></a>Step 4 - Login Controller Only</h4></div></div><div></div></div><p>
  There are various parts of Expresso that need to know where to send the
  login requests. So to accomplish this, we need to define a Class Handler
***************
*** 861,865 ****
    name="login"
    classHandler="com.jcorporate.myproject.controller.MyLoginController"/&gt;</pre>
! 				</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1123E"></a>Extending the
    default controller behaviors.</h3></div></div><div></div></div><p>
  
--- 861,865 ----
    name="login"
    classHandler="com.jcorporate.myproject.controller.MyLoginController"/&gt;</pre>
! 				</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11697"></a>Extending the
    default controller behaviors.</h3></div></div><div></div></div><p>
  
***************
*** 915,923 ****
  causing our controller's links to point to our own derived Registration
  Controller. Most other controllers will not need this done.
! 			</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1124B"></a>Workflow</h2></div></div><div></div></div><a name="N1124E" class="indexterm"></a><a name="N11254" class="indexterm"></a><p>
  Expresso supports chaining states together in a "wizard" or "process funnel",
  also known as workflow. See the <a href="http://www.jcorporate.com/econtent/Content.do?state=resource&resource=779" target="_top">
  <i class="citetitle">workflow description</i> at the JCorporate site. </a>.
! 		</p></div><p></p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N11264"></a>Conclusion</h2></div></div><div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N11267"></a>Contributors</h3></div></div><div></div></div><p>
  
  The following persons have contributed their time to this chapter:
--- 915,923 ----
  causing our controller's links to point to our own derived Registration
  Controller. Most other controllers will not need this done.
! 			</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N116A4"></a>Workflow</h2></div></div><div></div></div><a name="N116A7" class="indexterm"></a><a name="N116AD" class="indexterm"></a><p>
  Expresso supports chaining states together in a "wizard" or "process funnel",
  also known as workflow. See the <a href="http://www.jcorporate.com/econtent/Content.do?state=resource&resource=779" target="_top">
  <i class="citetitle">workflow description</i> at the JCorporate site. </a>.
! 		</p></div><p></p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N116BD"></a>Conclusion</h2></div></div><div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N116C0"></a>Contributors</h3></div></div><div></div></div><p>
  
  The following persons have contributed their time to this chapter:
***************
*** 944,946 ****
  		</p><p>
  Copyright &copy; 2001-2004 Jcorporate Ltd. All rights reserved.
! 		</p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="edg_dbobject-types.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="edg_index.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="edg_dbmaint.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Chapter&nbsp;7.&nbsp;Specific DataObject types.&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="edg_index.html">Home</a></td><td valign="top" align="right" width="40%">&nbsp;Chapter&nbsp;9.&nbsp;Database Maintenance</td></tr></table></div></body></html>
\ No newline at end of file
--- 944,946 ----
  		</p><p>
  Copyright &copy; 2001-2004 Jcorporate Ltd. All rights reserved.
! 		</p></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="edg_dbobject-types.html">Prev</a>&nbsp;</td><td align="center" width="20%"><a accesskey="u" href="edg_index.html">Up</a></td><td align="right" width="40%">&nbsp;<a accesskey="n" href="edg_dbmaint.html">Next</a></td></tr><tr><td valign="top" align="left" width="40%">Chapter&nbsp;11.&nbsp;Specific DataObject types.&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="edg_index.html">Home</a></td><td valign="top" align="right" width="40%">&nbsp;Chapter&nbsp;13.&nbsp;Database Maintenance</td></tr></table></div></body></html>
\ No newline at end of file

Index: edg_healthcheck.html
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/edg/edg_healthcheck.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** edg_healthcheck.html	27 Apr 2004 07:26:18 -0000	1.1
--- edg_healthcheck.html	10 May 2004 00:04:27 -0000	1.2
***************
*** 1,4 ****
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter&nbsp;21.&nbsp;Healthcheck Monitoring and Application Performance</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.61.2" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_unittest.html" title="Chapter&nbsp;20.&nbsp;Unit Testing"><link rel="next" href="edg_jobcontrol.html" title="Chapter&nbsp;22.&nbsp;Jobs Expresso"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&nbsp;21.&nbsp;Healthcheck Monitoring and Application Performance</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_unittest.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_jobcontrol.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="healthcheck"></a>Chapter&nbsp;21.&nbsp;Healthcheck Monitoring and Application Performance</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="edg_healthcheck.html#N1251E">Introduction</a></dt><dt><a href="edg_healthcheck.html#N12525">Healthcheck Monitors Web Components</a></dt><dt><a href="edg_healthcheck.html#N12547">Healthcheck Error Reporting</a></dt><dt><a href="edg_healthcheck.html#N1255A">Healthcheck Tests Performed</a></dt><dt><a href="edg_healthcheck.html#N12594">Optimizing Performance</a></dt><dd><dl><dt><a href="edg_healthcheck.html#N12599">Performance Hogs</a></dt><dt><a href="edg_healthcheck.html#N125DD">Cache
!   Tuning</a></dt></dl></dd><dt><a href="edg_healthcheck.html#N1260E">Database Optimization</a></dt><dt><a href="edg_healthcheck.html#N12615">Indexing</a></dt><dt><a href="edg_healthcheck.html#N1261B">Conclusion</a></dt><dd><dl><dt><a href="edg_healthcheck.html#N1261E">Contributors</a></dt></dl></dd></dl></div><p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> If you find this EDG documentation helpful please
    consider <a href="edg_healthcheck.html#donate_healthcheck">DONATING</a>! to keep the doc
    alive and current. </p></div></p><p><div class="informaltable"><table width="100%" border="0"><colgroup><col align="left"><col align="right"></colgroup><tbody><tr><td align="left"><span class="bold"><b>Version:</b></span><span class="version">Expresso 5.5</span></td><td align="right"><span class="bold"><b>Maintainer:</b></span><a href="mailto:dlloyd at jgroup.net?Subject=EDG" target="_top"><span class="maintainer">David
--- 1,4 ----
! <html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter&nbsp;25.&nbsp;Healthcheck Monitoring and Application Performance</title><link href="docbook.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.62.4" name="generator"><link rel="home" href="edg_index.html" title="Expresso Developer's Guide"><link rel="up" href="edg_index.html" title="Expresso Developer's Guide"><link rel="previous" href="edg_unittest.html" title="Chapter&nbsp;24.&nbsp;Unit Testing"><link rel="next" href="edg_jobcontrol.html" title="Chapter&nbsp;26.&nbsp;Jobs Expresso"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&nbsp;25.&nbsp;Healthcheck Monitoring and Application Performance</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="edg_unittest.html">Prev</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="edg_jobcontrol.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="healthcheck"></a>Chapter&nbsp;25.&nbsp;Healthcheck Monitoring and Application Performance</h2></div></div><div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="edg_healthcheck.html#N1299D">Introduction</a></span></dt><dt><span class="sect1"><a href="edg_healthcheck.html#N129A4">Healthcheck Monitors Web Components</a></span></dt><dt><span class="sect1"><a href="edg_healthcheck.html#N129C6">Healthcheck Error Reporting</a></span></dt><dt><span class="sect1"><a href="edg_healthcheck.html#N129D9">Healthcheck Tests Performed</a></span></dt><dt><span class="sect1"><a href="edg_healthcheck.html#N12A13">Optimizing Performance</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_healthcheck.html#N12A18">Performance Hogs</a></span></dt><dt><span class="sect2"><a href="edg_healthcheck.html#N12A5C">Cache
!   Tuning</a></span></dt></dl></dd><dt><span class="sect1"><a href="edg_healthcheck.html#N12A8D">Database Optimization</a></span></dt><dt><span class="sect1"><a href="edg_healthcheck.html#N12A94">Indexing</a></span></dt><dt><span class="sect1"><a href="edg_healthcheck.html#N12A9A">Conclusion</a></span></dt><dd><dl><dt><span class="sect2"><a href="edg_healthcheck.html#N12A9D">Contributors</a></span></dt></dl></dd></dl></div><p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> If you find this EDG documentation helpful please
    consider <a href="edg_healthcheck.html#donate_healthcheck">DONATING</a>! to keep the doc
    alive and current. </p></div></p><p><div class="informaltable"><table width="100%" border="0"><colgroup><col align="left"><col align="right"></colgroup><tbody><tr><td align="left"><span class="bold"><b>Version:</b></span><span class="version">Expresso 5.5</span></td><td align="right"><span class="bold"><b>Maintainer:</b></span><a href="mailto:dlloyd at jgroup.net?Subject=EDG" target="_top"><span class="maintainer">David
***************
*** 13,22 ****
    system and performance tests as means to monitor the various components of a
    web and/or intranet and to ensure that they remain up and operational at all
!   times. It is designed to be run by a system scheduler.</b></span></span></i><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1251E"></a>Introduction</h2></div></div><div></div></div><p>Expresso Health Check utility
    provides a means to monitor the various components of a web and/or intranet
    and to ensure that they remain up and operational at all times. It is
    designed to be run by a system scheduler (cron, ROBOT, NT Scheduler) at
    short intervals (e.g. once every 30 minutes).</p><p>This chapter also
!   covers the area of application performance.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12525"></a>Healthcheck Monitors Web Components</h2></div></div><div></div></div><p>Designed to
    be run on a timer on the server. It checks that:</p><div class="orderedlist"><ol type="1"><li><p>Web
    services are running </p></li><li><p>The database is up
--- 13,22 ----
    system and performance tests as means to monitor the various components of a
    web and/or intranet and to ensure that they remain up and operational at all
!   times. It is designed to be run by a system scheduler.</b></span></span></i><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1299D"></a>Introduction</h2></div></div><div></div></div><p>Expresso Health Check utility
    provides a means to monitor the various components of a web and/or intranet
    and to ensure that they remain up and operational at all times. It is
    designed to be run by a system scheduler (cron, ROBOT, NT Scheduler) at
    short intervals (e.g. once every 30 minutes).</p><p>This chapter also
!   covers the area of application performance.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N129A4"></a>Healthcheck Monitors Web Components</h2></div></div><div></div></div><p>Designed to
    be run on a timer on the server. It checks that:</p><div class="orderedlist"><ol type="1"><li><p>Web
    services are running </p></li><li><p>The database is up
***************
*** 29,33 ****
    may be defined which execute a specific URL and measure how long it takes to
    respond, as well as checking for a specific response. This helps ensure the
!   sytem is operating correctly. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12547"></a>Healthcheck Error Reporting</h2></div></div><div></div></div><p>All except the last
    item on the above list, give a warning message in email, the last one just
    gets a big warning on the console &amp; a message in the log. Health Check
--- 29,33 ----
    may be defined which execute a specific URL and measure how long it takes to
    respond, as well as checking for a specific response. This helps ensure the
!   sytem is operating correctly. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N129C6"></a>Healthcheck Error Reporting</h2></div></div><div></div></div><p>All except the last
    item on the above list, give a warning message in email, the last one just
    gets a big warning on the console &amp; a message in the log. Health Check
***************
*** 48,52 ****
    administrator is alerted even if not actually watching the page). This page
    can be left up on a console for a continuous monitoring of the overall
!   system health at all times.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1255A"></a>Healthcheck Tests Performed</h2></div></div><div></div></div><p>HealthCheck performs
    the following tests:</p><div class="itemizedlist"><ul type="disc"><li><p>Verifies that the
    control database is operational by connecting to it &amp; reading setup
--- 48,52 ----
    administrator is alerted even if not actually watching the page). This page
    can be left up on a console for a continuous monitoring of the overall
!   system health at all times.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N129D9"></a>Healthcheck Tests Performed</h2></div></div><div></div></div><p>HealthCheck performs
    the following tests:</p><div class="itemizedlist"><ul type="disc"><li><p>Verifies that the
    control database is operational by connecting to it &amp; reading setup
***************
*** 62,67 ****
    HealthCheck, select the "Operation" menu choice in Expresso's
    Admin menu. Scroll down to the heading, "Periodic System and Performance
!   Tests." There you will see a list of functions like the below: </p><div class="table"><a name="N12571"></a><p class="title"><b>Table&nbsp;21.1.&nbsp;Healthcheck
!   Functions</b></p><table summary="Healthcheck
    Functions" border="1"><colgroup><col><col></colgroup><tbody><tr><td>HealthCheck Function</td><td>Description
    </td></tr><tr><td>Run Performance Tests </td><td>&nbsp;</td></tr><tr><td>Run
--- 62,67 ----
    HealthCheck, select the "Operation" menu choice in Expresso's
    Admin menu. Scroll down to the heading, "Periodic System and Performance
!   Tests." There you will see a list of functions like the below: </p><div class="table"><a name="N129F0"></a><p class="title"><b>Table&nbsp;25.1.&nbsp;Healthcheck
!   Functions</b></p><table summary="Healthcheck
    Functions" border="1"><colgroup><col><col></colgroup><tbody><tr><td>HealthCheck Function</td><td>Description
    </td></tr><tr><td>Run Performance Tests </td><td>&nbsp;</td></tr><tr><td>Run
***************
*** 69,83 ****
    Definitions</td><td>&nbsp;</td></tr><tr><td>Performance Test Stats</td><td>&nbsp;</td></tr><tr><td>Performance
    Test Sets</td><td>&nbsp;</td></tr><tr><td>Performance Test Set
!   Details</td><td>&nbsp;</td></tr></tbody></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12594"></a>Optimizing Performance</h2></div></div><div></div></div><p> It is important to
    concentrate your efforts on the areas where the largest gain can be
    experienced - in order to do this, you must understand where the "hot
    spots" are in your application. Expresso can help you do this, and then
    help you perform more extensive analysis of those "hot spots" to
!   make sure they are running as quickly as possible. </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N12599"></a>Performance Hogs</h3></div></div><div></div></div><p> There are a number of things that can
    slow down an Expresso application. By checking this list carefully before
    beginning any more intensive performance tuning, you can verify that you are
    not "driving with the parking brake on" and can often solve
!   performance problems immediately. </p><a name="N1259E" class="indexterm"></a><p>Some of the
!   items to watch for are:</p><a name="N125A6" class="indexterm"></a><a name="N125AC" class="indexterm"></a><div class="itemizedlist"><ul type="disc"><li><p><span class="bold"><b>Logging:</b></span></p><p> Log4j, which is the integrated logging mechanism built into Expresso,
    is a very capable package, and it's performance impact is very small
    compared to many logging methods. Still, the fastest logging is no logging
--- 69,83 ----
    Definitions</td><td>&nbsp;</td></tr><tr><td>Performance Test Stats</td><td>&nbsp;</td></tr><tr><td>Performance
    Test Sets</td><td>&nbsp;</td></tr><tr><td>Performance Test Set
!   Details</td><td>&nbsp;</td></tr></tbody></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12A13"></a>Optimizing Performance</h2></div></div><div></div></div><p> It is important to
    concentrate your efforts on the areas where the largest gain can be
    experienced - in order to do this, you must understand where the "hot
    spots" are in your application. Expresso can help you do this, and then
    help you perform more extensive analysis of those "hot spots" to
!   make sure they are running as quickly as possible. </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N12A18"></a>Performance Hogs</h3></div></div><div></div></div><p> There are a number of things that can
    slow down an Expresso application. By checking this list carefully before
    beginning any more intensive performance tuning, you can verify that you are
    not "driving with the parking brake on" and can often solve
!   performance problems immediately. </p><a name="N12A1D" class="indexterm"></a><p>Some of the
!   items to watch for are:</p><a name="N12A25" class="indexterm"></a><a name="N12A2B" class="indexterm"></a><div class="itemizedlist"><ul type="disc"><li><p><span class="bold"><b>Logging:</b></span></p><p> Log4j, which is the integrated logging mechanism built into Expresso,
    is a very capable package, and it's performance impact is very small
    compared to many logging methods. Still, the fastest logging is no logging
***************
*** 131,136 ****
    is to review the log, looking for any unusual errors or warnings and
    tracking them back to their source. Often the culprit will be a bad Setup
!   value. </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N125DD"></a>Cache
!   Tuning</h3></div></div><div></div></div><a name="N125E0" class="indexterm"></a><p> Unless you have specifically turned off the option to do
    so, (see the properties file documentation) Expresso as it runs will collect
    information about the effectiveness of the DB Object caching system. This
--- 131,136 ----
    is to review the log, looking for any unusual errors or warnings and
    tracking them back to their source. Often the culprit will be a bad Setup
!   value. </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N12A5C"></a>Cache
!   Tuning</h3></div></div><div></div></div><a name="N12A5F" class="indexterm"></a><p> Unless you have specifically turned off the option to do
    so, (see the properties file documentation) Expresso as it runs will collect
    information about the effectiveness of the DB Object caching system. This
***************
*** 180,184 ****
    the "Database Object Page Limit" table, you can make best use of
    your available memory via db object caching. This is often the single most
!   important optimization step you can take. </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1260E"></a>Database Optimization</h2></div></div><div></div></div><p> If all of the above
    optimization and performance tuning techniques indicate that there is a
    problem with database access slowing down the system (despite tuning the db
--- 180,184 ----
    the "Database Object Page Limit" table, you can make best use of
    your available memory via db object caching. This is often the single most
!   important optimization step you can take. </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12A8D"></a>Database Optimization</h2></div></div><div></div></div><p> If all of the above
    optimization and performance tuning techniques indicate that there is a
    problem with database access slowing down the system (despite tuning the db
***************
*** 191,197 ****
    it's elapsed time recorded, and you can use this information to pick out
    the worst offenders and either modify your application to perform better
!   queries, or use database indices to make them faster. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12615"></a>Indexing</h2></div></div><div></div></div><p> See the section on DBobjects for
    information about setting up Indexes for faster access on non-primary-key
!   fields. </p></div><p></p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N1261B"></a>Conclusion</h2></div></div><div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N1261E"></a>Contributors</h3></div></div><div></div></div><p> The following persons have contributed their time to this chapter:
    <div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p> Larry Hamel <a href="edg_intro.html#jgroup" title="Jcorporate's JGroup Services">(JGroup Expert)</a> </p></li><li style="list-style-type: disc"><p>Mike Nash</p></li><li style="list-style-type: disc"><p>Mike Rimov</p></li><li style="list-style-type: disc"><p> Mike Traum <a href="edg_intro.html#jgroup" title="Jcorporate's JGroup Services">(JGroup
    Expert)</a> </p></li><li style="list-style-type: disc"><p>Sandra Cann</p></li></ul></div> </p></div><p> <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p><a name="donate_healthcheck"></a>
--- 191,197 ----
    it's elapsed time recorded, and you can use this information to pick out
    the worst offenders and either modify your application to perform better
!   queries, or use database indices to make them faster. </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12A94"></a>Indexing</h2></div></div><div></div></div><p> See the section on DBobjects for
    information about setting up Indexes for faster access on non-primary-key
!   fields. </p></div><p></p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N12A9A"></a>Conclusion</h2></div></div><div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="N12A9D"></a>Contributors</h3></div></div><div></div></div><p> The following persons