Expresso History of Changes

Check back to this document with each release for a summary of change history.   

We always welcome to your feedback and ideas for changes in upcoming releases.

 

 

 

 

 

Content Topics
Expresso 2.0
Expresso 1.06
Expresso 1.05
Expresso 1.04
Expresso 1.03
Expresso 1.02
Expresso 1.0
Expresso 1.03b
Expresso 1.02b

Expresso Framework 2.0ea

This release denotes a major functional upgrade for Expresso, and a large number of minor enhancements. It is a full-number release as the basic setup and configuration of Expresso are now different from previous releases, and care must be taken when upgrading from any 1.x release to 2.00ea. As the release number indicates, this is still an early-access release, and although considerable QA has been done even before the early access, it is
expected that a number of smaller releases will happen before release 2 is considered fully production-ready.

See http:\\www.javacorporate.com/components/expresso/doc/release.html for the full release notes.

Multiple Database Support

The major change in release 2.00ea is complete inclusion of multiple database support. Put simply, this enables Expresso (and any application built with it) to support multiple, independant "environments", where each environment as a separate database. This database can be a separate database within the same server (e.g. 2 different MySQL databases on one server), or a completely different kind of database on the same or another server (e.g. one MySQL database on Linux, one DB2 database on AS/400). These multiple environments can be accessed by a single instance of Expresso, but remain otherwise separated. The configuration directory must now contain a separate file for each environment/database. There must exist at least one file in the configuration directory called "default.properties". This is identical to the existing Expresso configuration file, and contains and supports all the same properties (plus a few new ones added in this release). There may then be any number of additional property files, each of which denotes another database available to this instance of Expresso. For example, you might have a property file called "oracle.properties" which specifies an environment/database called "oracle", which presumably would contain the appropriate property entries to connect to an Oracle server.

When logging in, the Login servlet will now present a list of the available environments for the user to choose from.

The ability to support multiple databases also required the ability to support completely different sets of configuration data for those databases - as a result the ConfigManager object has undergone considerable enhancements that allow it to manage multiple configurations - one for each property file found in the config directory.

The JobHandler and other standalone java applications that are part of Expresso have also been enhanced to use the configDir parameter, and to take an optional "db" parameter to indicate that they are to operate on something other than the default database. So, each database has it's own independant JobHandler, operating in parallel. They may, as before, operate on any server (not necessarily the same one as the servlet engine).

Logging Channels

Logging has been enhanced considerably, with the inclusion of a new object called a LogChannel. LogChannels allow a specific kind of logging to be grouped together into a "channel", and this channel supports a simplified syntax for writing log messages (as well as supporting multiple databases, which the previous LogHandler did not).

All major objects (DBOBjects, Transactions, and DBServlets) now have by default 3 logging channels available to them, called "log", "error" and "warning". A new Transaction object view viewing the logs is in the works to make retrieving log entries by channel and level easier.

Cascading Stylesheets

This release also incorporates the changes contributed to enable Expresso to utilize Cascading Stylesheets, enabling the look & feel of Expresso to be changed quickly and easily. More documentation on using CSS with Expresso is available at /components/expresso/doc/html.html. The changes to support CSS involve virtually all of the "com.Jcorporate.common.html" package (including some other enhancements to that package, particularly the addition of the Radio object and improvements to the Checkbox object), and changes in the "com.Jcorporate.common.servlet" and "com.Jcorporate.common.commands" packages.

HTML/JSP Changes

A number of bad links and other problems were corrected in the HTML and JSP pages for Expresso, and many of the HTML pages in /components/expresso have now been replaced by JSP pages. The initial administrative page for Expresso is now /components/expresso/frame.jsp, rather than the previous /components/expresso/frame.html.

A new property in the property file now allows a different "servlet prefix" to be used with Expresso - previously all servlets in Expresso had to be registered as "/servlet/etc" (e.g. /servlet/Login, /servlet/DBCreate, etc). This prefix can now be set by using a property file entry called "prefix", e.g. "prefix=/servlet" would retain the previous setting of "/servlet". This property is required, and should be added to your default.properties file.


Startup (DefaultInit and InitServletProps servlets)

