From: <ps...@us...> - 2017-05-19 18:27:14
|
Revision: 285 http://sourceforge.net/p/vlibrary/code/285 Author: psteitz Date: 2017-05-19 18:27:12 +0000 (Fri, 19 May 2017) Log Message: ----------- Added link to issues page; updated tech overview. Modified Paths: -------------- branches/VLIBRARY_2_X/src/main/webapp/WEB-INF/classes/ApplicationResources.properties branches/VLIBRARY_2_X/src/main/webapp/a/menuContent.jsp branches/VLIBRARY_2_X/src/main/webapp/footer.jsp branches/VLIBRARY_2_X/src/main/webapp/techOverview.html branches/VLIBRARY_2_X/src/test/resources/ApplicationResources.properties Modified: branches/VLIBRARY_2_X/src/main/webapp/WEB-INF/classes/ApplicationResources.properties =================================================================== --- branches/VLIBRARY_2_X/src/main/webapp/WEB-INF/classes/ApplicationResources.properties 2017-05-19 18:26:09 UTC (rev 284) +++ branches/VLIBRARY_2_X/src/main/webapp/WEB-INF/classes/ApplicationResources.properties 2017-05-19 18:27:12 UTC (rev 285) @@ -16,7 +16,8 @@ index.forgotPassword=Forgot Your Password index.logoff=Logoff index.source=View/Download Source -index.contact=Questions? Comments? Feedback? +index.contact=Questions? Comments? +index.issues=Problems? Feature Requests? index.add.book=Add a Book how-it-works.title=How it works how-it-works.heading=How it works... Modified: branches/VLIBRARY_2_X/src/main/webapp/a/menuContent.jsp =================================================================== --- branches/VLIBRARY_2_X/src/main/webapp/a/menuContent.jsp 2017-05-19 18:26:09 UTC (rev 284) +++ branches/VLIBRARY_2_X/src/main/webapp/a/menuContent.jsp 2017-05-19 18:27:12 UTC (rev 285) @@ -20,7 +20,7 @@ <br> Click <A href="/vlibrary/a/how-it-works.jsp">here</A> for some instructions for use and explanation of how the Virtual Library works.<br> Click -<a href="http://sourceforge.net/tracker/?group_id=62087">here</a> to submit a bug +<a href="https://vlibrary.sourceforge.io/issues.html">here</a> to submit a bug report or feature request.<hr> <table border=0 cellpadding=10> </table> Modified: branches/VLIBRARY_2_X/src/main/webapp/footer.jsp =================================================================== --- branches/VLIBRARY_2_X/src/main/webapp/footer.jsp 2017-05-19 18:26:09 UTC (rev 284) +++ branches/VLIBRARY_2_X/src/main/webapp/footer.jsp 2017-05-19 18:27:12 UTC (rev 285) @@ -9,6 +9,7 @@ <br><a href=mailto:<bean:message key="email.support.address"/>> <bean:message key="index.contact"/></a> - + <br><a href="https://vlibrary.sourceforge.io/issues.html"> + <bean:message key="index.issues"/></a> </body> </html> \ No newline at end of file Modified: branches/VLIBRARY_2_X/src/main/webapp/techOverview.html =================================================================== --- branches/VLIBRARY_2_X/src/main/webapp/techOverview.html 2017-05-19 18:26:09 UTC (rev 284) +++ branches/VLIBRARY_2_X/src/main/webapp/techOverview.html 2017-05-19 18:27:12 UTC (rev 285) @@ -13,143 +13,175 @@ <TITLE>Virtual Library 2.0 Tech Overview</TITLE> </HEAD> <BODY bgcolor="#ffffff"> - <font face="arial,helvetica,sanserif"> - <H2>Virtual Library 2.0 Technical Overview</H2></font> - <TABLE><TR bgcolor="#9999FF"><TD> - <font color="#ffffff" face="arial,helvetica,sanserif"> - <a name="Basic Ingredients"><strong>Basic Ingredients</strong></a> - </font></TD></TR><TR><TD><BLOCKQUOTE><P> - <ul><li> - The Virtual Library (VL) is a <A HREF="http://struts.apache.org/index.html">Apache Struts/Tiles 1.3.5</A> - and <A HREF="http://www.springframework.org/">Spring Framework 2.0.2</A>, servlet-based application.</li> - <li> - The VL is set up to use a single SQL 92 / JDBC compliant database for both the - application and user store.</li> - <li> The application has been tested using Tomcat 5 (Java 5) through Tomcat 8 (Java 8). - </li> - <ul> <li>The VL uses Container-managed security, using a JDBC Realm.</li> - <li>The VL uses the mail session and JDBC connection pool resources - provided by Spring. The connection pool is Apache - Commons DBCP.</li></ul> - <li> - The VL uses log4j, version 1.2.6 for logging and Apache Commons BeanUtils, which requires - Commons Collections and Commons Logging. It also uses the Commons Lang package. - </li> - <li> - The VL 2.0 is built using Apache Maven. The project pom.xml is included with sources. - </li> - </ul></BLOCKQUOTE></TD></TR> + <font face="arial,helvetica,sanserif"> <H2>Virtual Library 2.0 Technical Overview</H2></font> + <TABLE> + <TR bgcolor="#9999FF"> + <TD> + <font color="#ffffff" face="arial,helvetica,sanserif"><a name="Basic Ingredients"><strong>Basic Ingredients</strong></a></font> + </TD> + </TR> + <TR> + <TD><BLOCKQUOTE><P> + <ul> + <li> + The Virtual Library (VL) is a <A HREF="http://struts.apache.org/index.html">Apache Struts/Tiles 1.3.5</A> + and <A HREF="http://www.springframework.org/">Spring Framework 2.0.2</A>, Java servlet-based application. + </li> + <li> + The VL is set up to use a single SQL 92 / JDBC compliant database for both the + application and user store. + </li> + <li> + The application has been tested using Tomcat 5 (Java 5) through Tomcat 8 (Java 8). + </li> + <li> + The VL uses Container-managed security, using a JDBC Realm. + </li> + <li>The VL uses the mail session and JDBC connection pool resources provided by Spring. The connection pool is Apache + Commons DBCP. + </li> + <li> + The VL uses log4j, version 1.2.6 for logging and Apache Commons BeanUtils, which requires + Commons Collections and Commons Logging. It also uses the Commons Lang package. + </li> + <li> + The VL 2.0 is built using Apache Maven. The project pom.xml is included with sources. + </li> + </ul></BLOCKQUOTE> + </TD> + </TR> + <TR bgcolor="#9999FF"> + <TD><font color="#ffffff" face="arial,helvetica,sanserif"> + <a name="Runtime Environment"><strong>Runtime Environment</strong></a> + </font> + </TD> + </TR> + <TR> + <TD> + <BLOCKQUOTE><P> + The application runs entirely within a serlvet 2.3 and newer container. There are no EJBs, RMI servers or other + components running outside of the servlet engine. The application will + work (and has been tested exclusively) running Tomcat as a standalone (i.e., + no external HTTP server). The database location is configured in the + Spring configuration file (lightweightcontainer.xml) and it can be either local or remote. + An outbound SMTP host is required. Like the + database, this is configured in Spring config file, can be either local or remote and + must accept SMTP connections from the host running VL. + </BLOCKQUOTE> + </TD> + </TR> + <TR bgcolor="#9999FF"> + <TD> + <font color="#ffffff" face="arial,helvetica,sanserif"> + <a name="Application Architecture"><strong>Application Architecture</strong></a> + </font> + </TD> + </TR> + <TR> + <TD> + <BLOCKQUOTE><P> + The VL is a struts 1 MVC application. Consult the following + references for background on + MVC and struts: + <UL> + <LI> + <A HREF="http://fitxers.oriolrius.cat/1797/web-tier5.html"> + Sun Blueprints -- Web Tier Application Framework Design</A></LI> + <LI> + <A HREF="http://www.jajakarta.org/struts/struts1.2/documentation/ja/target/userGuide/introduction.html"> + Struts 1 User's Guide</A> + </LI> + <li> + <a href="http://tool.oschina.net/uploads/apidocs/struts-1.3.10/index.html?overview-summary.html"> + Struts 1 JavaDocs</A> + </li> + </UL> + <b>Model Components</b><br> + The VL model is implemented in domain beans (Book, Reader, etc.), + a manager class (LibraryManager) and DAO classes. + The domain beans are operated upon (updated, inserted, retrieved, etc.) by DAO related + classes at the request of the LibraryManager. + Domain beans are instantiated by controller Actions, which use BeanUtils to synch their + properties with Form beans in the view. + <p> + The LibraryManager is a collection of methods supporting business functions such as processing book requests, + checkin, checkout, reader/book exists, etc, accessing the database through the DAO layer. + The LibraryManager is "injected" into the Action classes using Spring, with its member DAO instances + injected with properties set in the Spring configuration file, lightweightcontainer.xml. All + SQL used by the DAO classes is specified in this file. + <p> + <b>View Components</b><br> + The jsp's that form the view portion of the VL are limited to pure presentation. + There are <b>no</b> sriptlets in the VL jsp's! . There is also no javascript. + The VL jsp's make extensive use of struts tag libraries and all of the pages "inside" + the library are generated from a struts template (template.jsp). This template + divides the page into five logical components: + <ul> + <li>The page title</li> + <li>The page header - the title that appears on the page as rendered by the browser</li> + <li>sidebar -- the left-hand nav bar</li> + <li>the page content</li> + <li>the page footer -- hard coded in the template</li> + </ul> + A typical VL page has two jsp's associated with it -- one being the + "instantiated template" that references the components above -- + and the other being the content for the content portion of the page. + The name of the second page ends with "Content". For example, + "editReader.jsp" is the "instantiated template" for the edit + reader page and "editReaderContent.jsp" contains the content for the page. + See the struts docs for a full description of how templates work; + but just looking at the VL jsp's the structure should be obvious. + <p> + <b>Controller Components</b><br> + The Struts ActionServlet is the core controller component of any Struts 1 + application. The VL does not subclass the struts ActionServlet or extend + the core struts framework in any other way. The VL does include, however, + a base Action class, LibraryAction that extends + org.apache.struts.action.Action. The LibraryAction class overrides the + execute() method of the struts Action class, including generic logging, action + cancellation handling and dispatch to an abstract executeAction() method that + all concrete LibraryActions implement. This class also includes a + standardForward() method that forwards to the "error" target if errors have been + encountered in Action processing or to "success" if there are no errors. + All VL browser requests are for Actions configured in + /conf/struts-config.xml. Action URI's end in ".do" (this is configured in + web.xml and is what links struts-controlled URI's to the struts ActionServlet). + </BLOCKQUOTE> + </TD> + </TR> - <TR bgcolor="#9999FF"><TD> - <font color="#ffffff" face="arial,helvetica,sanserif"> - <a name="Runtime Environment"><strong>Runtime Environment</strong></a> - </font></TD></TR><TR><TD><BLOCKQUOTE><P> - The application runs entirely within a serlvet 2.3 and newer container. There are no EJBs, RMI servers or other - components running outside of the servlet engine. The application will - work (and has been tested exclusively) running Tomcat as a standalone (i.e., - no external HTTP server). The database location is configured in the - Spring configuration file (lightweightcontainer.xml) and it can be either local or remote. - An outbound SMTP host is required. Like the - database, this is configured in Spring config file, can be either local or remote and - must accept SMTP connections from the host running VL. - </BLOCKQUOTE></TD></TR> - - <TR bgcolor="#9999FF"><TD> - <font color="#ffffff" face="arial,helvetica,sanserif"> - <a name="Application Architecture"><strong>Application Architecture</strong></a> - </font></TD></TR><TR><TD><BLOCKQUOTE><P> - The VL is a struts 1 MVC application. Consult the following - references for background on - MVC and struts: - <UL><LI> - <A HREF="http://java.sun.com/blueprints/guidelines/ - designing_enterprise_applications_2e/web-tier/web-tier5.html">Sun Blueprints -- - Web Tier Application Framework Design</A></LI> - <LI><A HREF="http://struts.apache.org/index.html">Struts Home - Page</A></LI> - <LI><A HREF="http://struts.apache.org/1.x/userGuide/index.html">Struts - User's Guide</A></LI> - <li><a href="http://struts.apache.org/1.x/apidocs/index.html"> - Struts JavaDocs</A></li></UL> - <b>Model Components</b><br> - The VL model is implemented in domain beans (Book, Reader, etc.), - a POJO Facade class (LibraryManagerFacade) and DAO classes. - The domain beans are operated upon (updated, inserted, retrieved, etc.) by DAO related - classes at the request of the Facade. - These beans are instantiated by controller - Actions, which use BeanUtils to synch their properties with Form beans in the - view. <p> - The LibraryManagerFacadeImpl implementation (implements the LibraryManagerFacade interface) - is a collection of methods supporting business functions such as processing book requests, - checkin, checkout, reader/book exists, etc, accessing the database through the DAO layer. - The Facade is "injected" into the Action classes using Spring. - The DAO classes (all implementing interfaces) are also injected into the Facade through Spring, - therefore allowing for easy replacement with different implementations. <p> - <b>View Components</b><br> - The jsp's that form the view portion of the VL are limited to pure presentation. - There are <b>no</b> sriptlets in the VL jsp's! The VL jsp's make - extensive use of struts tag libraries and all of the pages "inside" the library - are generated from a struts template (template.jsp). This template - divides the page into five logical components: - <ul><li>The page title</li> - <li>The page header - the title that appears on the page as rendered by the - browser</li> - <li>sidebar -- the left-hand nav bar</li> - <li>the page content</li> - <li>the page footer -- hard coded in the template</li> - </ul> - A typical VL page has two jsp's associated with it -- one being the - "instantiated template" that references the components above -- - and the other being the content for the content portion of the page. - The name of the second page ends with "Content". For example, - "editReader.jsp" is the "instantiated template" for the edit - reader page and "editReaderContent.jsp" contains the content for the page. - See the struts docs for a full description of how templates work; - but just looking at the VL jsp's the structure should be obvious.<p> - <b>Controller Components</b><br> - The Struts ActionServlet is the core controller component of any Struts - application. The VL does not subclass the struts ActionServlet or extend - the core struts framework in any other way. The VL does include, however, - a base Action class, LibraryAction that extends - org.apache.struts.action.Action. The LibraryAction class overrides the - execute() method of the struts Action class, including generic logging, action - cancellation handling and dispatch to an abstract executeAction() method that - all concrete LibraryActions implement. This class also includes a - standardForward() method that forwards to the "error" target if errors have been - encountered in Action processing or to "success" if there are no errors. - All VL browser requests are for Actions configured in - /conf/struts-config.xml. Action URI's end in ".do" (this is configured in - web.xml and is what links struts-controlled URI's to the struts ActionServlet). - - - </BLOCKQUOTE></TD></TR> - - <TR bgcolor="#9999FF"><TD> - <font color="#ffffff" face="arial,helvetica,sanserif"> - <a name="Container Managed Security"><strong>Container Managed Security - Implementation</strong></a></font></TD></TR><TR><TD><BLOCKQUOTE><P> - The VL uses the servlet implementation of container managed security as - defined in the - <A HREF="http://www.jcp.org/aboutJava/communityprocess/final/jsr053/"> - Servlet 2.3 specification.</A> Refer to the spec and/or the - <A HREF="http://tomcat.apache.org/tomcat-8.5-doc/realm-howto.html"> - Tomcat Realm HOWTO</A> for details on how this implementation works.<p> - <b>Roles</b><br> - The VL uses a very simple set of role definitions. There are just two - roles: "reader" and "administrator". Readers can add books, search for - books, get status on books, request books and edit their own profile - information. Administrators can check books out and in and add/delete - both books and readers. They can also modify any reader's profile - information and reset reader passwords. - Finally, administrators can perform the most important - function of any administrator -- they can "promote" readers to become - administrators. (They can also "demote" which can result in a - "no administrator" state if they are not careful).<p> - <b>Authorization</b><br> - All URI's starting with /a/ or /r/ are protected by the container.   The - /a/* path is available to both readers and administrators. The /r/* URIs are - available to administrators only. This is specified - specified in security constraints in web.xml: <pre> + <TR bgcolor="#9999FF"> + <TD> + <font color="#ffffff" face="arial,helvetica,sanserif"> + <a name="Container Managed Security"><strong>Container Managed Security + Implementation</strong></a></font> + </TD> + </TR> + <TR> + <TD> + <BLOCKQUOTE><P> + The VL uses the servlet implementation of container managed security as + defined in the <A HREF="http://www.jcp.org/aboutJava/communityprocess/final/jsr053/"> + Servlet 2.3 specification.</A> Refer to the spec and/or the + <A HREF="http://tomcat.apache.org/tomcat-8.5-doc/realm-howto.html"> + Tomcat Realm HOWTO</A> for details on how this implementation works. + <p> + <b>Roles</b><br> + The VL uses a very simple set of role definitions. There are just two + roles: "reader" and "administrator". Readers can add books, search for + books, get status on books, request books and edit their own profile + information. Administrators can check books out and in and add/delete + both books and readers. They can also modify any reader's profile. Finally, + administrators can perform the most important + function of any administrator -- they can "promote" other readers to become + administrators. (They can also "demote" which can result in a + "no administrator" state if they are not careful). + <p> + <b>Authorization</b><br> + All URI's starting with /a/ or /r/ are protected by the container.   The + /a/* path is available to both readers and administrators. The /r/* URLs are + available to administrators only. This is specified + specified in security constraints in web.xml: <pre> <!-- Security Constraints --> <security-constraint> web-resource-collection> @@ -171,14 +203,14 @@ </auth-constraint> </security-constraint> </pre> - If a user requests a page such as "/library/a/listBook.do?selector=None", if s/he - is not logged in, the container will present the login page. On success, the - user will be redirected to the desired destination page. The only - "non-secure" pages in the VL are the login page, the reader registration pages - and their associated actions, and a "goodbye" page targeted on logoff. <p> - In some places, The VL uses selective rendering using the struts logic tags to - limit what what readers can do. For example, in - editReaderContent.jsp, we have: + If a user requests a page such as "/library/a/listBook.do?selector=None", if s/he + is not logged in, the container will present the login page. On success, the + user will be redirected to the desired destination page. The only + "non-secure" pages in the VL are the login page, the reader registration pages + and their associated actions, and a "goodbye" page targeted on logoff. <p> + In some places, The VL uses selective rendering using the struts logic tags to + limit what what readers can do. For example, in + editReaderContent.jsp, we have: <pre> <logic:present role="administrator"> <tr><th align="right"><bean:message key="reader.prompt.administrator"/></th> @@ -185,37 +217,45 @@ <td align="left"><html:checkbox property="administrator"/></td></tr> </logic:present> </pre> - If the user does not have the "administrator" role, the "administrator" checkbox - on the reader edit form will not appear. Administrators can use this - checkbox to "promote/demote" readers.<p> - It should be noted that limiting what users can do by selective rendering of html - elements is a very weak form of security. If the VL were processing - financial transactions or managing sensitive data, an additional layer of - authorization checking at the controller and/or model level would be required. - </BLOCKQUOTE></TD></TR> - - <TR bgcolor="#9999FF"><TD> - <font color="#ffffff" face="arial,helvetica,sanserif"> - <a name="Error Management"><strong>Error Management</strong></a> - </font></TD></TR><TR><TD><BLOCKQUOTE><P> - <b>Model components</b><br> - The class <b>LibraryException</b> extends <b>org.sourceforge.util.PortableException</b> - which is a generic Exception wrapper that enables stack traces to be fully serialized. - Model components should throw LibraryExceptions or instances of subclasses of this class. <p> - <b>Actions</b><br> - Actions catch Throwable in meaningful blocks within their executeAction() methods. - A list of LibraryExceptions wrapping the Throwables trapped during executeAction() - processing is accumulated in an errors ArrayList. If this ArrayList is not empty on - completion of the executeAction() method, it is placed in a "processingErrors" request - attribute and control is forwarded to the generic error page (content is in - hosedContent.jsp). See discussion above of standardForward(). - A customized top-level message to the user may also be placed in a request - attribute named "userMessage". Both of these request keys -- along - with all other parameter names, are defined in Constants.java and referred to in - the code by their symbolic names - (e.g. Constants.PROCESSINGERRORS = "processingErrors").<p> - <b>Generic Error Page</b><br> - Here is the core content of HosedContent.jsp:<br><pre> + If the user does not have the "administrator" role, the "administrator" checkbox + on the reader edit form will not appear. Administrators can use this + checkbox to "promote/demote" readers.<p> + It should be noted that limiting what users can do by selective rendering of html + elements is a very weak form of security. If the VL were processing + financial transactions or managing sensitive data, an additional layer of + authorization checking at the controller and/or model level would be required. + </BLOCKQUOTE> + </TD> + </TR> + <TR bgcolor="#9999FF"> + <TD> + <font color="#ffffff" face="arial,helvetica,sanserif"> + <a name="Error Management"><strong>Error Management</strong></a> + </font> + </TD> + </TR> + <TR> + <TD> + <BLOCKQUOTE><P> + <b>Model components</b><br> + The class <b>LibraryException</b> extends <b>org.sourceforge.util.PortableException</b> + which is a generic Exception wrapper that enables stack traces to be fully serialized. + Model components should throw LibraryExceptions or instances of subclasses of this class. <p> + <b>Actions</b><br> + Actions catch Throwable in meaningful blocks within their executeAction() methods. + A list of LibraryExceptions wrapping the Throwables trapped during executeAction() + processing is accumulated in an errors ArrayList. If this ArrayList is not empty on + completion of the executeAction() method, it is placed in a "processingErrors" request + attribute and control is forwarded to the generic error page (content is in + hosedContent.jsp). See discussion above of standardForward(). + A customized top-level message to the user may also be placed in a request + attribute named "userMessage". Both of these request keys -- along + with all other parameter names, are defined in Constants.java and referred to in + the code by their symbolic names + (e.g. Constants.PROCESSINGERRORS = "processingErrors"). + <p> + <b>Generic Error Page</b><br> + Here is the core content of HosedContent.jsp:<br><pre> <logic:present name="userMessage"> <h3> <bean:write name="userMessage"/> </h3> </logic:present> @@ -231,28 +271,34 @@ <strong><bean:write name="er" property="message"/> </strong> <br> </logic:iterate> </logic:present></pre><br> - If the "userMessage" request attribute has been set, the content of that message - is displayed first. Then, the generic message defined under the key - "hosed.message" in ApplicationResources.properties is displayed as a header for - the list of errors encountered during processing. This list of - messages is generated by iterating over the ArrayList stored in the - "processingErrors" request attribute. The elements of this list are - expected to be LibraryExceptions. <p> - The current setup of hosedContent.jsp will display stack traces to end users -- - generally not something that one should do in a production app.   This reflects - the beta state of the application. This page will be replaced when the vlibrary - application reaches "stable" state. - </BLOCKQUOTE></TD></TR> - - <TR bgcolor="#9999FF"><TD> - <font color="#ffffff" face="arial,helvetica,sanserif"> - <a name="Logging"><strong>Logging</strong></a> - </font></TD></TR><TR><TD><BLOCKQUOTE><P> - All vlibrary-specific logging uses log4j. The configuration file is - log4j.properties, located in the /conf directory of CVS and the source - distribution and deployed to /webapps/library/WEB-INF/classes. For an intro - to log4j, see the <A href="http://jakarta.apache.org/log4j/docs/index.html"> - log4j docs</a>. In log4j.properties ("production" example on a Unix/Linux system), we have: + If the "userMessage" request attribute has been set, the content of that message + is displayed first. Then, the generic message defined under the key + "hosed.message" in ApplicationResources.properties is displayed as a header for + the list of errors encountered during processing. This list of + messages is generated by iterating over the ArrayList stored in the + "processingErrors" request attribute. The elements of this list are + expected to be LibraryExceptions. <p> + The current setup of hosedContent.jsp will display stack traces to end users -- + generally not something that one should do in a production app.   This reflects + the beta state of the application. This page will be replaced when the vlibrary + application reaches "stable" state. + </BLOCKQUOTE> + </TD> + </TR> + <TR bgcolor="#9999FF"> + <TD> + <font color="#ffffff" face="arial,helvetica,sanserif"> + <a name="Logging"><strong>Logging</strong></a> + </font> + </TD> + </TR> + <TR> + <TD> + <BLOCKQUOTE><P> + All vlibrary-specific logging uses log4j. The configuration file is + log4j.properties, located in the /conf directory of CVS and the source + distribution and deployed to /webapps/library/WEB-INF/classes. + In log4j.properties ("production" example on a Unix/Linux system), we have: <pre> # Set root logging level to WARN to prevent Stuts/Tomcat from flooding log4j.rootLogger=WARN, R @@ -271,34 +317,33 @@ log4j.appender.R.layout.ConversionPattern=%d %p %c - %m%n </pre> - The root log level is set to WARN to prevent Struts and/or Tomcat from - generating DEBUG error messages, which the org.sourceforge.* classes are configured - to do. To get less verbose logging, set this to WARN or ERROR. <p> - - In this example, the application-specific log messages will go to - /var/logs/vlibrary2.0/libraryTran.log, which will roll over when it reaches 100KB. - See sources for a "development" example for this configuration file. - <p> - - - The standard logging pattern is to define a static logger for each class -- - e.g., <br> + The root log level is set to WARN to prevent Struts and/or Tomcat from + generating DEBUG error messages, which the org.sourceforge.* classes are configured + to do. To get less verbose logging, set this to WARN or ERROR. + <p> + In this example, the application-specific log messages will go to + /var/logs/vlibrary2.0/libraryTran.log, which will roll over when it reaches 100KB. + See sources for a "development" example for this configuration file. + <p> + The standard logging pattern is to define a static logger for each class -- + e.g., <br> <pre> /** log4j Logger */ private static Logger logger = Logger.getLogger(SaveReaderAction.class.getName()); </pre> - - and then to follow the vlibrary logging standards: - <ol><li>All log messages should be externalized -- i.e., use code like: - <pre>if (logger.isDebugEnabled()) - logger.debug(messages.getMessage("entering.perform"));</pre> - <li>Include if (logger.isDebugEnabled()), isInfoEnabled(), tests etc. as above - to avoid unecessary stack operations (see the log4j pages for explanation of - this best practice) - <li>log all exceptions (generally as ERROR) - <li>log all transactions as INFO, including ids for readers and books - </BLOCKQUOTE></TD></TR> - - </TABLE></BODY> + and then to follow the vlibrary logging standards: + <ol><li>All log messages should be externalized -- i.e., use code like: + <pre>if (logger.isDebugEnabled()) + logger.debug(messages.getMessage("entering.perform"));</pre></li> + <li>Include if (logger.isDebugEnabled()), isInfoEnabled(), tests etc. as above + to avoid unecessary stack operations (see the log4j pages for explanation of + this best practice)</li> + <li>log all exceptions (generally as ERROR)</li> + <li>log all transactions as INFO, including ids for readers and books</li> + </BLOCKQUOTE> + </TD> + </TR> + </TABLE> + </BODY> </HTML> Modified: branches/VLIBRARY_2_X/src/test/resources/ApplicationResources.properties =================================================================== --- branches/VLIBRARY_2_X/src/test/resources/ApplicationResources.properties 2017-05-19 18:26:09 UTC (rev 284) +++ branches/VLIBRARY_2_X/src/test/resources/ApplicationResources.properties 2017-05-19 18:27:12 UTC (rev 285) @@ -16,7 +16,8 @@ index.forgotPassword=Forgot Your Password index.logoff=Logoff index.source=View/Download Source -index.contact=Questions? Comments? Feedback? +index.contact=Questions? Comments? +index.issues=Problems? Feature Requests? index.add.book=Add a Book how-it-works.title=How it works how-it-works.heading=How it works... This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |