[cvs] Expresso commit by rauld: added Yves Henri Amaizo's
contributions Raul
JCorporate Ltd
jcorp at jcorp2.servlets.net
Sun Oct 10 14:53:10 PDT 2004
Log Message:
-----------
added Yves Henri Amaizo's contributions
Raul Davidovich
Modified Files:
--------------
expresso/expresso-web/expresso/doc:
ChangeLog.xml
Revision Data
-------------
Index: ChangeLog.xml
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/ChangeLog.xml,v
retrieving revision 1.256
retrieving revision 1.257
diff -Lexpresso-web/expresso/doc/ChangeLog.xml -Lexpresso-web/expresso/doc/ChangeLog.xml -u -r1.256 -r1.257
--- expresso-web/expresso/doc/ChangeLog.xml
+++ expresso-web/expresso/doc/ChangeLog.xml
@@ -2,3501 +2,3257 @@
<!DOCTYPE changelog SYSTEM "ChangeLog.dtd">
<?xml-stylesheet type="text/xsl" href="ChangeLog.xslt"?>
<changelog>
- <project name="Expresso">
- <version name="5.6" releaseDate="Not Yet Released">
- <comment>Continued Updates</comment>
- <misc-change title="Updates to the cache size in DBObjLimit will now instantly change the cache size">
- <explanation>Previously, the cache size was not changed until server restart when changing Database Object Page Limits and Cache Settings (DBObjLimit).
- Now, it will change upon DBObjLimit.update().</explanation>
- <contributor>Mike Traum</contributor>
- </misc-change>
- <bug-fix title="XMLController import now works">
- <explanation>Import was throwing exceptions for 2 reasons: (a) XMLImportDocument.character assumed the full contents would be passes in
- one call and (b) virtual fields we not being skipped.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <misc-change title="SingleDBUserInfo depreciated">
- <explanation>SingleDBUserInfo duplicates the funcitonality of DefaultUserInfo, adding the ability to hardcode the dbconext of the
- database table. This is unnecessary because that functionality is available in DBOTHERMAP.</explanation>
- <contributor>Mike Traum</contributor>
- </misc-change>
- <api-change title="DBObjectDef constructor no longer throws DBException">
- <explanation>DBObjectDef no-args constructor no longer throws DBException. Recompile applications that depend on this constructor.</explanation>
- <contributor>Larry Hamel</contributor>
- </api-change>
- <bug-fix title="DefaultAutoElement.parseBlocks() uses default value of a field if none provided by input.">
- <explanation>Instead of calling it an error if there is no parameter value for
- a field that has a default value, DefaultAutoElement.parseBlocks() now sets the field to the default value.
- This is especially useful for RegisterUser, which insists on values for Industry and Employees.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Cron entries with any minute (-1) were not executed at the proper times">
- <explanation>Cron entries with -1 for minute should be executed every minute which is valid for the other settings</explanation>
- <contributor>Marcus Lindberg, Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="i18n fixes for SimpleLoginController">
- <explanation>i18n some strings</explanation>
- <contributor>Francesco Galli</contributor>
- </bug-fix>
- <bug-fix title="DBConnection.getMetaData() always returned metadata from the first execution">
- <explanation>getMetaData() now returns the metadata from the most recent query, as stated in the javadocs.</explanation>
- <contributor>katya, Mike Traum</contributor>
- </bug-fix>
- <new-feature title="revise login bean CurrentLogin to be overridable">
- <explanation>revise login bean CurrentLogin to be overridable, as a 'class handler' in expresso-config.xml</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <schema-changes>
- <new-table name="AUDITLOG" class="com.jcorporate.expresso.ext.dbobj.AuditLog">
- <explanation>Used by AuditedSecuredDBObject - an extension of SecuredDBObject that always writes
- an audit entry to the AuditLog table tracking who made the change, when, to what object
- </explanation>
- <contributor>Mike Rimov, et al</contributor>
- </new-table>
- <new-table name="AUDITLOG_L" class="com.jcorporate.expresso.ext.dbobj.AuditLogL">
- <explanation>Provides the lookup values for the AUDITLOG table
- </explanation>
- <contributor>Mike Rimov, et al</contributor>
- </new-table>
- <new-table name="schema-changes" class="com.jcorporate.expresso.services.dbobj.ChangeLog">
- <explanation>A ChangeLog object is used to record changes to other DBObjects. If logging is enabled,
- whenever a database change is made (add, update or delete), a ChangeLog object is written.
- </explanation>
- <contributor>Michael Nash, Raul Davidovich</contributor>
- </new-table>
- </schema-changes>
- <bug-fix title="Registration approval validation entry not being set to Validated">
- <explanation>After clicking on a registration approval link, the Validation entry was not being set to
- Validated. Also, an exception was being thrown in the error logs.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <new-feature title="Added 'delimiter' attribute to IfMemeberOfGroup tag">
- <explanation>If a the 'delimiter' is specified, the 'groupname' will be split on the delimiter. The user
- will be search for any of the named groups (a logical OR is performed).</explanation>
- <contributor>Mike Traum</contributor>
- </new-feature>
- <bug-fix title="Validation email will now work with SSL">
- <explanation>If a ValidationEntry was made from the SSL port, the URL was being generated with
- 'http' and the SSL port, causing a failure. Now, 'https' is used if the port is the SSL port.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="Controller should give out copies of schema stack to response, not the real thing!">
- <explanation>Controller should give out copies of schema stack to response, not the real thing! The response
- is per call, and shouldn't have hooks into controller's static data.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="RegistrationDBObject.deletedUser() uses custom UID field">
- <explanation>when deleting, check registration object map because coder MAY have used custom UidField name
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="DBConnectionPool.getWildCardsList() now returns cloned array">
- <explanation>After reports of ConcurrentModificationException, changed method to
- return cloned list rather than data member.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Messages.getString() complains less">
- <explanation>If given a stack of schemas in which to try to find a message bundle translation,
- Messages.java no longer complains unless it cannot find any translation anywhere.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="DefaultUserInfo now uses the CacheManager, eliminating problems when changing a username">
- <explanation>When changing a username, the old username could not be used in the registration process. The username was being
- cached in a Hashtable, but with no syncing for updates or deletes. This has been removed in favor of the CacheManager.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="DBObject.getValuesDefault() now uses param values in cache key">
- <explanation>DBObject.getValuesDefault() now uses param values in cache key. Previously,
- the cache key was a constant '.validValues' for all param values, so that
- the first call set the cache, and all calls thereafter, no matter what params were used,
- got the same value. Now, separate calls with different params will cache separately.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <new-feature title="DataField.isChanged() works after update() and add()">
- <explanation>Add method so that DBObject.update() and DBObject.add() can indicate when to cache the current field value as the 'original' value for purposes of isChanged() comparison. Previously, isChanged() was working for DBObject.retrieve() only.</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="AllowedHtmlPlusURLFilter">
- <explanation>AllowedHtmlPlusURLFilter offers the recognition of a limited subset of HTML
- to be used within an input field. the subset has been chosen to offer
- some basic formatting without risking Cross site scripting (XSS) dangers.</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="Struts Validator Integration">
- <explanation>Expresso can now use Struts Validator for validating input forms. Rules are defined in validation.xml and validator-rules.xml. See Validating user input in EDG for more details</explanation>
- <contributor>Raul Davidovich</contributor>
- </new-feature>
- <misc-change title="HtmlFilter does not replace double-quote">
- <explanation>HtmlFilter does not replace double-quote now. It is not one the list of XSS characters for typical text-field usage (see http://www.cert.org/tech_tips/malicious_code_mitigation.html#4 ), and prevents proper URL recognition in HtmlPlusURLFilter.</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <new-feature title="new class - com.jcorporate.expresso.core.controller.TilesController">
- <explanation>Expresso aware implementation of the org.apache.struts.tiles.Controller interface.
- This allows for manipulation of the ControllerResponse for a particular
- tile before it is displayed, independantly of the State currently being processed.
- Developers should extend this class and code the execute() method.</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="Various JoinedDataObject enhancements/fixes">
- <explanation>You can now specify which fields to retrieve from each dataobject in the join. This list
- can also include expressions such as SUM(). Added custom WHERE clause facility. Aliases can be used in the custom
- WHERE clause and these will be translated when the WHERE clause is built. Fixed generation of ON clause
- when joining tables with a compound key. Provided setConnection() method to facilitate transactioning.</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <bug-fix title="Multipart request handler infinite loop">
- <explanation>If a controller has a session scoped bean and a multipart parameter is submitted and an exception occurs processing the state to which the parameter is submitted, the controller dispatching gets stuck in an infinite loop. The multipart handler needs to be cleared from the session bean in all cases.</explanation>
- <contributor>David Lloyd</contributor>
- </bug-fix>
- <bug-fix title="DefaultUserInfo.add/update should test via User.getUserInfo()">
- <explanation>centralize code for testing uniqueness of e-mail address and login name.
- use User.getUserInfo() so that tests are routed through proper userInfo implementation</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Transition.getParamString() fixed to cache for controller boolean">
- <explanation>fix param cache which ignored boolean for 'includeControllerParam'.
- Took effect when the same transition was used in two places in same view, with differnt
- controller needs (e.g., one button param, on getFullUrl() call)</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="button param for 'state' wins">
- <explanation>make button 'state' param win out over any other
- 'state' param in request; this was true of 'controller' param, and now also for 'state'</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <misc-change title="add setOmitControllerParam for transition param tag">
- <explanation>add setOmitControllerParam for transition param tag, to allow shorter URLs in links</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <bug-fix title="Transition.getParameterString(boolean) now obeys boolean">
- <explanation>fix getParameterString(boolean)
- which was not following promise of boolean (to include controller or not).
- Important for submit buttons, which may need controller param to
- redirect correctly in the case where form tag has different URL.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="DBObject.deleteAll failed with customWhereClause">
- <explanation>DBObject.deleteAll failed with customWhereClause because this clause is erased by searchAndRetrieveList().
- Reset clause each time through our (memory safe) 100-at-a-time loop. Also, getCustomWhereClause already has 'WHERE' prepended,
- so remove this when re-appending.</explanation>
- <contributor>Larry Hamel (for Marcus Lindberg)</contributor>
- </bug-fix>
- <bug-fix title="DefaultAutoElement respects numeric field when user sets field to empty string">
- <explanation>DefaultAutoElement respects numeric field when user sets field to empty string. it is translated into a null,
- and thereby preserves the isFieldNull() test which is especially important for a numeric field because
- getFieldInt() and similar calls will return 0 for a null field.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Protect against null final state">
- <explanation>Rare null final state could occur. The isFinalState protects against it. Found trying to go to the component manager when not logged in. The SimpleLoginController trying to transition to the login screen would bail horribly. A proper transition can now occur.</explanation>
- <contributor>David Lloyd</contributor>
- </bug-fix>
- <misc-change title="Debug output of SQL update">
- <explanation>Add debug output of SQL updates when its a prepared call. </explanation>
- <contributor>David Lloyd</contributor>
- </misc-change>
- <performance-improvement title="Reduced Clearing of Related Caches">
- <explanation>When non-stale values were being put in the cache system, then related caches were getting cleared, even though they didn't need to be. The new put() methods in the CacheSystem Interface allows you to drop items in the cache without clearing related caches.</explanation>
- <contributor>Michael Rimov</contributor>
- <contributor>Larry Hamel</contributor>
- </performance-improvement>
- <bug-fix title="When deleting an entry in USERROLES, GROUPNEST was not checked, leading to problems with referential integrity">
- <explanation>UserGroup will now check GroupNest before allowing deletion.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="When updating registration, SimpleRegistrationController was overwriting fields with other users' information">
- <explanation>When a user would update a registration domain object with fields that were not set to be
- displayed, data from another user (the first record retrieved by the database when doing a query
- with no constraints) was copied into those fields.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="Removing JobQueue entry for recurring job now removes the job from the CronTab">
- <explanation>When the JobHandler checks the JobQueue for new jobs, it will now also make sure
- that the JobQueue entry for current CronTab entries associated with a JobQueue entry exists. If it
- does not, the CronTab entry is deleted.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="Fixed DBObject Null Test Case">
- <explanation>Null Test case was performaing a clear() and an update() with an auto-inc field. The Update() would then clear the auto-inc field, resulting in bogus test results.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fixed RecordPaginator for MultiDBObject">
- <explanation>fix multidbobject support for pagelimit, and fix pagecount.</explanation>
- <contributor>Larry Hamel (for Matteo Martello)</contributor>
- </bug-fix>
- <bug-fix title="RowSecuredDBObject now rolls back permissions created during transaction">
- <explanation>use localconnection, if any, to create permissions. fixes bug where transactions did not roll back permissions.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <misc-change title="Removed @deprecated Functions">
- <explanation>Started removal of functions that were @deprecated since 5.3</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <bug-fix title="Fixed Change logging issue">
- <explanation>Added default values and schema setuf for ChangeLog to work properly</explanation>
- <contributor>Raul Davidovich</contributor>
- </bug-fix>
- <bug-fix title="Fixed AuditedSecuredDBObject">
- <explanation>Added Initialization items for these objects to work</explanation>
- <contributor>Raul Davidovich</contributor>
- </bug-fix>
- <bug-fix title="Fixed Multi valued selects and listboxes generation">
- <explanation>Multi valued selects and listboxes were generated as simple ones</explanation>
- <contributor>Raul Davidovich</contributor>
- </bug-fix>
- <bug-fix title="Fixed </td> was not printed when showing input labels">
- <explanation>When automatically printing labels the td tag was not closed </explanation>
- <contributor>Raul Davidovich</contributor>
- </bug-fix>
- </version>
- <version name="5.5.1" releaseDate="April 30, 2004">
- <comment>Updates</comment>
- <new-feature title="More mimeTypeIcons added">
- <explanation>Added mimeTypeIcons from the bluecurve and crystal themes. Also changed MimeTypes to genererate a valid value list from a recursive directory listing.</explanation>
- <contributor>Mike Traum</contributor>
- </new-feature>
- <bug-fix title="DBMaint search not shown">
- <explanation>Internet Explorer would not show DBMaint's search page. Other browsers worked.
- </explanation>
- <contributor>David Lloyd</contributor>
- </bug-fix>
- <bug-fix title="FieldRangeParser now recognises 'is null' and 'is not null' as valid">
- <explanation>'is null' and 'is not null' are now valid field values for SQL WHERE clause</explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <bug-fix title="message bundle: fix Transition.transition() controllerResponse titling during 'clone'">
- <explanation>in Transition.transition(), use raw title key, without running through msg bundle string translation, to 'clone' controllerResponse</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="message bundle: fix logic to attempt default message bundle if application's msg bundle lacks key">
- <explanation>use bundle cache key that allows multiple bundles per locale (e.g., application's AND default expresso)</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- </version>
- <version name="5.5.0" releaseDate="April 27, 2004">
- <comment>Final bugfixes and documentation</comment>
- <misc-change title="Added missing translation strings to message bundle for English">
- <explanation>To avoid warning messages, added missing translation strings to message bundle for English</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <new-feature title="application status: add link to cache management">
- <explanation>Status page now has add link to cache management for each cached object in status report, using JSTL</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <misc-change title="dbmaint JSPs: move some includes into jsp:includes to reduce size">
- <explanation>move some includes into jsp:include to reduce size (compilation on some compilers > 64K)</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <misc-change title="SecurityDBObject tests narrowed">
- <explanation>add tests to narrow the cases where db context is overwritten; add documentation</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <bug-fix title="html:base and remoteLayer tag attributes">
- <explanation>The base tag in expresso-html.tld had attributes that were incorrect. They now match Struts' tld and class definition. The remoteLayer tag had an incorrect value attribute.
- </explanation>
- <contributor>David Lloyd</contributor>
- </bug-fix>
- <bug-fix title="Reinstate listing of errors on web page output of DBCreate">
- <explanation>This output was going to log file only. Reinstate it on resulting web page, as was the case from v.4.1 and previous.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <new-feature title="JoinedDataObject now recognises field values 'is null' and 'is not null' for WHERE clause">
- <explanation>JoinedDataObject now recognises field values 'is null' and 'is not null' for WHERE clause</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <bug-fix title="JoinedDataObject case insensitive queries were not checking for DataFieldMetaData.isQuotedTextType()">
- <explanation>Amended JoinedDataObject.buildWhereClauseBuffer() to check for fields being text type when a case
- insensitive query is requested, as SQL function UPPER is only valid for text fields.
- </explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <bug-fix title="Fixed bug where transition parameters (including the state) were sometimes (unpredictably) not being recognized">
- <explanation>ServletControllerRequest.addButtonParams() was modifying a hashtable during
- enumeration, which causes unpredictable results. So, the request parameters were sometimes
- not loaded properly.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <new-feature title="HtmlPlusURLFilter">
- <explanation>HtmlPlusURLFilter subclassess HtmlFilter, adding an ability to
- recognize user-entered
- text which begins with 'http://' or 'www.', etc., and automatically
- create an anchor (<a>) tag from it.</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <api-change title="EventNotify can sent multiple MIME attachments">
- <explanation>
-
- 'com.jcorporate.expresso.core.misc.EventNotify' has been modified to
- allow sending multiple MIME attachments. Introducing for a special
- JavaMail 'ByteArrayDataSource' type to act as a virtual data source
- and store binary stream content.
-
- </explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="ControllerElement has a nested elements method">
- <explanation>In order to support JSTL 1.0 the
- ControllerElement.java has a new getNestedCount() method</explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="StringUtil has a new method 'getStackTraceAsString()'">
- <explanation>StringUtil has a new method `getStackTraceAsString()' which
- takes an java.lang.Throwable, retrieves the stack trace dump and
- returns it as java.lang.String.
- </explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="StringUtil.java has new join() methods">
- <explanation>StringUtil has support to concatenate arrays of java.lang.String</explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="StringUtil.java can wrap a text string">
- <explanation>StringUtil has a createWordWrappedString() to
- allows text broken is to lines of maximum length;
- to be word wrapped Word Processor.</explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="DBObject.java has a new method `toDebugString()'">
- <explanation>DBObject has IDE toDebugString() method that dumps
- the data object and associated data fields into perl hash data
- structure. This method useful to interactive IDE development
- where you are allow to inspect and execute arbitary
- methods on objects
- </explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="MimeType convenience method to look up by content type id">
- <explanation>MimeType.java has a new static method getMimeTypeFromMimeId().
- This method finds the matching data object that matches the registers
- content type id.
- </explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <api-change title="MediaDBObject now has convenience blob accessors">
- <explanation>MediaDBObject.java has convenience method to retrieve
- information on Blob data. The methods are 'getBlobFilename()',
- 'getBlobMimeType()', 'getBlobFileSize()' and 'getBlobFileSizeInt()'.
- </explanation>
- <contributor>Peter Pilgrim </contributor>
- </api-change>
- <bug-fix title="fix mem leak in User.addListener scheme">
- <explanation>fix mem leak in User.addListener scheme; the scheme is intended for class-level, 'static'
- listeners, but individual instances were getting added to the listener list. It tended to show
- up when deleting users--not a commmon action.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <misc-change title="Changed listing of Download files to list in descending update date">
- <explanation>Download.do was listing download files by the ID. This has been changed to list
- them in descending update date order.
- </explanation>
- <contributor>Mike Traum</contributor>
- </misc-change>
- </version>
- <version name="5.5 RC-1" releaseDate="March 14, 2004">
- <comment>You must recompile your applications on this release.</comment>
- <bug-fix title="Fixed ControllerResponse.getString to search through schemas in the proper order">
- <explanation>ControllerResponse.getString searches through a stack of schemas and returns the
- first string found. The stack was being searched in reverse order.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="When using strong encryption, StringEncryption.encrypt was throwing NoSuchAlgorithmException upon class reloading">
- <explanation>On destroy(), the encryption provider was not being removed properly from
- Security properly, so it would not init() properly on reload.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <misc-change title="No notification of successful job completion via email">
- <explanation>Previously, jobs that completed successfully notified their owners by e-mail.
- Now, no e-mail notification is made on success. Failure is still notified by e-mail.
- If you want notification on success, set the following set up value to "true": isNotifyOnJobSuccess
- </explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <api-change title="DBObject.setSchema() called automatically; expresso message bundle searched after application's bundle">
- <explanation>DBObject.setSchema() for each DBObject is called in ConfigManager at startup.
- Previously, developers had to call it within each DBObject's setup(). If they did not
- call setSchema(), then during resource bundle lookups for translation strings,
- the schema would default to the Expresso schema, so the Expresso bundle would be searched.
- Consequently, applications like eforum have a bunch of strings in the Expresso bundle.
- To accommodate this legacy expectation, MessageBundle now has the following logic:
- if a translation string is not found, and the current schema is not Expresso,
- then also search for the string in the Expresso bundle.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </api-change>
- <api-change title="HSQL reverted to no 'cached' tables">
- <explanation>Up through version expresso 5.1, HSQL database tables were
- created just like other tables. However, looking forward to HSQL updates,
- a special case was added to create "cached" HSQL tables sometime after expresso 5.1.
- (Cached HSQL tables are written to the
- .data file in binary format, instead of appearing as plain text in the .script file.)
- This 'cached' change has been reversed because 1) we have reverted to hsql 1.6.1,
- 2) text files are more easily viewed and manipulated 3) the cached files may have
- been the cause of the mysterious "already opened by another process" errors.
- If you already have a DB created by previous copies, you'll need to delete
- it and start again.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </api-change>
- <new-feature title="ServletControllerRequest possible instead of pure Controller Request">
- <explanation>You can now implement a state handler as: runXXXXState(ServletControllerRequest, ControllerResponse); if you desire pure servlet usage. This avoids that nasty cast issue. Expresso will only search for the servlet controller request version if it cannot find a state handler using (ControllerRequest,ControllerResponse) parameters</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <bug-fix title="fix Schema.getMembers() initialization regarding permissions of the requesting user">
- <explanation>fix Schema.getMembers() initialization regarding permissions of the requesting user.
- Although SecuredDBObject assumes superuser privileges when the no-argument
- constructor is used, its subclass RowSecuredDBObject is less optimistic,
- assuming that no privileges should be given. Therefore, when
- Schema.getMembers() is called during schema initialization,
- the requesting user must be set for any such objects.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="fix mem leak in listener scheme">
- <explanation>fix mem leak in listener scheme
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Block.clone()">
- <explanation>Fixed cloning for Blocks in such a way that JSTL works with cloned blocks</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBConnection.supportsTransactions() NPE if connection timed out">
- <explanation>getMetaData() would return null and thus the NPE. By returning null on NPE, we later get a more meaningful error if this occurs.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="AsyncProcessor.getStatus() returning stale object">
- <explanation>getStatus() should have been updated from the processor object each time it was called.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBCreate Error on Partial Tables">
- <explanation>isAdmin(): Better error if tables only partially exist</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ORO Pattern Matching race conditions">
- <explanation>Switched to Read Only flag Pattern Compilation. The following classes were affected and modified: FieldRangeParser, controller.State, dbobj.DBObject, dataobject.DefaultDataField, DBobjectDef, core.misc.ConfigPathMapping, servlet.PathHandler, core.utility.XLateUtil, ext.dbobj.ISOCountryCodes, ext.xml.dbobj.ControllerXSLMap, ext.xml.dbobj.UserAgent </explanation>
- <contributor>Mike Traum</contributor>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ORO Matcher race condition">
- <explanation>Race conditions in ORO matcher. Now synchronized or ThreadLocal</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Range Parser Fix">
- <explanation>Now properly accepts fields such as: >100</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="html.Text invalid constructor">
- <explanation>Style parameter was getting ignored</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <misc-change title="Deprecation Removals">
- <explanation>Rewrote some calls to remove references to deprecated methods</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="Javadoc Warning Removals">
- <explanation> Continued in the quest for removing all Java doc warnings... removed another 50 or so :) </explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <performance-improvement title="Thread Local Pattern Matchers">
- <explanation> In places where regular expression pattern matching was being used extensively,
- synchronized static instances of the ORO pattern matchers have been replaced with thread local instances
-to reduce synchronization and memory instance creation. </explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <api-change title="stripFilter now strips the character instead of replacing it with a space">
- <explanation>stripFilter now strips the character instead of replacing it with a space</explanation>
- <contributor>Mike Traum</contributor>
- </api-change>
- <api-change title="DBException thrown on DBObject (and related) add, update, and search if field value is not valid for the data type">
- <explanation>Data type's are now checked when doing an add, update, or search to prevent sql injection. This is
- implemented by setting default field masks being set according to the data type. If a match is not made, DBException
- will be thrown. Because of this new use of field masks, care must be taken when setting custom field
- masks to exclude the possibility of sql injection.
- </explanation>
- <contributor>Mike Traum</contributor>
- </api-change>
- <bug-fix title="sql injection bugs in adding and updating fixed">
- <explanation>Non-text data typed fields where open to sql injection when adding or updating. This is now
- fixed by setting default field masks being set according to the data type. If a match is not made, DBException
- will be thrown. Because of this new use of field masks, care must be taken when setting custom field
- masks to exclude the possibility of sql injection.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="sql injection bugs in searching fixed">
- <explanation>When building a where clause, the fields will now be validated against field
- masks with default masks being set according to the data type. If a match is not made, DBException
- will be thrown. Because of this new use of field masks, care must be taken when setting custom field
- masks to exclude the possibility of sql injection.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="stripFilter now strips the character instead of replacing it with a space">
- <explanation>stripFilter now strips the character instead of replacing it with a space</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="wildcard searches now work on numeric fields">
- <explanation>when searching with a field containing a wildcard, the field was not being quoted</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="fix RowSecuredDBObject.deleteAll() in testing permissions">
- <explanation>fix bug in testing permissions</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="fix custom WHERE clause processing in JDBCDataObject">
- <explanation>WHERE clause was omitted from generated SQL if a custom WHERE clause was specified and append is 'true'</explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <misc-change title="default validation expiration --> 5 days">
- <explanation>default validation expiration --> 5 days (was just 1 day)</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <misc-change title="validation failure --> formatted jsp">
- <explanation>protect against deleted validation IDs, and show formated JSP upon any failure</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <bug-fix title="fix DBObject.haveAllKeys() test which omitted autoInc fields">
- <explanation>fix DBObject.haveAllKeys() test which omitted autoInc fields.</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="State.checkMask failed when checking a mask with no error associated">
- <explanation>A NullPointerException was thrown. Now, the default error is given.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="State.addRequiredParameter was not working with input containing newlines">
- <explanation>The mask attempting to match any input would not match newlines
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="Fixed error when deleting a component">
- <explanation>A NullPointerException was thrown when a component was deleted with the Component Manager
- and there were no errors
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="fix addOrUpdate() which was not testing for having all keys for update">
- <explanation>fix addOrUpdate() which was not testing for having all keys for update
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="fix deleteDetails permissions">
- <explanation>fix deleteDetails permissions for details which are SecuredDBObjects
- by copying requesting user ID from 'parent' object
- </explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Changing Locale related user preferences will now update the Locale instantly">
- <explanation>When a user changed their language or country, their Locale would not be changed until
- next login (they would still get the old language MessageBundle, etc). This change will now happen instantly.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="error messages were being search for in schemas in reverse order in ErrorMessages tag">
- <explanation>The ErrorMessages tag will search for error messages in a stack of schemas, allowing the
- user to override default error messages. This stack was being searched in reverse order.
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <new-feature title="Allow Inputs to have multiple default values">
- <explanation>Can now set multiple default values for Inputs via setDefaultValueArray(String[]). Expresso EL options tag modified accordingly. Useful for pre-setting multiple values in a multi-select select box.</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <misc-change title="DBObject.update() will, by default, only update changed fields">
- <explanation>DBObject.update() will, by default, only update changed fields</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <bug-fix title="changing a user's group would not be reflected until next login or 10 minutes">
- <explanation>A user's group is cached, and that cache was not being updated when the user's
- group was changed
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="throw more descriptive DBException when using AutoDBObject with hsqldb">
- <explanation>AutoDBObject does not support hsqldb, so when it's being used with it, it will throw a
- DBException saying so
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="fixed ErrorMessages to render errors on separate rows">
- <explanation>ErrorMessages was rendering errors on one row, all slammed together. Now, it uses the
- bundle keys 'errors.item.header' and 'errors.item.footer' to begin and end an error item
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="fixed possible NPE in JDBCDataObject">
- <explanation>It was possible that a null valued field with a range constraint could throw a
- NullPointerException in the quoteIfNeeded() function.
- </explanation>
- <contributor>David Lloyd</contributor>
- </bug-fix>
- <bug-fix title="NPE Fix in Log Manager">
- <explanation>Fixed NPE that was occuring if no directory was given.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fixed DBObject Serialization.">
- <explanation>Re-fixed broken serialization for DBObjects.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <misc-change title="XMLDBObject now supports DataObject">
- <explanation>refactored XMLDBObject and XMLImportDocument to support DataObjects.</explanation>
- <contributor>David Lloyd</contributor>
- </misc-change>
- <misc-change title="create optimized URL by default in Transition.getURL()">
- <explanation>create optimized URL by default</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <misc-change title="DBObject.clear() also clears custom where clause">
- <explanation>DBObject.clear() also clears custom where clause</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <misc-change title="Catch Missing resource exception in controller">
- <explanation>if unable to locate bundle then we ignore missing resource exceptions for ControllerResponse.getString()</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <new-feature title="added target pretty printing all XML in EDG">
- <explanation>xmlpp-edg is name of pretty-print target</explanation>
- <contributor>David Lloyd</contributor>
- </new-feature>
- <bug-fix title="CrontabEntry had some problems with some boundary conditions">
- <explanation>with hourly (4,-1,-1,-1, -1, -1) , the entry would thow an exception at 11 am and 11 pm;
- with weekly and hourly (4,-1,-1,-1,1,-1), the entry would not start at midnight the next week
- </explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="reinstate universal transitions after struts 1.1 adjustments">
- <explanation>fix external transitions, Transition.transition(), by restoring expresso feature
- which existed before struts 1.1 adjustments
- </explanation>
- <contributor>Larry Hamel for David Lloyd</contributor>
- </bug-fix>
- <misc-change title="revert to hsqldb v1.6.1">
- <explanation>v.1.7 of hsqldb was buggy, and also uses a binary storage format. reverting
- to 1.6.1, which has been used successfully for over a year in expresso, and stores in easily-edited text format.</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <bug-fix title="fix inconsistent use of styleId in the the expresso-html.tld">
- <explanation>fix inconsistent use of styleId in the the expresso-html.tld.
- Some had it defined and some did not but all were ready to use it due to
- inheritance from struts. I fixed the tld and tested them. The layer
- tags are still inconsistent and I didn't fix them because doing so would
- break existing code. They use the id property instead of styleId for rendering
- the id.
- </explanation>
- <contributor>Larry Hamel for David Lloyd</contributor>
- </bug-fix>
- <misc-change title="change order of params in AutoControllerElement">
- <explanation>no functional change, but it just bothered me that Response came before Request,
- despite all other examples otherwise in controllers.</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <new-feature title="added target pretty printing XML">
- <explanation>xmlpp is name of pretty-print target; will announce when ready for prime-time</explanation>
- <contributor>David Lloyd</contributor>
- </new-feature>
- <misc-change title="MessageBundle.getString: log error rather than throwing">
- <explanation>log error msg and return key if bundle string not found, rather
- than throwing IllegalArgumentException</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <misc-change title="Switched Async Process Servlet to setup table for parameters.">
- <explanation>Removed Properties file that it was relying on in previous versions.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <new-feature title="Respect offset count for pagination on MultiDBObject">
- <explanation>Respect offset count for pagination on MultiDBObject, just like DBObject does</explanation>
- <contributor>Liuhey</contributor>
- </new-feature>
- <new-feature title="DBObject allows 'is null' and 'is not null' as field values for WHERE clause">
- <explanation>Changed JDBCUtil.buildWhereClauseBuffer() to allow 'is null' and 'is not null' as field values for WHERE clause</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="Option to append custom WHERE clause in DBObject">
- <explanation>Added optional flag to setCustomWhereClause(). If true, the custom WHERE clause is appended to the generated one, if false it is used instead. Default is false.</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <bug-fix title="Controller moves Persistent ErrorCollection to response">
- <explanation>When doing a redirectRequest, the Controller sets the ErrorCollection as a PersistentAttribute so that it will carry across the redirect. That is now moved on the next Controller execution so that it will not persist across multiple states.</explanation>
- <contributor>Mike Traum, User Max</contributor>
- </bug-fix>
- <bug-fix title="DBObject.deleteAll() should respect to any custom Where clause">
- <explanation>deleteAll() should respect to any custom Where clause, instead of ignoring it</explanation>
- <contributor>Liuhey</contributor>
- </bug-fix>
- <bug-fix title="make ControllerResponse.getFormCache() live up to promise in javadoc that empty string will be returned if there is no value">
- <explanation>instead of returning null</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="use newInstance() when creating copy of object in MultiDBObject so that SecureDBObjects get requesting user ID set properly">
- <explanation>make Requesting User ID set</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="fix deletion of details where detail is SecureDBObject">
- <explanation>make sure model DBObject used for deletion has Requesting User ID set</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Race Conditions in UnOrderedCache">
- <explanation>Fixed race conditions in unordered cache.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Cache Cleaner clearing memory">
- <explanation>Cache Cleaner now checks memory availability and removes lowest cache if running low on memory. </explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Race Condition in JobHandler">
- <explanation>Fixed pretty old race condition in Job Handler.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fixed DefaultAutoElement.createDBObjectBlock">
- <explanation>Inputs were not getting properly added to the block.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ConcurrentModification Exception in UnOrderedCache">
- <explanation>Was modifying while iterating. :(</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <performance-improvement title="Minimum App Memory Tweaked">
- <explanation>Cache removal takes place now at 20% available memory instead of 10%. This reduces GC frequency considerably.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <package-changes>
- <package-update package-name="Hypersonic Database" version-number="1.6.1"/>
- <package-update package-name="Jakarta-Tomcat" version-number="4.1.29"/>
- </package-changes>
- </version>
- <version name="5.3 RC-6" releaseDate="November 28, 2003">
- <comment>Continuing Bugfixes and documentation updates.</comment>
- <new-feature title="added target for running junit tests via ant">
- <explanation>type: ant test</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="Make DefaultForm attributes available to JSTL">
- <explanation>Add DefaultForm.getAttributes() method</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <bug-fix title="case sensitive query">
- <explanation>Check for isQuotedTextType() when doing case sensitive searches</explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <bug-fix title="set limitiation connection properties for all newly created connections">
- <explanation>Previously, newly created connections did not have default property set after the first connection. </explanation>
- <contributor>Liuhey</contributor>
- </bug-fix>
- <bug-fix title="<> not in allowed range types.">
- <explanation>This type of range was not permitted for database fields it has now been added.</explanation>
- <contributor>User jteo</contributor>
- </bug-fix>
- <new-feature title="added Template Method postLogoutProcessing()">
- <explanation>added Template Method postLogoutProcessing()</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="added Template Methods pre/postPerform()">
- <explanation>added Template Methods to Controller.java</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="New DBObject methods: getFieldByte, getFieldBigDecimal, getFieldShort">
- <explanation>Added new convenience methods to CVS.</explanation>
- <contributor>Peter Pilgrim</contributor>
- </new-feature>
- <new-feature title="DBMaint Tag with new attribute: definition">
- <explanation>DBMaint Tag can be used for Joined DataObjects or AutoDBObjects by setting the definition attribute</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="New DBObject Metadata factory method">
- <explanation>Allows you to create metadata derived from DBObjectDef so that you can provide extended fields</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="Crontab Management Controller">
- <explanation>Accessible from the Operations Page, this controller allows you to peak into the cron operations.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <bug-fix title="case sensitive query">
- <explanation>Check for isQuotedTextType() when doing case sensitive searches</explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <bug-fix title="set limitiation connection properties for all newly created connections">
- <explanation>Previously, newly created connections did not have default property set after the first connection. </explanation>
- <contributor>Liuhey</contributor>
- </bug-fix>
- <bug-fix title="Re-instated case sensitive query code">
- <explanation>Case sensitive query processing for DBObject re-added</explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <bug-fix title="Fixed downloads">
- <explanation>Downloads weren't always working properly due to badly set headers by either Struts or Tomcat. Resetting the connection before transfer fixed this</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="JDBCMetaData Javadoc error">
- <explanation>Removed @deprecated tag</explanation>
- <contributor/>
- </bug-fix>
- <bug-fix title="LE WAR removed bad servlet references in web.xml">
- <explanation>Cactus isn't included in LE war file. It now must be enabled before using Cactus</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Subsequent Searches in DBMaint">
- <explanation>Subsequence Searches in DBMaint weren't allowing blank searches.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="MultiDBObject Inner Join Fix">
- <explanation>Fixed incorrect inner join and outer join code.</explanation>
- <contributor>Rudi Maurer</contributor>
- </bug-fix>
- <bug-fix title="Fixed for no key specifications in fields.">
- <explanation>Specifically for MultiDBObject</explanation>
- <contributor>Rudi Maurer</contributor>
- </bug-fix>
- <bug-fix title="Security Fix DBController">
- <explanation>Cached Security wans't set up properly if group membership was changed.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Security Fix SecuredDBObject">
- <explanation>Cached Security listening enhanced.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Status Controller And non-admins">
- <explanation>Status controller wasn't working for non Admin user.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Joins and Text Fields">
- <explanation>Joins won't play well with 'text' fields in many databases. The joins now skip the field, but be forewared, that may cause inaccurage data.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="JDBCUtil grabbing from wrong data context">
- <explanation>When dealing with mapped files, JDBCUtil.formatDateTime was grabbing from the wrong data context.</explanation>
- <contributor>Francesco Galli</contributor>
- </bug-fix>
- <bug-fix title="Update changed fields only">
- <explanation>Update was not performed unless a retrieve was executed first. JDBCExecutor.update() now checks DBObject status for 'NEW' and DataField.isValueSet() and if both true includes the field in the update.</explanation>
- <contributor>Malcolm Wise</contributor>
- </bug-fix>
- <bug-fix title="Registration Revalidate State Transition Error">
- <explanation>Revalidate Transition was pointing to an incorrect state.</explanation>
- <contributor>Web
-Designer JHB</contributor>
- </bug-fix>
- <bug-fix title="DBObject Serialization Fix">
- <explanation>DataField metadata wasn't getting restored properly</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="FileUtil.getExtension and double '.'s ">
- <explanation>Files with more than one period weren't returning proper extensions.</explanation>
- <contributor>Juris Zubkans</contributor>
- </bug-fix>
- <bug-fix title="FileUtil.getPath invalid forward slashes">
- <explanation>FileUtil.getPath() was returning forward slashes that weren't necessary for a proper path.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="MultiDBObject Outer Join fixes">
- <explanation>Fixed in SQL generation for outer joins</explanation>
- <contributor>Rudi Maurer.</contributor>
- </bug-fix>
- <bug-fix title="JSTL URL encoding">
- <explanation>JSTL-based form tag now encodes the post URL with proper session ids if needed.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="MultiDBObject and ranged fields">
- <explanation>Join syntax with ranged fields is fixed</explanation>
- <contributor>Rudi Maurer</contributor>
- </bug-fix>
- <bug-fix title="Transition.getFullURL() and session ids">
- <explanation>getFullURL now encodes the session ids as well IF running inside a controller/servlet environment.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Cron Jobs not re-running">
- <explanation>Cron jobs were getting set to 'Completed' even if they should be repeating execution through Cron. </explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Field size fix">
- <explanation>Max size was getting maxed out at 60 characters instead of field size in DBMaint</explanation>
- <contributor>Ken Chow</contributor>
- </bug-fix>
- <bug-fix title="DBMaint and Mappable">
- <explanation>Removed partially implemented Mappable code to save confusion for user id vs user login</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <performance-improvement title="MultiDBObject FromClause staying put">
- <explanation>Kept from clause from being cleared unless clear() is called to increase SQL generation performance</explanation>
- <contributor>Rudi Mauer</contributor>
- </performance-improvement>
- <performance-improvement title="DBController Security Cache Usage">
- <explanation>When loading security values, denied values are now getting properly set too.</explanation>
- <contributor>Ken Chow</contributor>
- </performance-improvement>
- <changed-feature title="DBObject Status only gets set to 'Updated' only if it has been read from the database.">
- <explanation>This was the behavior of DBObjects prior to 5.3 and is more consistent with status conditions of other persistence libraries</explanation>
- <contributor>Wei Chen</contributor>
- </changed-feature>
- <changed-feature title="Transition.getUrl(true) no longer requires ControllerResponse">
- <explanation>If you map URLs in Transition URL generation, then you don't need a ControllerResponse set prior to the URL generation. This allows Transition to be used as a type of URL generator outside of Controllers.</explanation>
- <contributor>Michael Rimov</contributor>
- </changed-feature>
- <misc-change title="Email Validation set to expire after 72 hours rather than 24.">
- <explanation>Needed if you ever had site trouble and mail was down for a day. Let people take a couple of days to complete validation, but not long enough to allow brute force validation code guessing</explanation>
- <contributor>Sandra Cann</contributor>
- </misc-change>
- <misc-change title="Reworked TOC CSS">
- <explanation>Reworked TOC CSS to specify the size of the font in absolute point size so Mozilla, etc looks a lot nicer.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="Nag about setDataContext changed from warning to info.">
- <explanation>Reduced level to keep from spamming logfiles.</explanation>
- <contributor>Francesco Galli</contributor>
- </misc-change>
- <misc-change title="DateTime.getDateString(Calendar) deprecated">
- <explanation>Function was generating incorrect values for what javadocs claimed. Use getDateTimeForDB(Calendar.getTime()) instead.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="Debug Logging in Crontab">
- <explanation>More extensive debug logging was added to crontab to assist in monitoring of execution.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- </version>
- <version name="5.3 RC-5" releaseDate="October 10, 2003">
- <comment>Final bugfixes and documentation</comment>
- <new-feature title="JSTL Extension Tags">
- <experimental/>
- <explanation>core.services.taglib tags now support some missing integration features with JSTL</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="Transition.getMapping()">
- <experimental/>
- <explanation>Allows you to find the Struts mapping that the transition is pointing to</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <api-change title="ControllerResponse no longer put into session">
- <explanation>ControllerResponse no longer put into session within JSPViewHandler because everywhere else, response is added as attribute within request scope, not session scope.</explanation>
- <contributor>Larry Hamel</contributor>
- </api-change>
- <api-change title="getField() and get() now part of DataObject API">
- <explanation>Had to be done to fix virtual fields</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="getDataField() now relagated to 'internal use', not getting and setting">
- <explanation>Wasn't allowing for proper overriding of data objects.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="DataObject.setFieldValue() changed ">
- <explanation/>
- <contributor/>
- </api-change>
- <api-change title="setField() and set() now part of data object API">
- <explanation>Also needed to fix inheritence</explanation>
- <contributor>Michael RImov</contributor>
- </api-change>
- <bug-fix title="remove unused tag library reference">
- <explanation>remove unused tag library reference to struts.tld, which tripped up Resin</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="Expresso Tag Reuse Issues">
- <explanation>Fixed some issues with tags not reinitializing</explanation>
- <contributor>Raul Davidovich</contributor>
- </bug-fix>
- <bug-fix title="Job Handler Infinite Loop">
- <explanation>If multiple jobs go off at the same time, then a potential ininite loop could occur.</explanation>
- <contributor>Richard Simmonds</contributor>
- </bug-fix>
- <bug-fix title="DBConnectionPool and closing closed resultsets">
- <explanation>DBConnectionPool wouldn't nullify closed resultsets if an exception was thrown during closure, potentially leaving the DBConnectionPool in an inconsistent state.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBObject.deleteAll() failing">
- <explanation>DeleteAll was failing with 'resultset closed' error.</explanation>
- <contributor>Michael Rimov</contributor>
- <contributor>Gabor Nagypal</contributor>
- </bug-fix>
- <bug-fix title="Missing File tag attributes">
- <explanation>Added missing file tag attributes.</explanation>
- <contributor>Juris Zubkans</contributor>
- </bug-fix>
- <bug-fix title="struts:select and Multivalued Input.">
- <explanation>If using the struts-extended select tag with a multivalued Input with blank values, the tag would throw an exception and the page would not render at all. Now the page renders with a blank drop-down and a warning message is logged to assist in debugging</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Virtual Fields Broken">
- <explanation>DataObject API was breaking virtual fields in DBMaint</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBCreate setup exceptions now logged">
- <explanation>Setup exceptions were getting displayed but not necessarily logged</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Encoded button parameters not getting decoded properly">
- <explanation>As said. If button_encoding wasn't present then nothing was getting decoded.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <misc-change title="New EDG documentation">
- <explanation>New chapters on reporting and async processing.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="Javadoc warnings cleaned up">
- <explanation>About 150 javadocs warnings were cleaned up from the build process.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- </version>
- <version name="5.3 RC-4" releaseDate="September 27, 2003">
- <comment>Continued bugfixes</comment>
- <new-feature title="HTML Email Sending">
- <explanation>Email sending may now use HTML format as well. [Beware now of CSS issues!]</explanation>
- <contributor>Eddie Lewis</contributor>
- </new-feature>
- <api-change title="New DataObject method: setStatus(String)">
- <explanation>This was necessary to fix some bugs in DataField so that the status of the parent data object was set properly.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <new-feature title="DBMaint and NestableDataObjects">
- <explanation>DefaultAutoElement now properly supports nestable data objects when rendering BLOB view icons.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="JoinedDataObjects, DBMaint, and BLOB fields">
- <explanation>You can now update and view BLOB fields for database joins directly in DBMaint.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="New Simple Report Server">
- <explanation>Simple controller to show the updated Reporting API. Includes one sample report with Expresso.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <bug-fix title="Explicit Styles failing to map at module level">
- <explanation>Passing an explicit style= parameter was broken if the style was defined at the module level rather than the controller level.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Specific styles failing at module level defines">
- <explanation>Module defined styles wouldn't necessarily map to controller level styles. We now check both.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Mail only one success message after job completion">
- <explanation>after finishing a job successfully, e-mail just once, not twice</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="JoinedDataObject's Status">
- <explanation>JoinedDataObjects did not have their status set properly</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DataFields and parent data object status">
- <explanation>DataFields not setting parent's status to modified</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ControllerElement.clone should copy all data members">
- <explanation>ControllerElement.clone should copy all data members</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="DBObject.find() and DBObject.retrieve() modifying self if nothing found.">
- <explanation>If nothing was found, then DBObject.find() and DBObject.retrieve() shouldn't modify themselves. This has been fixed.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DateTime UI Entry in DBMaint">
- <explanation>DateTime entries didn't give enough space to allow them to be properly entered.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fixed broken Duplicate download report">
- <explanation>The 'duplicate downloads' report was broken with old field names.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBObject.buildWhereClause() IllegalArgumentException">
- <explanation>if getMappedContext() was called before getConnection() then the result was null. Fixed and now there's a stack trace warning to allow for folks to debug their setDataContext() statements.</explanation>
- <contributor>Michael RImov</contributor>
- </bug-fix>
- <misc-change title="Updated JBoss integration docs.">
- <explanation>Updated JBoss integration docs to reflect less steps now needed to get Expresso to work with JBoss.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- </version>
- <version name="5.3 RC-3" releaseDate="September 5th, 2003">
- <comment>One critical database fix</comment>
- <bug-fix title="Other DB Fix">
- <explanation>getConnection was always returning default connection unless mapped</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="remove unused tag library reference">
- <explanation>remove unused tag library reference to struts.tld, which tripped up Resin</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <misc-change title="Updated EDG">
- <explanation>Updated EDG chapters, removed old code, start of ECCR description appendix. New section on creating new database configuration</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- </version>
- <version name="5.3 RC-2" releaseDate="September 3rd, 2003">
- <comment>Final bugfixes and tweaks before release</comment>
- <new-feature title="create indices added to DBObjects even after their tables have been created">
- <explanation>Previously, if you added an index to the setupFields() of a DBObject
- which had already been created, that index was not added by
- running DBCreate again. Now that index is created.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="Restrict methods on database joins">
- <explanation>Sometimes you don't want users to be able to do an add on a particular join. It is now defineable in the XML to prevent add or update or search or delete from ever happening no matter what the other DataObject security settings are</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <api-change title="OSProcess Exception Changes">
- <explanation>OSProcess.getStdIn() and OSProcess.getStdErr() no longer have throws DBException in their signature. They never thew it anyway.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="ControllerResponse.setRequest is now public">
- <explanation>Given that ControllerResponse is now dependent on a constructed ControllerRequest, we need this so we can set the controller response's request object in environments outside the standard controller. (Such as unit tests)</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <bug-fix title="Security fix for JoinedDataObject">
- <explanation>isAllowed() wasn't getting called before the methods were executing on the database</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Security fix for SecuredDBObject">
- <explanation>Count and deleteAll should both be passed through security for Search and Delete permissions respectively before executing.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Explicit locking for OSProcess Stdin and Stdout.">
- <explanation>Potential race conditions existed there.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Kernel Unit tests">
- <explanation>Kernel unit tests were added and several old unit tests were brought up to date.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBObject Limit not going to mapped databases">
- <explanation>DBObjLimit wasn't querying the current context, it was always going to default context.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fixed Cron Bug">
- <explanation>Hourly crons weren't getting executed at the proper 'minute'</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fix in Postgres configuration">
- <explanation>Fixed Postgresql configuration for BLOB sql types.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Serialization Bug">
- <explanation>DBObjects weren't getting properly serialized</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Null Field Fixes">
- <explanation>More fixes to allow for null fields to stay null!</explanation>
- <contributor>Gabor Nagypal</contributor>
- </bug-fix>
- <bug-fix title="Multi-db fix in Registration">
- <explanation>Registration Domains weren't properly setting the database context.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Atlantic App Server Compatibility Fix">
- <explanation>App server had a bug that would choke on JSPs that had 'struts-logic' in them... switched to struts_logic</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <misc-change title="More Javadoc Warnings Removed">
- <explanation>More javadoc warnings were removed from the code base.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="Updated EDG">
- <explanation>Updated Jobs Chapter to provide definition of Job Parameters and Cron Parameters</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- </version>
- <version name="5.3 RC-1" releaseDate="August 12, 2003">
- <comment>Struts 1.1 integration, final bugfixes and performance improvements.</comment>
- <new-feature title="Download Notes">
- <explanation>Download File now has a source-forge-like 'view notes' link in the listings.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="Struts 1.1 Integration">
- <explanation>Use all your favorite struts features, without changing your configuration or controller.</explanation>
- <contributor>Peter Pilgrim</contributor>
- </new-feature>
- <new-feature title="Autodetection of DownloadFile MimeTypes">
- <explanation>Based upon the file name, the DownloadFiles table now auto-detects the mime type for the file.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="InstallLog implementations">
- <explanation>new implementations for InstallLog: ControllerInstallLog, ServletInstallLog, ConsoleInstallLog</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="New Function: State.addRequiredParameter(name,error message)">
- <explanation>Use of this function will cause validation to occur, but unlike State.addParameter() it will verify the regular expression for non-blank string and add to the error collection if it is not present.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <schema-changes>
- <changed-table name="DOWNLOADFILES" class="com.jcorporate.expresso.ext.dbobj.DownloadFiles">
- <newField>[Removed field 'type']</newField>
- <definition>none</definition>
- <explanation>Wasn't really needed thanks to MIMETYPES table.</explanation>
- <contributor>Michael Rimov</contributor>
- </changed-table>
- </schema-changes>
- <api-change title="DBObject.isEmpty() should test only 'real' fields, not virtual fields.">
- <explanation>DBObject.isEmpty() should test only "real" fields, not virtual fields.</explanation>
- <contributor>Larry Hamel</contributor>
- </api-change>
- <api-change title="DBObject.getThisDBObject() is now protected access.">
- <explanation>Use DBObject.newInstance() instead</explanation>
- <contributor>Larry Hamel</contributor>
- </api-change>
- <api-change title="Struts Configuration Internals">
- <explanation>Because of the Struts update to Struts 1.1. Any previous use of struts internals such as configuration manipulation have changed radically. Consult the Struts documentation for further details if you have need of these features.</explanation>
- <contributor>Peter Pilgrim</contributor>
- </api-change>
- <api-change title="<expresso:ErrorMessages /> for displaying errors in login.jsp">
- <explanation>If building your custom login jsps based upon LoginController [or SimpleLogin] the error messages are returned as keys. Use ErrorMessages to provide localized information.</explanation>
- <contributor>Kris Thompson</contributor>
- </api-change>
- <bug-fix title="NextNumberImpl.java multithreading">
- <explanation>use ConcurrentReaderHashMap for efficiency, add sync to initialize</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="DBObject.deleteAll should delete details">
- <explanation>change deleteAll() to iterate through list,
- calling delete for each object so that details
- (dependent records) will also be deleted -- cascading deletes</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="DBObject.deleteDetails should pay attention to empty foreign keys">
- <explanation>Delete details should be smart about looking at details.
- If there is no value in the foreign key, then do not delete all
- the records in the detail table!</explanation>
- <contributor>Larry Hamel</contributor>
- </bug-fix>
- <bug-fix title="App servers not shutting down properly">
- <explanation>The CacheCleaner thread was not properly exiting when it was getting interrupted.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="NPE in DBObject.count">
- <explanation>Fixed NPE that would be thrown if the database was down. Now it throws a more useful exception.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="NPE in DBConnection.disconnect()">
- <explanation>Some databases might throw an NPE when checking for transactional capabilities.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="XML Rendering and ControllerElement attributes.">
- <explanation>ControllerElement attributes weren't getting properly escaped for XML output.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Transition.setParameters() not copying">
- <explanation>Transition.setParameters() was copying the hashtable sent it so that if it was called over multiple transitions, each transition's parameters would get overwriteen</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Race Condition in MimeTypes">
- <explanation>MimeTypes had a race condition for the shared MimetypesFileTypeMap object.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Race condition in DBConnectionPool.getInstance">
- <explanation>Possible multiple creations of DBConnectionPool instances fixed.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Missed FileName field being read only in MediaDBObject">
- <explanation>Now set as readonly so that it doesn't appear in DBMaint</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Fixed Registration password fields not getting masked">
- <explanation>Registration password and password_verify fields were not getting masked in the jsp</explanation>
- <contributor>Michael RImov</contributor>
- </bug-fix>
- <bug-fix title="error tag not picking up session errors">
- <explanation>Errortags were not picking up error messages in Session scope.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="MimeType lookup error in DefaultAutoElement">
- <explanation>Incorrectly setting the wrong attribute type.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="SimpleLogin: Remove 'access denied' error from session.">
- <explanation>If a successful login was achieved, then remove any Globals.ACTION_ERRORS from the session.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBMaintTag incorrect html">
- <explanation>DBMaint tag was generating a spurious tr tag that was unterminated</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="NPE in Component Manager">
- <explanation>Component manager would NPE if there were no components installed on the system.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBOtherMap wasn't working">
- <explanation>Fixed in latest beta.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Two setDBNames() wasn't working.">
- <explanation>setDBName("default") followed by say, setDBName("test") wasn't properly resetting the myPool properly so dbobjects weren't remapping properly.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ArrayIndexOutOfBoundsException in JoinedDataObject">
- <explanation>Fixed error where get primary alias would throw ArrayIndexOutOfBounds if no aliases were defined</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Better error handling in JoinedDataObject.init">
- <explanation>Provided some better error handling if initialization failed in JoinedDataObject</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="NPE in ConfigManager with null LogDir parameter">
- <explanation>LogDir context parameter shouldn't be required. Fixed</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Oracle LOB Support">
- <explanation>Standard JDBC API does not function when BLOBs and CLOBs were over 2K. Fixed using Oracle Extensions.</explanation>
- <contributor>Mike Traum</contributor>
- </bug-fix>
- <bug-fix title="Schema's don't initialize if one schema doesn't exist.">
- <explanation>Fixed error where all schemas may not initialize if one schema class doesn't exist in classpath.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Class Cast Exception on some VMs with some classloaders">
- <explanation>Some vm's and classloaders will throw an exception if you don't cast an interface to an Object before using an Object's methods.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Exception deleting one detail would leave the rest of the detail objects with dangling objects.">
- <explanation>If an exception was thrown deleting a detail object then the rest of the detail objects were skipped. Now the exception is logged and the function attempts to continue.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Master/Detail sets and Defineable objects">
- <explanation>While in DBMaint, if Master/Detail sets have been created and the master is a Defineable object, then it wasn't getting set up for the MasterObject.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="JoinedDataObjects and Master/Detail sets">
- <explanation>JoinedDataobject was incorrectly returning field listings for master detail sets.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="JoinedDataObject and add">
- <explanation>If auto-inc objects were used in the remote objects, then local objects (left table) weren't getting the new autoinc field values.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="JoinedDataObject and DistrinctFields">
- <explanation>Digesting distrinct fields wasn't getting parsed correctly</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ControllerSecurity cache inconsistency">
- <explanation>Controller security cache wasn't getting cleared if the controller security table got modifiied manually [or if user groups were modified]</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Race condition for creating security">
- <explanation>While the results may be the same, multiple database hits might occur when not necessary.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Incorrect cache access counts">
- <explanation>Sometimes increments were occuring twice per retrieve</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Various minor race conditions in UnorderedCache">
- <explanation>Rewrote locking in unordered cache to be strictly correct while still maintaining high performance through read/write locking.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBObjectLimit not resolving dbobject names.">
- <explanation>Was displaying the DBObject i18n key instead of the actual localized string.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <performance-improvement title="Improved FileUtils">
- <explanation>FileUtils had a lot of 'StringTokenizer' use, when a .lastIndexOf() was just as easy to run.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Cached Groups for users">
- <explanation>DefaultUserInfo.getGroups() now caches its results with a 10 minute TTL</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Memory Reduction for MimeTypes autodetection">
- <explanation>Switched to SoftReference for MimetypesFileTypeMap to save on memory.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="DBObject.addToCache() DBObject.retrieveFromCache">
- <explanation>Used pre-calculations to improve performance.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Memory reduction for ISOCountryCodes, ReverseDomainLookups tables">
- <explanation>Switched to WeakReference for ISOCountry codes static data</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Improved DBObject.deleteAll() performance">
- <explanation>deleteAll now erases the recordset by loading each record into memory and reusing dbobjects instead of loading the entire recordset.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Modified Controller Security Caching">
- <explanation>In the past, controller security was cached per user id, while controller security is gauged by group. So the isAllowed() statement has been rewritten to cache by group name instead of user id. While this may result in more cache hits required for a user, it should significantly reduce the number of cache items in memory as well as allow security settings to be shared between users with the same groups. This should result in significant performance improvements when it comes to scaling up to larger numbers of concurrent users. [And take much less memory]</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Optimized locking in UnorderedCache">
- <explanation>Locking scheme changed from straight synchronization to read/write locks.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <performance-improvement title="Increase performance for Maximum size caching">
- <explanation>Now using LRU mechanism for caches with maximum sizes. Allows you to keep the size of the cache down while still making sure the more frequently used items are still in cache.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <misc-change title="New MimeType file types">
- <explanation>Added auto-detection capabilities for .java, .cpp .h .hpp .pl .py files as text/plain</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="More Javadoc warnings removed">
- <explanation>Title says it.</explanation>
- <contributor>Larry Hamel</contributor>
- </misc-change>
- <misc-change title="Update EDG">
- <explanation>Updated DBObject chapter, new DBObject types chapter, and updated Security chapter</explanation>
- <contributor>Larry Hamel</contributor>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="TestController not available">
- <explanation>TestController Link was now removed. It has been officially unused since version 4.0.2</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="ComponentManager not experimental">
- <explanation>Component manager is no longer marked Experimental</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="ControllerResponse.getRequest() made public">
- <explanation>Since ControllerResponse.setRequest was always set before the controller got it anyway. No reason why anybody can't navigate from ControllerResponse to ControllerRequest.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="TableHead tag and Section (508) compliance">
- <explanation>TableHead tag now appropriately sets the scope="col" attribute of the header columns. As mentioned here: http://www.access-board.gov/sec508/guide/1194.22.htm</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="DBMaint tag and Section(508) compliance">
- <explanation>DBMaintTag tag now appropriately sets the scope="row" attribute of the first cell in each row. As mentioned here: http://www.access-board.gov/sec508/guide/1194.22.htm</explanation>
- <contributor/>
- </misc-change>
- <misc-change title="Corrected Unit Test Documentation">
- <explanation>Sample code now compiles correctly.</explanation>
- <contributor>Gabor Nagypal</contributor>
- </misc-change>
- <misc-change title="JBuilder integration docs">
- <explanation>New Jbuilder integration how-to.</explanation>
- <contributor>Kaiyu Lee</contributor>
- </misc-change>
- <misc-change title="Created maximum number of security entries that can be cached.">
- <explanation>Maximum of 500 to prevent memory from getting overwhelmed by these cache entries.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <package-changes>
- <package-update package-name="Struts" version-number="1.1"/>
- </package-changes>
- </version>
- <version name="5.1 ea-2" releaseDate="July 11, 2003">
- <comment>More bugfixes and performance improvements.</comment>
- <new-feature title="ErrorCollection available for XML Rendering">
- <explanation>XML Servlet now renders the ErrorCollection as an errors element.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <bug-fix title="NPE in Dynamic Command">
- <explanation>Fixed an NPE in Dynamic command if insecureDBMaint setup value was not set.</explanation>
- <contributor>Micahael Rimov</contributor>
- </bug-fix>
- <bug-fix title="DBConnectionPool Fixes">
- <explanation>Added time to live for DBConnections so that connections that have been around for a long time get discarded and recycled.</explanation>
- <contributor>Larry Hamel</contributor>
- <contributor>Thierry Clement</contributor>
- </bug-fix>
- <bug-fix title="InfiniteLoop in DBConnectionPool">
- <explanation>Forced a specific maximum limit for looping looking for a connection before a ConnectionPoolException is thrown.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="ArrayIndexOutOfBoundsException in DBObject.count() ">
- <explanation>There was an exception thrown if DBObject.count() was being called on a database object that had no key fields.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="MediaDBObject Missing Constructor">
- <explanation>Fixed a missing constructor for MediaDBObjects.</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <bug-fix title="Read-only empty field validation in DBMaint">
- <explanation>Fixed an error where readonly empty fields were getting flagged as errors. Of course items like that are meant for the programmer to fill in automatically before add()/update()</explanation>
- <contributor>Michael Rimov</contributor>
- </bug-fix>
- <performance-improvement title="Cache TTL">
- <explanation>Most cache items have a custom TTL as defined in the DBObjLimits/Cache Settings table. This significantly reduces memory overhead in the long term A new thread walks the cache every minute to discard non-needed items.</explanation>
- <contributor>Michael Rimov</contributor>
- </performance-improvement>
- <misc-change title="Updated EDG">
- <explanation>Added EDG information for JoinedDataObject, MediaDBObject</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="DBMaint Dynamic Command Refactoring">
- <explanation>Refactored a few lines of code to allow for better derivation and custom initialization in DBMaint.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- <misc-change title="UI improvements in ComponentManager">
- <explanation>Component Manager will now refresh the TOC pane if needed. Now component links will automatically appear/disappear once component installation/uninstallation is complete.</explanation>
- <contributor>Michael Rimov</contributor>
- </misc-change>
- </version>
- <version name="5.1 ea-1" releaseDate="June 17, 2003">
- <comment>Componentization Framework public preview. DataObject API public preview. BLOB capabilities in DBMaint. Refactoring taking place in several areas</comment>
- <schema-changes>
- <changed-table name="DBOBJLIMIT" class="com.jcorporate.expresso.services.dbobj.DBObjLimit">
- <newField>TTL</newField>
- <definition>integer</definition>
- <explanation>Allows for TTL in cache systems to be set when the object is first stored. Provides memory reduction rather than ever growing cache.</explanation>
- <contributor>Michael Rimov</contributor>
- </changed-table>
- <changed-table name="ROW_PERMISSIONS" class="com.jcorporate.expresso.services.dbobj.RowPermissions">
- <newField>ROW_KEY</newField>
- <definition>VARCHAR(180)</definition>
- <explanation>Reduced size of key for InterBase compatibility.</explanation>
- <contributor>Larry Hamel</contributor>
- </changed-table>
- <changed-table name="USERREGISTER" class="com.jcorporate.expresso.ext.dbobj.RegisteredUser">
- <newField>FirstName</newField>
- <definition>VARCHAR(30)</definition>
- <explanation>Added LastName and FirstName fields</explanation>
- <contributor>Sandra Cann</contributor>
- </changed-table>
- <changed-table name="USERREGISTER" class="com.jcorporate.expresso.ext.dbobj.RegisteredUser">
- <newField>LastName</newField>
- <definition>VARCHAR(80)</definition>
- <explanation>Added LastName and FirstName fields</explanation>
- <contributor>Sandra Cann</contributor>
- </changed-table>
- </schema-changes>
- <api-change title="New ErrorCollection methods">
- <explanation>Now the ErrorCollection has the ability to pass in parameters to your errors.
- This allows you to have error messages in the MessageBundle that expect parameters being passed in.</explanation>
- <contributor>Kris Thompson</contributor>
- </api-change>
- <api-change title="Refactored Login Controller into two classes">
- <explanation>Much like how the Registration class is now into two classes so is the Login Controller
- There is the base class, LoginController, this contains no prompt/process methods, this is what folks should extend.
- Then there is the SimpleLoginController, this is the implementation example and the default login controller</explanation>
- <contributor>Kris Thompson</contributor>
- </api-change>
- <api-change title="Removed SecuredDBObject(String) constructor.">
- <explanation>It has been deprecated for over 2 versions. It's usage also had several other problems, and it has thus been removed.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="Removed DBObject.searchAndRetrieve()">
- <explanation>Removed methods that have been deprecated for 2 versions. Use DBObject.searchAndRetrieveLIst() instead for much better performance.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="core.db.TypeMapper">
- <explanation>new TypeMapper class to use instead of Schema. All uses ot type mapping should go through that class instead. </explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="Removed ConfigManager.getProperty() methods.">
- <explanation>ConfigManager.getProperty() has been marked deprecated since Expresso version 4.0. As an ongoing cleanup effort for the code, these methods have been removed.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="DBObject.myPool is now private">
- <explanation>Use .getConnectionPool() instead to get at the mypool instance.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="SecuredDBObject.get/setRequestingUid no longer throws DBException">
- <explanation>These methods never did throw DBException, so now their method signature has been appropriately modified.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <api-change title="com.jcorporate.expresso.core.logging.LogManager is @deprecated and no longer used">
- <explanation>core.logging.LogManager has been replaced by kernel.LogManager which provides several new features like reloadable logging configurations.</explanation>
- <contributor>Michael Rimov</contributor>
- </api-change>
- <new-feature title="BLOB capable DBMaint">
- <explanation>DBMaint can now handle BLOB datatypes and provide for file upload /download capabilities with enhanced capabilities for Media DBOBjecects.</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="Media DBObjects">
- <explanation>Media DBObjects are SecuredDBObject derived classes with addBlobField() methods that also generate housekeeping fields such as file name, file size, and mime types. </explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="Recognize forwards with '.xsl' extension">
- <explanation>Recognize forwards with '.xsl' extension, and send
- the request to the 'xml' forward (by default, XMLViewHandler)
- with the xsl path as a parameter. Thus, forwards for XSL
- processing can be put in the configuration file in the very same way as
- JSP forwards.
- </explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="new method on DBObject - public boolean hasErrors()">
- <explanation>Allows us to check for DBObject field errors without iterating through all fields</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="Component build process">
- <explanation>Created a new a better way to build components like eforum into expresso without
- having to polute the expresso build tree.
- </explanation>
- <contributor>Kris Thompson</contributor>
- </new-feature>
- <new-feature title="Add support for ANSI joins in MultiDBObject">
- <explanation>New methods added - setRightJoin(), setLeftJoin(), setInnerJoin() - to build the
- 'FROM' clause using ANSI join syntax making outer joins possible.
- </explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="Various DBObject enhancements">
- <explanation>Allow case sensitive searches, added 'IN' and 'NOT IN' to denotesRange(),
- allow null parameter for setFieldsToRetrieve() method. This will allow
- a MultiDBObject to include a DBObject for join purposes only e.g. when doing
- a SELECT DISTINCT on a MultiDBObject and you don't want a particular DBOBjects
- fields in the result.
- </explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="Only send changed fields in DBObject through to SQL UPDATE statement">
- <explanation>Amended DataExecutorInterface.update(), overloaded DBObject.update()
- and modified JDBCExecutor.update() to accept a boolean. If 'true', for
- each DBOBject field, added check against DataField.isChanged().
- The SET clause will only include fields for which the return value is true.
- If no fields have changed, the UPDATE will not be done.
- DBOBject.update() calls JDBCExecutor.update(DataObject, boolean) with 'false' by default.
- The implementation of the DefaultDataField.setValue() method was changed so
- that it recognised when a null value was retrieved from the database to enable
- us to tell if the field had been changed.
- </explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="ExpressoLinkTransParamTag">
- <explanation>To help Expresso work better in a cookieless environment it needed a tag to display hrefs for Transitions that have
- parameters associated with them. This tag was also needed because the struts link tag does not allow for nested tags
- which made it impossible to nest the ExpressoTransParmTag within that tag.</explanation>
- <contributor>Kris Thompson</contributor>
- </new-feature>
- <new-feature title="Allow option to append a custom WHERE clause in MultiDBObject">
- <explanation>Overloaded setCustomWhereClause(String, boolean). Setting the boolean to true
- will cause the custom WHERE clause to be appended to that built using calls
- to setForeignKey() and any values in the component DBObjects.
- </explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="Allow ControllerResponse attributes to persist during transitions">
- <explanation>Attributes set via ControllerResponse.setAttribute() will now be copied to the original
- ControllerResponse object when transitioning between states. These attributes
- can now also be accessed in JSP's via extended struts tags (e.g. property="@attributeValue")
- </explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="User.getPrimaryGroup(), implemented as user preference">
- <explanation>User.getPrimaryGroup() is now implemented as a user preference</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="ISOValidValues and Internationalisation">
- <explanation>Introducing a new ISOValidValue class and
- completion ValidValue class. ValidValue has two useful static inner classes for
- sorting collection of these element by value and description. ISOValidValue
- extends the ValidValue class and support canonisation of the description
- attribute using a resource bundle. In other words valid values can be
- internationalised programmatically.
- </explanation>
- <contributor>Peter Pilgrim</contributor>
- </new-feature>
- <new-feature title="BAT file for running Junit">
- <explanation>Now the process of running Junit is even easier then before, simple run the bat file runJunit.bat and Junit starts up with all of the correct parameter values</explanation>
- <contributor>Kris Thompson</contributor>
- </new-feature>
- <new-feature title="ant task for reverse-engineering DBObjects using DBTool">
- <explanation>A new task will create DBObject files for each Table found in a db</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="Added user listener test on regobjs">
- <explanation>This test is intented to test the UserListener for regobjs to ensure that they get deleted when a user is deleted.</explanation>
- <contributor>Kris Thompson</contributor>
- </new-feature>
- <new-feature title="Refactor Registration">
- <explanation>Pushed up the non-prompt/process methods of Registration into an abstract class and created a class called SimpleRegistration which holds all of the prompt/process classes</explanation>
- <contributor>Kris Thompson</contributor>
- </new-feature>
- <new-feature title="Italian Message Bundle">
- <explanation>New Italian Translation.</explanation>
- <contributor>Francesco Galli</contributor>
- </new-feature>
- <new-feature title="logging convenience for controllers">
- <explanation>add getLogger() to Controller to reduce code duplication in subclasses</explanation>
- <contributor>Larry Hamel</contributor>
- </new-feature>
- <new-feature title="Removed Deprecations">
- <explanation>Several calls to deprecated methods were removed</explanation>
- <contributor>Michael Rimov</contributor>
- </new-feature>
- <new-feature title="New ExLink tag functionality">
- <explanation>ExLink tag can now serve as a direct struts replacement with the same methodology as the other extension tags.</explanation>
- <contributor>Malcolm Wise</contributor>
- </new-feature>
- <new-feature title="New ActionMapping capabilities with Struts.">
- <explanation>Modified `perform()' method to add ActionMapping to the
- ServletControllerRequest object. Also added check for an instance
- ServletControllerResponse so that the action forward can be retrieved
- from it if it indeed it was set in a controller state method.</explanation>
- <contributor>Peter Pilgrim</contributor>
- </new-feature>
- <new-feature title="ErrorCollection and ChainedExceptions">
- <explanation>ErrorCollection can now add multiple errors based upon Chained Exceptions. This can allow for easier to read error reporting.</e