Gnomon
HomeDownloadManualXML/XSLT LinksContact us
Gnomon 1.1

Gnomon 1.1 is a significant improvement over the 1.0 series adding a number of new features and correcting a number of bugs. The detailed changes are entered into bugzilla (query for all bugs in gnomon 1.0.2) and the highlights are given below. All of the new features are fully documented in the manual.

New features

Updated to use Xalan 1.8 and Xerces 2.5 (from Xalan 1.6 and Xerces 2.3 respectively). See the Xerces home page and the the Xalan home page for more information.

Performance counters accessible via Windows' Performance monitor. These are useful for performance tuning and seeing what the server is doing. (They are also just fun to watch whilst you are stress testing web applications!). The available counters and usage for tuning is documented in the manual. (Bugzilla entry).

Gnomon can now handle higher levels of stress. A new queueing system has been implemented to address the issue of too many concurrent requests using up too much server memory (bugzilla entry). Gnomon also detects when clients have disconnected before embarking on lengthy operations which improves server responsiveness (bugzilla entry). If the queue length is exceeded then gnomon will return a server too busy response (as per usual IIS behaviour).

Custom error handlers can be provided for all gnomon errors. These can access error documents via a file, a redirect to a URI, an HTTP GET from a URI with the response forwarded to the client, and an HTTP POST to a URI with full details of the errors encountered. The latter feature is excellent for logging and alerting errors. A forthcoming article will give a sample implementation of a custom error handler. (Bugzilla entry).

A new configuration file option (warnings-as-errors) has been added to allow viewing the warning stream from the XSLT processor. Previously these errors were silently discarded (as they do not result in transformation failure). However the warning stream can be useful during development. (Bugzilla entry).

It is now possible to set a timeout on the HTTP requests made by gnomon. This is useful for preventing requests from hanging if you are accessing resources from an external server. (Bugzilla entry).

It is now possible to tune the size of the thread pool, the maximum number of concurrent requests to be processed, and the length of the backlog queue. See the performance tuning section in the manual. (Bugzilla entry).

It is now possible to limit the amount of POST data that gnomon will process (the default is 5Mb). This prevents a potential denial of service attack. For full details, see the manual. It is recommended that this protection is combined with an ISAPI filter such as URLScan, which will also protect other ISAPI extensions such as ASP or ASP.NET. (Bugzilla entry).

Stylesheet construction now uses an 'everyone waits' rather than an 'everyone compiles' methodology. This prevents the server's CPU from being swamped by excessive stylesheet compiles when it is started and brought back into a busy load balanced farm, for example. (Bugzilla entry). Stylesheets are now also by default read from disk. This speeds up compilation times by about 30% where many additional resources are included. This option is the default but the old behaviour can be retained by setting the appropriate option in the gnomon.config. (Bugzilla entry).

Gnomon now sets the charset parameter and mime-type parameters correctly (as specified by the xsl:output directive in the stylesheet) in the Content-type header that it produces. This helps browsers by not having to rely on the old <meta http-equiv="Content-type"> directive, and also allows you to transform to text/xml or text/plain if desired. (Bugzilla entry).

Gnomon now employs IIS to send the headers for the HTTP response. This ensures that gnomon interacts properly with any SF_REQ_SEND_RESPONSE_HEADER filters or any filters that use AddResponseHeaders. Previously any headers added by either method were discarded. (Bugzilla entry).

Gnomon has a new html tidy based extension that can loosely parse html and produce an XML DOM that can be operated on with XSLT. This is very handy for working with legacy documents. (Bugzilla entry).

Bugs addressed

Gnomon no longer reports each XML/XSLT error twice. (Bugzilla entry).

The session extension/object could cause an access violation when using For Each under a particular combination of session entries. (Bugzilla entry).

The session extension/object now fully support SQL server including version 7. There is a bug in either the Microsoft or Oracle OLEDB provider; they differ about who releases an ISequentialStream interface. This bug is worked around by detecting the provider type at runtime and doing the reference counting appropriately. (Bugzilla entry). It is also now possible to use getdate() rather than getutcdate() for timeout handling. getutcdate() is not supported on versions of SQL Server below 2000. (Bugzilla entry).

It is now possible to disable automatic new sessions and handling of session timeouts in the session object/extension. This is useful if you handle session timeout elsewhere (we do it with a custom ISAPI filter for authentication and web resource security). (Bugzilla entry).

A potential crash was fixed when fetching objects via HTTP. This could occur under certain error circumstances where a message was missed from the CHTTP (asynchronous IOCP based HTTP request class). This message would be delivered to the CRequest object, that by that time had gone away. We now wait for the request to completely finish (when it is guaranteed that no more messages will be provided) before processing the results. (Bugzilla entry).

The gnomon code has been tidied up, split into more files and better documentation (in the form of comments, most of them javadoc/doxygen compatible) has been added. This makes the code much easier to navigate. (Bugzilla entry).