A common difficulty with previous releases of Expresso was getting the database configuration and properties correct to ensure a connection to the appropriate database, and ensuring that the DefaultInit servlet (which initializes the ConfigManager) was starting up correctly. The logging and messages involved in this process have been greatly improved, and it is easier to track and resolve configuration file entry problems than previously. In addition, the InitServletProps servlet (which displays the data read by the DefaultInit servlet on startup from the property file(s)) now supports the multiple database/environment capabilities, displaying each environment's config properties seperately.

System Requirements

This latest version of Expresso requires at least the 2.1 version of the Servlet API be supported by your servlet engine, and Java 2 (aka JDK 1.2 is recommended, but not yet required. We expect the final release of Expresso 2 to require support for JDBC 2.0 in order to support the new datatypes supported by this standard.

Documentation Updates

New documentation and updates to existing documentation are also included in this release. Specifically, better examples of Expresso configuration with different database engines (InstantDB, Oracle, etc), and servlet configuration for different servlet engines are included (such as iPlanet and Weblogic).

Binary Code

The Expresso source code download now includes the .class files for all corresponding .java files. It should not be necessary to recompile your new release of Expresso. In addition, the HTML/JSP download now includes additional reference files and examples.

Security Changes

All password stored in the database are now encoded, whereas previously they were stored in plain text. Existing passwords will be converted the first time they are used. (Many thanks to Mike Rimov for this update and many others!)

Expresso Framework 1.06

Release 1.06 includes a number of other bug fixes and some fairly major enhancements. A quick summary include:

  • Date/Time Handling: Now fully configurable via properties for specificdatabases
  • Failsafe Connection Pooling: Optional verification of connections before they are distributed by the connection pool
  • Transaction "Blocks": For grouping together of related inputs, outputs, and actions in Transaction objects
  • Job Object enhancements: Making background/queued jobs easier to write than before
  • Database Wildcards: Making database wild-card characters also fully configurable
  • Internationalization: Local language support has been further enhanced in this release.
  • JSDK2.0 Support Package: The JSDK2.0 package has also had some corrections, and a new version of this package is available for download. You only require this package if you're using a servlet engine that does not support the 2.1 or higher Servlet API.

Expresso Framework 1.05

Expresso 1.05 includes significant enhancements to it's documentation and HTML files, designed to make it easier to setup, install and use. The enhanced dococumentation includes sections specific to popular servlet engines, such as Apache's JServ, JRun, and Orion. This release includes the following enhancements:

Database Objects

  • Database Objects are Expresso's relational/object mapping and persistance facility - this release improves
  • Database Objects with internal caching (for better performance on frequently-read objects), without many of the problems typically related to caching - such as the problem of using "stale"
  • versions of an object in memory. In addition, complete support for type-mapping now allows database objects
  • to be used with virtually any JDBC-compliant database without requiring any custom coding.

Transactions

  • Expresso's facility for creating the "controller" portion of the MVC architechture is the "Transaction" object. Functioning in a way very similar to a finite-state machine, Transactions are interface-independant, meaning they can be used with servlets, applets, applications, or any other UI-layer (RF terminals, voice I/O, etc), without requiring changes to the application logic.
  • The transaction facility has been enhanced with better JSP support and improved error handling and performance. Transactions work extremely well with JSP's, and a good example of this is the eForum application - an open source collaboration/discussion component available for download from our site.

Servlet API 2.0 Support

  • While Expresso takes full advantage of the enhancements to the Servlet API version 2.1, new contributions have made using Expresso's latest facilities with a servlet engine which supports only version 2.0 of the API practical as well (such as Apache's JServ). This support can be enabled via a properties file attribute, described in the enhanced installation documentation.

Exceptions and Error Tracing

  • A new "Chained" exception model is used to allow better error and exception tracing, making it easier than ever to debug your Expresso applications.

User Preference Support

  • A new standard database object provides support to applications for User Preferences - settings that are retained for a specific user to customize their interaction with an application. An example of these preferences being used in an application can be seen in eForum.

Expresso Framework 1.04

The HTML/JSP & Javadoc downloads have also been updated to match 1.04. Some of the highlights from the release notes for 1.04 are:

Database Objects

  • DBObjects now don't require a DBConnection to be passed to them in their constructor - they can acquire a connection from the connection pool as they require it. This greatly simplifies basic access to the database, while still leaving the option of using a single connection where this is required.
  • A count() method for getting a count of rows matching a query without actually having to retrieve the rows themselves.
  • Quoting issues addressed.

