|
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!)
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 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.
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).
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.
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.
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
- 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.
- 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.
- 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.
- A bug that could cause setup values to be
read before the setup cache was initialized
has been corrected.
- 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).
- 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.
- Read-only database fields are now supported
correctly (useful for fields like last update
timestamps, or auto-generated next number
fields).
- All field and table names are now 18 characters
or less, conforming to the maximum name size
for the DB2 database.
- 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.
- 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).
- 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.
- The table name APPLICATIONSECURITY has been
changed to APPSECURITY. This must be changed
on existing Expresso databases when the new
version is installed.
- 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.
- The com.Jcorporate.common.html package now
includes Break, List and ListItem HTML objects.
- 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.
- 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.
- 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!
- 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.
- Logging has been improved substantially,
and exceptions are now logged complete with
the exception stacktrace.
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.
|