1.4 Release Candidate

We are happy to announce a release candidate for eXist version 1.4 is now available for download. The final release should follow soon after, and will supersede the current 1.2 series as the stable branch.

Among many other things, the 1.4 release features:

  • Faster, feature rich full text indexing. This is based on Apache Lucene which has been transparently integrated into the XQuery engine and works well with other modules in eXist, e.g. match highlighting and KWIC display.
  • Support for XProc and easier integration of XForms (via XSLTForms).
  • Documentation - many improvements and additions, including better XQuery function documentation.

However, the most important change of this release is behind the scenes – eXist’s XQuery engine has been redesigned to improve the processing of queries against in-memory documents. This has been the major bottleneck of the 1.2.x series; Experience shows that many applications will benefit from the newly redesigned core. Additionally there have been many small optimizations to the query engine, thus enabling eXist to further optimise its use of indexes or avoid unnecessary steps when evaluating positional predicates.

Please have a look at the Upgrade Guide before installing the new version. N.B. –Several important default settings have changed!

eXist 1.2.6 Maintenance Release

eXist 1.2.6 is another maintenance release, containing fixes for critical stability issues we found while working on the 1.3 branch. Important changes include:

  • automatic document defragmentation could have unpredictable results if nodes were updated during a query
  • Java service wrapper sometimes killed eXist too early, causing corruptions in the db (see )
  • fixed db corruption after crash recovery
  • query optimizer in some cases failed to analyze called functions, thus causing bad performance
  • fixed evaluation of positional predicates with a //n abbreviated step (which translates to /desendant-or-self::node()/n)

Like all releases in the 1.2.x series, eXist 1.2.6 is not meant to introduce new features (those are reserved for 1.3/1.4). The only new feature in 1.2.6 is support for incremental backups.

I will now continue to wrap up 1.3. We still lack documentation and there are a few regressions to fix before 1.3 can be handed out.

Java Service Wrapper Issues

I recently had some problems with a Windows server running eXist trunk as a service. The service restarted a few times during the day (mainly due to memory issues which have been fixed since then). However, eXist did not get online again after the first restart. What happened?

The Java service wrapper has a timeout: when launching a new JVM, it will only wait for a certain time for the newly started process to respond. If it doesn't respond within that timeframe, the wrapper will assume that something went wrong and kills the process. It then starts the next attempt.

Now, during the first restart, eXist detected that it wasn't terminated cleanly. It thus triggered a recovery run, which also involved a reindex. This all happened within the service startup method, and since the reindex took longer than 60 seconds, the service wrapper timed out and killed eXist. During the next restart, eXist would again start the recovery - and get killed again! The wrapper never gave it enough time to get up. Even worse, crashing eXist during the recovery phase can cause serious damage to the database files.

We have now introduced a callback mechanism which can be used by the service wrapper to communicate with eXist. eXist will periodically send a signal to the wrapper while it's starting up or shutting down. The wrapper will extend its timeouts accordingly.

The required changes are available in SVN trunk and have also been ported back to the eXist-stable-1.2 branch (which is the basis of all 1.2.x releases). If you experience corruptions after a service restart, please consider an update. We are also thinking about a 1.2.6 release.

TwitterReader.jpg

Kurt Cagle today published an article on DevX.com: "From Social to Serious: Combining Twitter and RESTful Web Services". Using the implementation of a twitter reader as an example, the article demonstrates how to build a RESTful data application. It covers many topics along the way, including request routing and XProc.

Note: if you are using the trunk version of eXist, you may want to look at XQueryURLRewrite, which is the successor of the RedirectorServlet used by Kurt.

Dashboards with XQuery

picture1.jpg

IBM Developerworks today has an article on "Making Dashboards with XQuery".

It uses eXist and provides a nice example of how to access external website data to create a mashup in XQuery. Source code is available as a starting point for your own experiments, though it is not optimized for speed in any way. Note: you may want to test this with eXist trunk, not 1.2.5 (processing in-memory fragments works much faster with trunk).

P.S.: also check Chris Wallace's article on "Dashboards and Widgets in XQuery"