Transactions Package

  • Various improvements to the Transaction and DBTransaction classes have been made for greater functionality, including improvements and better error handling in TrxActionServlet, especially for use with JSP pages.

Other Enhancements

  • Security Group Nesting: Security groups can now be "nested", allowing large user communities to be administered much more easily than previously.
  • Security is entirely cached now, for transaction and dbobjects. This enhances overall performance of applications built with Expresso considerably by reducing the number of database accesses required.
  • Enhanced handling of connection pooling when under high load - the connection pool will now recover faster from a "pool full" situation as connections are released or reclaimed.
  • New "experimental" objects contributed for multi-table queries, natural language queries, and other advanced database functions
  • A new UserPreference database object - this object can be used by Expresso application to store user-specific settings for customizing the user's experience with an application.
  • Security problems now throw a SecurityException rather than a DBException of TrxException. This allows them to be handled seperately, and a better message to be displayed.
  • Logging and Event emails are now background tasks.
  • Improvements to Cookie handling - cookie persistance has been improved.

Database Changes

  • Some database edits (all new fields) are required to existing Expresso databases in order to run the new version - the easiest way to make sure your database is in sync is to use the DBTool program to run a "verify" on all database objects - this logs all discrepancies between the database object definition and the physical database.

Related Projects

  • A number of related projects have been started using Expresso: Expresso XML, providing XML import/export capability to DBObjects, eForum, a collaboration tool based around a forum and shared documents, and eSearch, an intelligent search engine capable of searching much more than text and HTML files (e.g. databases, document archives, URL's, etc).

Expresso Framework 1.03

The license is now an Apache Style license.

1.03 extends Expresso's existing capabilities with enhanced performance in several key areas, and provides new capabilities for extensibility.

Performance is increased through the use of advanced caching, with automatic updates triggered by database changes, ensuring that no "stale" cached data is ever used by the application. In addition, several key tasks such as logging and event notification have been made aynchronous - e.g. the user does not wait for them to complete before going on with the functions of the application.

One of the most productive aspects of Expresso is it's ability to rapidly map a relational database to objects, and then to provide instant ability to perform normal maintenance tasks (e.g. add/update/delete/search)on these objects. This function has been greatly expanded (thanks to input from our developer community) to allow complete customization of these database maintenance servlets. Custom forms can be used, custom queries and updates executed on the database, all without re-writing any "default" functionality. You can now extend database maintenance capabilities "by exception", only programming where you need to, and never having to alter existing core capability that impedes your abilities to make use of the next update.

A number of other small corrections and enhancements have also been made, too numerous to mention here, but detailed further in the release notes available on our web site.

1.03 is also the first release of Expresso to include examples of using Expresso with JSP pages, now very well supported by Expresso and it's Transaction objects.

In the near future, more detailed documentation and a streamlined installation process will make Expresso's capabilities even more accessable.

Expresso Framework 1.02

This release has a number of enhancements; in general they are:

Transaction package:

The com.Jcorporate.trx package has been upgraded from it's "early-release" state to a fully usable set of components. This package is particularly helpful in JSP development, please see the "User Documentation" link on the Expresso project home page for details.

Logs:

The system log for Expresso is now stored in a database table, rather than a series of flat files. This solves some concurrency and scaling problems, as well as allowing the log to be searched and filtered much more easily.

Documentation:

A number of updates have been made to the documentation, both on-site and the documentation bundle included with the Expresso HTML. We expect to be adding to this documentation frequently, so please check the site for updates.

New installation instructions based on the changes to configuration have been supplied, along with initial documentation for the new "Transaction"package.

Also included is a document describing how to set up an automated build system for Expresso using the Apache "Ant" build tool.

The configuration process for this new release is quite different from the previous one - please check the new install instructions for the details.

Expresso Framework 1.0 (no longer beta)

This release has a number of enhancements; in general they are:

  • "com.Jcorporate.trx" package: This new package contains the "Transaction" objects, server-side objects specifically made to interact with servlets, JSP, or applets/applications in the same way. A Transaction has "state", and each new state results in a number of "input", "output" and "action" items. There are a number of examples of transactions in use on the Jcorporate site, and more will be coming. The best example of Transactions being used is the new "Administer Database Security" function on the Security page.
  • "Library" orientation: We've made a number of changes to Expresso to make it more usable as a component library, removing dependencies that prevented using one part of Expresso without using the others. DBConnectionPool, for example, is now usable by itself without any other portions of Expresso.
  • Bug fixes: Again, the details are on the site. Our thanks go out to the many people who've helped make this new release so solid & well-tested through their bug reports and assistance in correcting them.
  • There's also a new Guided Tour for Expresso that shows the new facilities on the site.

More specifically this release changes include:

com/Jcorporate/db

  • DBConnection: Explicitly clear statement and connection between operations
  • DBConnectionPool: Changes to make DBConnectionPool more portable & generally applicable, with less dependencies on the rest of Expresso:
    • Moved getValue methods for accessing setup/config values into the Setup object in the com.Jcorporate.common.dbobj package.
    • Removed dependence on Log object.
    • Move getGroups method to the com.Jcorporate.common.dbobj.User object.

com/Jcorporate/dbobj

DBObject: Verify that object is initialized before allowing other operations.


com/Jcorporate/common

JavaCorpSchema: Object moved from dbobj package to this


com/Jcorporate/common/dbobj

  • DBObjLimit: Modify to load default schema dynamically (like all other schemas) to avoid circular object references
  • DBObjSecurity: Modify to load default schema dynamically (like all other schemas) to avoid circular object references
  • Event: Changes to refer to Setup object rather than DBConnectionPool for setup values
  • Setup: Added static methods to transfer getValue and related methods from DBConnectionPool to this object

com/Jcorporate/common/server

  • DBTool: Add import to refer to new location of standard schema object
  • HealthCheck, Job, JobHandler: Changes to refer to Setup object rather than DBConnectionPool for setup values

com/Jcorporate/common/servlet

  • DBCreate: Refer to new standard schema location, create entries for Admin access to all servlets via TrxSecurity
  • DBServlet: Changes to reflect some changed object names, use TrxSecurity capabilities
  • RegisterUser: Change title to "Community User Registration", use Setup object rather than DBConnectionPool
  • RunSQL, ClearLogs: Implement getTitle method
  • SendNotice: Correct title, implement getTitle method Status, StartServer, ShowLog: Added getTitle method to return title to security system. Use Setup object rather than DBConnectionPool to access setup values
  • StdServlet: Added getTitle method to return a title for the servlet to the security layer. Modified getServletName to not interfere with new standard method of this name. Handle bug with passing query string in JWS (see postings on mailing list)
  • Test: Changes to refer to Setup object rather than DBConnectionPool for setup values TrxServlet: Use description of the current state as a page heading

com/Jcorporate/common/util

Log, EMailAuthenticator: Use Setup rather than DBConnectionPool object for access to setup values

Expresso 1.03b

  1. A new object DBTool has been added to the com.Jcorporate.common.server package. See the JavaDoc and the usage message from DBTool for more details - a specific document for this tool is under construction for the next release.This DBTool contains useful utilities for manipulating database objects, including:
    • Generate code for a database object from information contained in the database
    • Run referential integrity tests on all known database objects
    • Import data for one or all database objects from text files. (Tab-delimited currently, XML support coming next release)
    • Export data from one or all database objects into text files.
  2. The DBException exception now has a separate field for the actual message returned by the database driver, separating it from the message of the DBException thrown by the application. This allows database message mapping, a new feature.
  3. Support has been added for redefining the database data type used for the "datetime" fields in database objects. The DBCreate servlet has a new parameter to support this mapping, discussed below.   
  4. A bug that could cause setup values to be read before the setup cache was initialized has been corrected. 
  5. The Log object now throws a specific exception (LogException) if it is unable to write logged messages. New methods have been added to allow non-verified writes to the log (e.g. a write that will not throw an exception if it fails, for use in error-trapping routines). 
  6. Support for defining a "lookup object" for any field in a database object has been added. The default database maintenance servlet (DBMaintServlet) uses this object to provide a "lookup" link - for example, if the field is a customer number, the lookup link might allow the user to search the customer data. 
  7. Read-only database fields are now supported correctly (useful for fields like last update timestamps, or auto-generated next number fields). 
  8. All field and table names are now 18 characters or less, conforming to the maximum name size for the DB2 database. 
  9. Support for a new table (DBOBJLIMIT) has been added - this table allows a "limit" to be defined for any database object. When the default maintenance servlet is used to list or search records, only this many records will be returned at a maximum, and a warning will be issued to the user if there are more than that many records. This prevents "runaway" queries where the user asks for a complete list of thousands of records. 
  10. Support for "virtual" fields has been added to Database objects - a virtual field is not actually stored in the database (e.g. a total or computed field). 
  11. The servlet and database object for self-registration of new users have been added to the core Expresso package - they were previously in a separate custom package for the Jcorporate website.
  12. The table name APPLICATIONSECURITY has been changed to APPSECURITY. This must be changed on existing Expresso databases when the new version is installed.
  13. The DownloadLog database object now has a different primary key - previously the table recorded only a single record for every user/file downloaded combination. Now, a new record is inserted for every download and the name of the file downloaded is recorded in the table as well.
  14. The com.Jcorporate.common.html package now includes Break, List and ListItem HTML objects. 
  15. The SendNotice servlet now queues it's job for background processing, rather than performing it's function immediately. This supports larger numbers of users receiving the notifications without timing out. 
  16. The TimerServer object, which is run on the server side to handle jobs that are queued for processing, now has a "test" argument. When the "test" argument is specified on the command line, the timer server object runs a verify routine on every database object in every schema registered with the system. This verify routine selects each record in the target table & checks the referential integrity for the record. It is a quick way of exercising newly created database objects to ensure they are operational, as well as validating the data for existing tables. 
  17. A new servlet, "TrxServlet" has been added to support the new Transaction objects being developed. This servlet is not yet complete. More about this in 1.04b! 
  18. All servlets now take "named" arguments, e.g. arguments are now specified as name/value pairs, rather than being positional. See the JavaDoc and the sample HTML for examples. 
  19. Logging has been improved substantially, and exceptions are now logged complete with the exception stacktrace.

Expresso 1.02b

In each of the directories of the download there is now a file entitled "CHANGES" that summarizes the changes made to each of the files in that directory since last release. Some of the changes in this release are:

com.Jcorporate.common.util:

  • Log did not log the object name into the servlet log when servlet contexts were used. Corrected.

com.Jcorporate.common.servlet:

  • Changed all servlets that used requiredLogin method of DBServlet to use
  • new method: uses HTTP redirect to refer user to the login page when a login is required.
  • ChangePassword: Centered button on form
  • DBCreate: Now calls "otherSetup" method on each schema object for any additional setup required by that schema
  • DBServlet: Removed Log entry that logged the session ID: This is a potential security hole
  • Download: Added display of file size to list of files when downloading
  • Login: Corrected a bug causing a nullpointerexception when loggin in with a bad password
  • Status: Handle correctly the case of a user not logged in requesting status

com.Jcorporate.common.server:

  • HealthCheck: Removed obsolete references, brought up to date with changes to DBConnection object

com.Jcorporate.common.html:

  • Heading: Added setAlignment method
  • ReportPage: Changed parameters to be a Hashtable, not a Vector
  • Added getTitle method
  • ReportPageParam: New object
  • Table: Corrected bug in setVerticalAlignment method

com.Jcorporate.common.dbobj:

  • Changed all objects so that their no-argument constructor may throw
  • DBException to agree with change to generic DBObject. This corrects the bug that a dynamic load of a DBObject could fail silently (with only an error written to the log).
  • Setup: Check if connection pool is intialized before calling updateSetup - corrects error encountered at end of the DBCreate process.
  • User: Increased EMail database field length to 80 characters: NOTE: Existing database tables must be updated to reflect this change!

com.Jcorporate.common.db:

  • DBConnection: Added close() method calls to correct problem encountered with Oracle database drivers
  • DBConnectionPool: Improved error messages
  • Added "isInitialized()" method for objects to determine if pool is ready
  • Check if setup cache not initialized before requesting value com.Jcorporate.common.dbobj:
  • DBObject: Corrected constructor for FieldUpate inner class - standard Javac compiler did not detect this, but IBM Jikes compiler did.
  • Added throws DBException to no-args constructor. Corrects potential problem of object initialize failing silently.
  • Schema: Added otherSetup method for schemas to perform application-specific setup functions
  • SecuredDBObject: Changed constructor to throw DBExeception - to match DBObject change.

Top of Page


Home | Products | Services | Partners | Customers | About Us | Login | Forums | Contact Us

Copyright © 2001 Jcorporate Ltd. All rights reserved. Copyright Privacy

Last Modified: 26-Apr-01