eXist-db 5.3.0

eXist-db 5.3.0 Release Notes

It’s been quite a while since the last release. A lot has been happening behind the scenes, and we are happy to share the outcome with you.

This release is binary compatible with eXist-db 5.2.0.

Breaking changes

  • Before upgrading an eXist 5.2.0 or earlier system to eXist 5.3.0 (or as soon as possible after upgrading), be sure to upgrade existdb-packageservice to the latest release, version 1.3.13 or higher. Since Dashboard relies on this library for all package-related operations, this upgrade must be performed outside Dashboard. To upgrade this package outside of Dashboard, either submit the following query to eXist via eXide or the Java Admin Client as an admin user:

```xquery xquery version "3.1";

repo:remove("http://exist-db.org/apps/existdb-packageservice"), repo:install-and-deploy("http://exist-db.org/apps/existdb-packageservice", "http://exist-db.org/exist/apps/public-repo/find") ```

  • The shared resources and markdown packages are no longer bundled with eXist-db. If your application depends on those you can still declare dependencies on them in your package metadata and download them from the package repository.
  • eXide’s app generator function has been removed from eXide v3.0.0, as part of important improvements to the application. For generating apps, please use the much better yeoman-based generator-exist tool.
  • Dashboard v2.0.8 has a known issue that can cause requests a 404 error to appear after logging in to the administrative section. Until a permanent fix has been discovered, you can clear the affected browser of this problem by logging out and back in via eXide or Monex.
  • The default eXist-db configuration settings are not production ready. Make sure to consult our article on best practices before making your eXist-db instance publicly available. The new existdb-config project implements these "best practices" and can easily be used to harden your eXist-db(s) from version 5.1.1 till 5.3.0.

Highlights

XQuery 3.1 compatibility

  • Improved handling of the XQuery type system - #3363, #3266, #3728, #3791
  • Function types are now allowed as values in context item expressions
  • Duplicate functions will reliably throw a useful error
  • Root context is shielded from user defined functions
  • Several fixes for positional predicates
  • When errors are thrown in XQuery most of them will now have useful location information
  • Fixed parser issues to allow empty function body, and allow || in attribute and element content
  • Allow other seed types in fn:random-number-generator (like dates) - #3072
  • Fixed the cardinality of fn:random-number-generator#1 - #3249
  • Improved fn:format-number - #3348
  • Made fn:collection spec compliant - #3349
  • Allow sequences for batch deletions in map:remove and array:remove - #3328, #3692

New functions added

Other enhancements

  • Module handling and caching was improved significantly
  • Both controller.xq and controller.xql are now recognized in apps that use eXist's URL Rewriting facility, to conform with the community convention of .xq for main modules and .xqm for library modules.
  • The implementation of maps was changed to gain performance
  • Allow Bearer tokens and other schemes than "Basic" in Authentication header
  • Allow HTTP verb PATCH
  • Custom base64 handling code was replaced with apache.commons code and a new function util:base64-encode-url-safe was added
  • Enhanced util:eval to preserve the original error information
  • In Lucene, you can now use different analyzers for indexing and querying

Bundled apps

  • All bundled applications have their frontend dependencies updated.
  • The index view in monex now lists new fields and facets - #124.
  • See the next section which lists several issues affecting apps included in the eXist 5.3.0 distribution.

Licensing

A lot of effort was poured into getting eXist-db’s source code licensed properly. It is now consistently LGPL 2.1, with exceptions where code from other projects is used with their permission.

Features

  • change packages bundled with eXist-db - #3939
  • Backport of sql:close-connection from FusionDB - #3890
  • Connection Pooling for SQL Module - #3831
  • Replace Bintray URLs with GitHub Releases - #3844
  • Add Code Coverage - #3341
  • Import repo logging - #3814
  • Look for controller.xq before controller.xql - #3757
  • add support for HTTP PATCH - #3745
  • Remove timeout on Compiled XQuery Pool - #3721
  • Remove jQuery - #3715
  • Add useful switches in the readme - #3710
  • Broker pool service api - #3705
  • Improve backup-ui dialog flow - #3678
  • wrap file stream writes into BufferedOutputStreams - #3687
  • Make servlets pluggable - #3671
  • Add sonarcloud - #3654
  • Implement fn:document-uri#0 - #3644
  • Feature/add missing fn:trace - #3597
  • Add a parameter to util:eval to preserve the original error message - #3588
  • Enable conf.xml option document/@use-path-locks - #3603
  • Implement array:sort - #3596
  • Add details of where to find the XAR source-code - #3593
  • fn:replace and fn:analyze-string are now implemented with Saxon - #3530
  • add util:base64-encode-url-safe - #3544
  • Add a caller attribute to the output of system:get-running-xqueries#0 - #3527
  • support match highlighting on ft:field hits - #3423
  • Offer further build profiles - #3386
  • Update collection.xconf.xsd for eXist 5 - #3379
  • Improve XQuery test naming - #3368
  • Add memory and nr of processors information to startup log. - #3335
  • Group managers are loaded from security database at startup - #3332
  • Allow disabling building of the IzPack installer - #3326
  • A more performant implementation of immutable maps - #1520
  • Make builds runtime compatible with Java 8 when built on JDK9+ - #3320
  • Switch to nonblocking free ids processing algorithms - #3291
  • Make Quartz Scheduler properties easily configurable - #3274
  • Multiple resources can have their permissions set in the JAC - #3263
  • Include the path of any file that could not be restored in the log - #3268
  • Switch README.md link for JDK from Oracle to AdoptOpenJDK - #3260
  • distinct analyzers for indexing and querying with Lucene - #3227
  • Implement fn:xml-to-json() - #3141
  • Update IntelliJ config for 5.3.0-SNAPSHOT - #3232
  • Pass args to release plugin - #3223

Fixes

  • Further tests for Cache Module and a small NPE avoidance fix - #3935
  • include templating in installer and tests - #3941
  • add Java16 to build matrix and allow failures - #3921
  • Cleanup all module contexts - #3897
  • Fix arity in XQuery error when there are duplicate functions in a main module - #3910
  • Block creation of collection by guest - #3899
  • Very Small fixes - #3908
  • throw error in repo:get-resource if file does not exist - #3896
  • Further attempt to get Coveralls plugin working - #3894
  • Specify the COVERALLS_TOKEN in the correct way for CI - #3891
  • Fixes for SSL - #3884
  • Lazily created caches should be bounded - #3877
  • Block startup for Java 12-15 to protect from data corruption - #3545
  • Remove object retained by inner-class via back-reference - #3878
  • Avoid unauthorised creation of collections - #3870
  • Improve invoking logger using log4j2 and slf4j templating - #3830
  • Repair missing tmp dir TemporaryFileManager - #3829
  • test the feature in container - #3823
  • Eliminate SequencedLongHashMap custom code - #3782
  • repair appveyor build - #3811
  • reimplement fn:base-uri() - #3813
  • Fixes corrupted stream message with maven-surefire-plugin - #3810
  • Fix URL for build status page and badge - #3808
  • repair build CQL Parser Module - #3807
  • NPE on predicates with an empty sequence - #3799
  • Fix incomplete type error reporting - #3791
  • Tests for computed namespace constructor - #3781
  • Make CI more manageable - #3766
  • Speed up CI when Docker Images are built - #3771
  • fn:position() off-by-one after any predicate - #3761
  • Fix a regression in finding the roots of the type hierarchy - #3774
  • Fix storage of repo.xml during package installation - #3773
  • Fix typo in error message for system:get-running-jobs - #3772
  • Fix GitHub Actions for SonarCloud - #3664
  • GitHub CI Badge in README.md should be for the develop branch - #3765
  • Add Docker to CI and tweak CI settings - #3760
  • Further fixes to CI - #3756
  • Fix typo in CI config - #3755
  • Improve CI in GitHub Actions - #3751
  • Creates a build matrix on github actions - #3743
  • Group membership is not correct immediately after restoring a backup - #3731
  • xs:anyType is the top of a Type hierarchy, don’t look further - #3728
  • Fix NaN comparisons - #3729
  • Reinstate fix for output directory - #3714
  • Update conf.xml XSD to latest conf.xml changes; fix location - #3703
  • Proposed fix for #3624 NPE at RangeQueryRewriter.rewriteLocationStep - #3625
  • Use fixed user environment for tests - #3669
  • (Bugfix) misc XQTS reported issues - #3693
  • Prevent NPEs in math:* functions. Tested in XQTS suite - #3691
  • Array: extend remove() function to allow multiple deletes in one go. (XQTS) - #3692
  • Remove old (unfinished?) code - #3686
  • Fix for #3688 - #3689
  • basic authentication - #3670
  • Make import statements consistent in whole repo - #3658
  • Update README.md - #3656
  • add location info to element content errors - #3550
  • Make sure the correct context sequence is used with util:eval-with-context - #3529
  • Preserve original error message when using util:eval - #3648
  • Fix root node handling and implicit context in functions - #3605
  • Fix compilation issue with JAXB dependencies on JDK 11+ - #3643
  • Another round of codebase improvements - #3631
  • Fixing some resource management issues - #3630
  • code improvements - #3580
  • 0 byte sized binary resources can be included in ZiPfile - #3566
  • allow function types in context item - #3496
  • Small code improvements - #3626
  • Fix NPE and Deadlock when Path Locks are used for Documents - #3622
  • Remove code which duplicates Commons IO - #3621
  • Log a warning if a collection.xconf is binary - #3613
  • Avoid IllegalStateException in Http Session functions - #3612
  • Improve module code quality - #3611
  • Update CI to include Java15 - #3609
  • REST API should not always complain about aborted transactions - #3604
  • Fix various problems with importing modules - #3585
  • line and column numbers in unknown-atomic-type errors - #3546
  • Improve Module Source - #3579
  • Fix an NPE in XQuery Update Replace - #3576
  • Integration tests for SQL Module Connection Functions - #3574
  • more improvements - #3571
  • Allow Travis CI JDK14 job to fail - #3572
  • Fix QName comparison Namepool - #3570
  • Proposed fix for NPE with empty case expression - #3567
  • Refactor/some more improvements - #3569
  • Some generic code improvements - #3568
  • allow functions with empty body - #3552
  • added missing directoryScanner.scan(); to fix repo:install-from-db - #3564
  • Remove document metadata indirection - #3535
  • Simplify test setup - #3537
  • Update to Apache Commons Collections 4 - #3538
  • Collection must be persisted when renaming/moving - #3534
  • Consistent License Declarations - #3305
  • Fix an issue in the query history in the Java Admin Client - #3528
  • Fix EXPath XAR required eXist-db version calculation - #3319
  • Fix javadocs - #3516
  • Fix an issue with the context item as an argument to fn:string-length inside a predicate - #3508
  • Fixes to shutdown when running tests - #3509
  • fn:base-uri should not raise XPDY0002 when the context item is empty - #3498
  • concatenation dependend on mode - #3493
  • Small cleanup to fn:matches code - #3492
  • Catch exception and enrich exception with location information - #3478
  • Make sure the blob.dbx is present in the data backup - #3480
  • Small Code cleanup - #3481
  • Get location from predicate evaluation and add to exception - #3469
  • Command line scripts support SSL - #3453
  • Fix formatting of am/pm for 12 pm - #3458
  • add missing location from error messages - #3452
  • Fix link to book - #3451
  • Improve signing of release artifacts - #3443
  • Small fixes - #3442
  • Add java modules to list functions - #3430
  • Repair module prefixes - #3428
  • Make sure that dist-archives are built by default - #3412
  • Fix issues with types and comparisons - #3363
  • java exception on higher order functions - #3364
  • Add functioning invite link to eXist Cmty Slack - #3399
  • use v1 syntax - #3397
  • fix deployment syntax on travis - #3396
  • Fix Travis Deploy step - #3385
  • Small change to util:node-by-id to avoid unexpected NPE - #3383
  • Reduces JDK pipeline to the LTS and last released versions - #3381
  • Fix an NPE with Security Context in dynamically loaded modules - #3377
  • Use secure maven repos where possible - #3374
  • Switch to new OSGeo repo - #3373
  • Avoid IndexOutOfBounds when selecting combo box items in JAC - #3353
  • rename test to clarify goal - #3369
  • Small Travis config improvements - #3359
  • Prohibit duplicate function declarations - #3354
  • Context Item should not be atomized when used as argument for fn:string-length - #3355
  • Add OpenJDK 12 and 13 to Travis CI - #3340
  • fn:collection should only return XML documents - #3349
  • Fix bounds issues with group separators in fn:format-number - #3348
  • Remove system.out message for debugging - #3351
  • Fix util:get-resource-by-absolute-id - #3350
  • Fix an issue with positional predicates that have multiple values - #3333
  • Fix an issue with Java equality of DLN - #3328
  • Avoid an NPE when reconstructing nested stack traces - #3327
  • Fix casting integers as union type xs:numeric - #3324
  • Fix polluted context when dynamically compiling query - #3325
  • Fix renaming a Collection - #3314
  • Don’t keep the splash screen in front of everything else - #3315
  • Fix the UTF8 decoding of Node Values - #3317
  • Add missing test names - #3306
  • Take the XQJ API dependency from Maven Central - #3302
  • Refactor system:export - #3303
  • Ensure Inspect Module functions throws errors appropriately - #3297
  • Update Jing and switch to official artifact - #3298
  • boolean-sequences.xql Test was in the wrong location - #3292
  • Docker HEALTHCHECK should use guest account not admin - #3288
  • Fix some issues with document-node type checks - #3287
  • Fix some small Windows Service issues - #3283
  • Fix restoring folder backups on Windows via XML:RPC - #3282
  • With fn:unparsed-text#1 non-dba users should only be restricted from filesystem - #3285
  • fn:concat requires an arity of at least two when making a function reference - #3286
  • fn:parse-xml-fragment should return a document-node() - #3290
  • Fix reporting of Restored Documents when restoring a backup - #3271
  • Resolve XSLT Modules from EXPath Packages - #3258
  • Document URI was incorrectly cached during a Collection Move - #3269
  • Fix type conversion of xs:positiveInteger and xs:negativeInteger types - #3266
  • Descriptor file should be read from $EXIST_HOME/etc - #3267
  • Correctly set the sticky bit when using a simple symbolic mode string - #3270
  • Make sure the Memtree in the query context is correctly used - #3262
  • Make sure the context is preserved when dynamically compiling a query - #3265
  • Reinstate code for a historical Jetty bugfix - #3261
  • Fix the cardinality of fn:random-number-generator#1 - #3249
  • Fix an issue with jetty closing sockets - #3248
  • spec compliant random-number-generator - #3072
  • map:remove sequence of keys - #3228

Dependencies

  • Bump Saxon-HE from 9.9.1-6 to 9.9.1-7
  • Bump ant.version from 1.10.7 to 1.10.10
  • Bump apache.httpcomponents.version from 4.5.11 to 4.5.13
  • Bump aspectj-maven-plugin from 1.12.1 to 1.12.6
  • Bump bcprov-jdk15on from 1.64 to 1.69
  • Bump bifurcan from 0.2.0-alpha1 to 0.2.0-alpha6
  • Bump caffeine from 2.8.1 to 2.9.1
  • Bump commons-codec from 1.14 to 1.15
  • Bump commons-compress from 1.18 to 1.20
  • Bump commons-configuration2 from 2.6 to 2.7
  • Bump commons-io from 2.6 to 2.10.0
  • Bump commons-lang3 from 3.9 to 3.12.0
  • Bump dependency-check-maven from 5.2.4 to 6.2.2
  • Bump docker-maven-plugin from 0.33.0 to 0.36.0
  • Bump download-maven-plugin from 1.5.0 to 1.6.3
  • Bump easymock from 4.1 to 4.3
  • Bump exec-maven-plugin from 1.6.0 to 3.0.0
  • Bump exquery.distribution.version from 0.1.35 to 0.2.0
  • Bump fastutil from 8.3.0 to 8.5.4
  • Bump fop from 2.4 to 2.6
  • Bump hsqldb from 2.5.0 to 2.6.0
  • Bump http-client-java from 1.2.2 to 1.4.1
  • Bump httpcore from 4.4.13 to 4.4.14
  • Bump jackson-core from 2.10.2 to 2.12.3
  • Bump jacoco-maven-plugin from 0.8.6 to 0.8.7
  • Bump jakarta.activation from 1.2.1 to 2.0.0
  • Bump jakarta.mail from 1.6.4 to 1.6.5
  • Bump jakarta.xml.bind-api from 3.0.0 to 3.0.1
  • Bump jansi from 1.18 to 2.3.3
  • Bump java-uuid-generator from 3.2.0 to 4.0.1
  • Bump jaxb-impl from 3.0.0-M5 to 3.0.1
  • Bump jcstress-core from 0.5 to 0.13
  • Bump jctools-core from 3.0.0 to 3.3.0
  • Bump jetty.version from 9.4.26.v20200117 to 9.4.42.v20210604
  • Bump jline from 3.13.3 to 3.20.0
  • Bump jmh.version from 1.22 to 1.32
  • Bump jts from 1.8 to 1.13
  • Bump junit from 4.13 to 4.13.2
  • Bump log4j.version from 2.13.0 to 2.14.1
  • Bump lz4-java from 1.7.1 to 1.8.0
  • Bump maven-assembly-plugin from 3.2.0 to 3.3.0
  • Bump maven-dependency-plugin from 3.1.1 to 3.1.2
  • Bump maven-javadoc-plugin from 3.1.1 to 3.3.0
  • Bump maven-project-info-reports-plugin from 3.0.0 to 3.1.2
  • Bump maven-resources-plugin from 3.1.0 to 3.2.0
  • Bump maven-shade-plugin from 3.2.1 to 3.2.4
  • Bump maven-site-plugin from 3.8.2 to 3.9.1
  • Bump maven-surefire-plugin from 3.0.0-M4 to 3.0.0-M5
  • Bump maven-surefire-report-plugin from 3.0.0-M4 to 3.0.0-M5
  • Bump pkg-java from 1.4.2 to 1.6.1
  • Bump rsyntaxtextarea from 3.0.8 to 3.1.3
  • Bump tika.version from 1.23 to 1.26
  • Bump tools-java from 0.3.0 to 0.7.0
  • Bump versions-maven-plugin from 2.7 to 2.8.1
  • Bump xmlgraphics-commons from 2.4 to 2.6
  • Bump xmlunit.version from 2.6.3 to 2.8.2

eXist-db 5.2.0

v5.2.0 - January 23rd, 2020

We are very happy to announce that eXist-db 5.2.0 has been released.

5.2.0 is a minor release, and as such should be 100% API compatible with 5.0.0. Whilst this is a fairly conservative release, it fixes two critical issues:

  1. We fixed a concurrency issue in the reuse of hot Locks which could appear under high-load and cause a transaction to error and abort. This issue is present in all eXist-db 5.x.x versions prior to 5.2.0, but not 4.7.1. This issue could cause corruption in a <5.2.0 system.
  2. We fixed a live-lock in the Transaction Manager which could appear under high-load and prevent a transaction from completing. This issue is present in all eXist-db 5.x.x version prior to 5.2.0, but not 4.7.1. This issue could cause a <5.2.0 system to eventually lock-up.

Features

  • Implemented the XQuery function array:put #3092
  • Implemented the XQuery function fn:json-to-xml #3093
  • Facility to have Document locks use the same hierarchical path based locking as Collection locks #3208
  • Allow an indexed node to be a member of multiple hierarchical facets at the same time #3182
  • Improved the performance of FastStringBuffer #3186
  • Implemented isOpen() and close() methods on XML:DB API's RemoteCollection #2881
  • Improved log messages when disk space is exhausted #3127

Bugfixes

  • Fixed a livelock in the Transaction Manager #3156
  • Fixed a Concurrency Issue in Lock Reuse #3219
  • Fixed an issue where the wrong Lucene Index Config could of been selected #3142
  • Fixed an NPE which prevented the Content Extraction Module from functioning #3206
  • Fixed opening the Statistics Index #3201
  • Fixed a Cast Exception in fn:subsequence on sequences with atomic values #3199
  • Fixed a memory-leak when shutting down an instance; occurred when there were multiple instances #3171
  • Removed unused options in conf.xml #3127
  • Removed extraneous logging of stack traces #3140
  • Fixed log level of failed index lookups #3200
  • Many small code improvements #3178

Updated Libraries

  • Apache Commons Codec 1.14 #3189
  • Apache HTTP Components 4.5.11 #3213
  • Apache Log4j 2.13.0 #3162
  • Apache Tika 1.23 #3215
  • Apache Xerces 2.12.1 #3218
  • Caffeine 2.8.1 #3204
  • Eclipse Jetty 9.4.26.v20200117 #3211
  • EXPath HTTP Client 1.2.2 #3216
  • EXQuery 0.1.35 #3198
  • Jackson 2.10.2 #3188
  • jcTools 3.0.0 #3187
  • jline 3.13.3 #3190
  • jUnit 4.13 #3180
  • lz4-java 1.7.1 #3212
  • rsyntaxtextarea 3.0.8 #3181
  • Saxon-HE 9.9.1-6 #3150
  • Slf4j API 1.7.30

Backwards Compatibility

eXist-db 5.2.0 is binary compatible with previous eXist-db 5.x.x versions back to 5.0.0-RC6. Regardless, before upgrading to this version of eXist-db, it is strongly recommended to perform a full backup and restore. Users who are upgrading should always consult the Upgrading Guide in the documentation. For details of backwards compatibility with versions of eXist-db prior to 5.0.0-RC6, please see the Backwards Compatibility details of 5.0.0-RC6.

Downloading this Version

  • eXist-db v5.2.0 is available for download from GitHub.
  • Docker images are available from eXist-db's DockerHub.
  • Maven artifacts are available from Maven Central.
  • Mac users of the Homebrew package repository may acquire eXist 5.2.0 directly from there via. the exist-db cask.

eXist-db 5.1.1

v5.1.1 - December 6, 2019

This is a small hotfix release addressing a few important issues.

Bug Fixes

  • Fixed a NPE with XSL:FO when using Apache FOP #3126
  • Fixed an issue with upgrading packages when restoring a backup #3129
  • Fixed the implementation of fn:format-number #3130
  • Fixed a shutdown issue when running multiple database instances #3145

Updated Libraries

  • Eclipse Jetty 9.4.24.v20191120 #3124
  • EXPath Pkg 1.4.2 #3131
  • jline 3.13.2 #3132

Backwards Compatibility

eXist-db 5.1.1 is binary compatible with eXist-db 5.1.0, 5.0.0, 5.0.0-RC8, 5.0.0-RC7, and 5.0.0-RC6. Regardless, before upgrading to this version of eXist-db, it is strongly recommended to perform a full backup and restore. Users who are upgrading should always consult the Upgrading Guide in the documentation. For details of backwards compatibility with versions of eXist-db prior to 5.0.0-RC6, please see the Backwards Compatibility details of 5.0.0-RC6.

Downloading this Version

  • eXist-db v5.1.1 is available for download from GitHub.
  • Docker images for are available from eXist-db's DockerHub.
  • Maven artifacts are available from Maven Central.
  • Mac users of the Homebrew package repository may acquire eXist 5.1.1 directly from there via. the exist-db cask.

eXist-db 5.1.0

v5.1.0 - November 18th, 2019

We are very happy to announce that eXist-db 5.1.0 has been released.

5.1.0 is a minor release, and as such should be 100% API compatible with 5.0.0. Whilst this is a fairly conservative release, it fixes two critical issues:

  1. A security issue, whereby lesser priviledged users were incorrectly granted access to descendant collections #3059. This bug is present in both eXist-db 4.7.1 (and older) and 5.0.0, and we strongly recommend upgrading.
  2. We fixed a Race Condition in the Lock Allocation Table (WeakLazyStripes) where under high-load the Garabage Collection of the old Locks would interfere with the creation of new locks. This isssue is present in eXist-db 5.0.0 but not 4.7.1. This issue could cause a 5.0.0 system to throw unexpected exceptions or lock-up.

Features

  • Allow multiple transactions per broker #3034
  • Lucene index predicates now also support[@attr != value] #2992
  • Enhance optimisations for positional predicates #3075 #3085
  • Some small improvements to the SQL Module #3081
  • Add classes supporting a SAXSource for included database documents #3076
  • Add support for minimum-must-match on Lucene BooleanQuery #3107

Security

  • Fix a security issue with collection access #3059

Bugfixes

  • Fix a race condition in WeakLazyStripes #3064
  • Avoid ConcurrentModificationException at shutdown #3113
  • Make sure that compiled queries are returned to the pool #3065
  • Prevent ClassNotFoundException for Document Triggers #2949
  • Fix a StackOverflowError caused by lost type into #3112
  • Fix inverted command line arg test in Java Admin Client #3010
  • Fix util:parse-html missing dependency #3047
  • Avoid NPE when reporting error #3078
  • Read webdav.properties from the etc directory when available #3009
  • Cleanup conf.xml options #3015

Updated Libraries

  • Apache Ant 1.10.7 #3005
  • Apache Commons Configuration2 2.6 #3020
  • Apache Commons Daemon 1.2.2 #3037
  • Apache FOP 2.4 #3095
  • Apache HTTP Components 4.5.10 #3011
  • Apache HTTP Core 4.4.12 #3002
  • Apache XML Graphics 2.4 #3096
  • Bouncy Castle 1.64 #3048
  • EasyMock 4.1 #3098
  • Eclipse Jetty 9.4.21.v20190926 to 9.4.22.v20191022 #3067
  • Hamcrest 2.2 #3057
  • Jackson 2.10.1 #3099
  • Jakarta Mail 1.6.4 #2986
  • jline 3.13.1 #3073
  • JMH 1.22 #3091
  • Quartz 2.3.2 #3068
  • rsyntaxtextarea 3.0.4 #3028
  • Saxon-HE 9.9.1-5 #3006
  • Slf4j API 1.7.29 #3082

Backwards Compatibility

eXist-db 5.1.0 is binary compatible with eXist-db 5.0.0, 5.0.0-RC8, 5.0.0-RC7, and 5.0.0-RC6. Regardless, before upgrading to this version of eXist-db, it is strongly recommended to perform a full backup and restore. Users who are upgrading should always consult the Upgrading Guide in the documentation. For details of backwards compatibility with versions of eXist-db prior to 5.0.0-RC6, please see the Backwards Compatibility details of 5.0.0-RC6.

Downloading this Version

  • eXist-db v5.1.0 is available for download from GitHub.
  • Docker images for are available from eXist-db's DockerHub.
  • Maven artifacts are available from [Maven Central](https://search.maven.org/search?q=g:org.exist-db).
  • Mac users of the Homebrew package repository may acquire eXist 5.1.0 directly from there via. the exist-db cask.

eXist-db 5.0.0

v5.0.0 - September 2nd, 2019

We are very happy to announce that eXist-db 5.0.0 has been released.

eXist-db 5 represents a substantial development effort, incorporating more than 1,400 commits from 26 contributors over the course of two and a half years.

The most significant improvements to this version of eXist-db involve collection and document locking. The focus of this effort firstly was to ensure "correctness" (i.e., to prevent database corruption) and secondly to improve concurrent performance (i.e., performance when many users are accessing the database) and reporting on the state of the system to aid developers and system administrators in diagnosing locking issues. These and other improvements detailed below aim to dramatically boost eXist-db's reliability and stability.

Other highlights of this release include that eXist-db has a new faceted browsing facility, supports more standard XQuery 3.1 functions, and is now built using Maven and is available via DockerHub. Read more about these and all of the improvements below. Be sure to read to the end for important notes about upgrading.

Features

  • New Dashboard and Package Manager #2438.
  • Improved the performance of the Lock Table #2591.
  • Improved the performance of Lock Striping #2831.
  • Optimized XMLString to reduce copying.
  • Spatial Index is now available again #2601.
  • Options can now be passed to ft:search queries.
  • A leading wildcard can now be used in ft:search queries #2468.
  • Added the new function ft:index-keys-for-field for the Lucene Index to complement util:index-keys for field indexes.
  • Added support for faceting with the Lucene Index #2629. See the documentation for how to attach fields or facets to an indexed node, using XQuery expressions to select/construct content. Query across fields, use them for sorting or drill down into a query result using facets.
  • Added XQuery 3.1 fn:contains-token #2799, fn:parse-ietf-date #2866, and fn:random-number-generator functions.
  • Added the system:get-product-name function.
  • Added the xmldb:copy-resource and xmldb:copy-collection functions.
  • Rewrote the Service Manager for Windows platforms.
  • Docker images now use an Uber jar for easy deployment.
  • New Jar Installer based on IzPack 5.

Updated Libraries

  • Apache Ant 1.10.6
  • Apache Commons Codec 1.13
  • Apache Commons Compress 1.18
  • Apache Commons Configuration 2.5
  • Apache Commons Daemon 1.2.0
  • Apache Commons File Upload 1.4
  • Apache Commons HTTP Components 4.5.9
  • Apache Commons Lang 3.9
  • Apache Mina 2.1.2
  • Apache Tika 1.22
  • Bouncy Castle 1.62
  • Caffeine 2.8.0
  • cglib 3.3.0
  • Eclipse AspectJ 1.9.4
  • Eclipse Jetty 9.4.20.v20190813
  • EXPath Pkg 1.4.1
  • EXPath HTTP Client 1.2.0
  • EXPath Tools 0.3.0
  • FasterXML UUID Generator 3.2.0
  • FastUtil 8.3.0
  • IzPack 5.1.4
  • j8fu 1.23.0
  • Jackson 2.9.9
  • JavaMail 1.6.3
  • JLine 3.11.0
  • Log4j 2.12.1
  • LZ4 1.6.0
  • MultiLock 1.0.1
  • Quartz Scheduler 2.3.1
  • RESTXQ 0.1.34
  • RSyntaxTextArea 3.0.3
  • Saxon HE 9.9.1-4
  • SLF4j 1.7.28
  • XMLUnit 2.6.3

Bug Fixes

  • Restoring a Backup no longer overwrites newer versions of apps (unless configured to do so) #2985.
  • Added missing EXPath Packages to the IzPack installer #2989.
  • Fixed a deadlock which can occur with System Tasks #2984.
  • Improved log reporting when deploying EXPath packages #2982.
  • Fixed first-start deployment of collection.xconf.init for enabling RESTXQ #2978.
  • Added missing Semver.xq to autodeploy directory #2975.
  • Fixed collation comparison on empty strings #2967.
  • Improved the concurrent performance of the Compiled XQuery Pool #2972.
  • Improved the Lock Table lease recording performance #2963.
  • Small improvements to LDAP support #2937.
  • Reinstate the bin scripts in the App produced for Mac platforms #2931.
  • WebSocket Server again runs correctly in Docker Container #2929.
  • Java Admin Client can now restore a backup with a different admin account password correctly #2934.
  • Fixed the data folder path when restoring a backup to an embedded database #2927.
  • Corrected the Mac artifact name to eXist-db-$ver.dmg #2910.
  • Fixed a User account leak in XQuery User Switching Function #2924.
  • Added missing XML library dependencies for JDK 10+.
  • Fixed non-spec compliant issues with preceding-sibling and following-sibling axes.
  • Fixed a regression with XQuery Update's insert following expression #2624.
  • Removed a bad optimization affecting expressions like `/a/b//cd = 123]` [#2837.
  • fn:tokenize is now case-sensitive by default #2742.
  • Fixed an issue where the content of XML Comments was incorrectly escaped #2740.
  • Reduced the memory use and increased performance of file transfers in the XML:DB API #2630.
  • Reduced the memory use and computation when sorting.
  • Reduced the memory use of Collections #2688.
  • Fixed an issue whereby XQSuite was not reporting all test failures #2141.
  • Fixed a memory leak with QNames during XML serialization #2537.
  • Fixed memory leaks with the CharArrayPool and ByteArayPool.
  • Fixed an issue whereby eXist-db might not start correctly if Journal Recovery was disabled #2539.
  • Fixed a regression with overlapping transactions when deploying EXPath packages.
  • Made the parsing of util:serialize parameters conform with the function documentation.
  • Ensure that all users have at least one Primary Group.
  • Small fixes to the EnsureLockingAspect.
  • Fixed an issue with the Namespace Constructor when there is an empty prefix #2584.
  • Removed custom buggy Hash Table implementations in favour of those in [fastUtil](http://fastutil fastutil.di.unimi.it/) #2588.
  • Fixed Collection Locking when removing a Collection.
  • Fixed the analysis of global variables when loading XQuery modules dynamically #2580.
  • Fix an issue with replacing binary resources when owner/group differ from the active user #2595.
  • Fixed purging of old zip backups #2609.
  • Fixed a NullPointerException in LDAPRealm when searching for group members #2618.
  • Corrected the order of arguments in fn:for-each and fn:for-each-pair.
  • Fixed the context sequence for XQuery higher-order-functions #2448.
  • Fixed an ArrayOutOfBoundsException when querying documents with enclosed expressions and the fn:id function #2646.
  • Fixed a problem with Collation comparison on empty strings #2671.
  • Fixed a problem with parallel sorting when using Collations #2669.
  • Fixed an issue where descendent nodes were incorrectly indexed in the Lucene Index #2682.
  • Fixed an issue with opening a Collection using a full XML:DB URL #2693.
  • Avoid a NullPointerException in AutoDeployment when dependencies are not available.
  • Made sure that the Launcher correctly exits when requested #2730.
  • Fixed an issue where previously replacing a document, would not remove all prior nodes which caused storage to constantly grow.
  • Fixed a locking issue when deleting documents via WebDAV #2789.
  • Fixed a regression with YAJSW support introduced by adding WRAPPER_UNATTENDED.
  • Fixed setting the admin password setting in the installer Jar.
  • Fixed setting the data directory in the installer Jar.
  • Fixed an issue whereby source locations were not correctly included in the installer Jar.
  • Fixed JavaDoc syntax errors #2860.

Removed

We have removed the Java Web Application Archive (WAR) build of eXist-db. We no longer support running eXist-db inside a 3rd-party Servlet container such as Apache Tomcat. If you wish to operate eXist-db as a Server, you should instead run the server using the provided Jetty start-up scripts.

We have also removed a number of previously deprecated functions, modules, and extensions:

  • Removed the draft syntax for the XQuery Map Constructor, i.e. `map = "y"` #2892.
  • cache module:
    • cache:cache, caches are now created on demand.
  • fn module:
    • fn:map, use the Map constructor instead.
    • fn:map-pairs function, you should instead use fn:for-each-pair.
    • fn:string-pad.
  • image module:
    • image:get-metadata.
  • map module:
    • map:new function, you should instead use the map constructor.
    • map:for-each-entry, you should instead use map:for-each.
  • response module:
    • response:set-response-header, use response:set-header instead.
  • sm module:
    • sm:delete-group, use sm:remove-group instead.
    • sm:get-groups
  • util module:
    • util:catch, use XQuery 3.0's try/catch expression instead.
    • util:eval-async.
    • util:parse, use XQuery 3.0's fn:parse-xml or fn:parse-xml-fragment instead.
    • util:serialize, use XQuery 3.0's fn:serialize instead.
  • validation module:
    • validation:validate, you should use the other more specific functions within this module.
    • validation:validate-report, you should use the other more specific functions within this module.
  • xmldb module:
    • xmldb:add-user-to-group, use sm:add-group-member instead.
    • xmldb:change-user, instead use various task specific functions in the sm module.
      • xmldb:chmod-collection, usesm:chmod instead.
    • xmldb:chmod-resource, use sm:chmod, instead.
    • xmldb:copy, use xmldb:copy-collection and xmldb:copy-resource instead.
    • xmldb:create-group, use sm:create-group instead.
    • xmldb:create-user, use sm:create-account instead.
    • xmldb:delete-user, use sm:remove-account instead.
    • xmldb:document, use fn:doc instead.
    • xmldb:exists-user, use sm:user-exists instead.
    • xmldb:get-current-user, use sm:id()//sm:real/sm:username/string() instead.
    • xmldb:get-current-user-attribute, use sm:get-account-metadata instead.
    • xmldb:get-current-user-attribute-names, use sm:get-account-metadata-keys instead.
    • xmldb:get-group, use sm:get-group instead.
    • xmldb:get-owner, use sm:get-permissions instead.
    • xmldb:get-user-groups, use sm:get-user-groups instead.
    • xmldb:get-user-home.
    • xmldb:get-user-primary-group, use sm:get-user-primary-group instead.
    • xmldb:get-users, use sm:list-users instead.
    • xmldb:group-exists, use sm:group-exists instead.
    • xmldb:is-admin-user, use sm:is-dba instead.
    • xmldb:is-authenticated, use sm:is-authenticated or sm:is-externally-authenticated instead.
    • xmldb:get-permissions, use sm:get-permissions instead.
    • xmldb:permissions-to-string, use sm:octal-to-mode instead.
    • xmldb:string-to-permissions, use sm:mode-to-octal instead.
    • xmldb:remove-user-from-group, use sm:remove-group-member instead.
    • xmldb:set-collection-permissions, use sm:chmod, sm:chown and sm:chgrp instead.
    • xmldb:set-resource-permissions, use sm:chmod, sm:chown and sm:chgrp instead.
  • XQuery Context module.
  • XQuery DateTime module. Consider using dtm.xqm instead.
  • eXist-db's HTTP Client module. Use the EXPath HTTP Client module instead.
  • eXist-db's XQuery FTP Client module. Use the EXPath FTP Client module instead.
  • eXist-db's Math module. Use the XQuery 3.0 math functions instead.
  • commands extension.
  • fluent extension.
  • Memcached extension.
  • metadata extension.
  • netedit extension.
  • OAuth Security extension.
  • OpenID Security extension.
  • Scheduler extension.
  • tomcat-realm extension.
  • XMPP extension.
  • XProcXQ extension. Consider using Calabash instead.
  • xUnit extension.

Craig Berry has kindly provided a Perl script which you can run against your XQuery code to audit for most of these changes.

New Build System

The build system for eXist-db was previously Apache Ant. With 5.x.x we have completed a full migration of the build system to Apache Maven. Maven affords us a much more modular, rigorous, and flexible process, whilst reducing the maintenance burden that we experienced with Ant. We are now also able to easily publish artifacts to Maven Central for those eXist-db users that embed eXist-db within their own applications.

One major change, is that eXist-db can no longer be built "in-place" from a Git clone, instead building eXist-db now generates a distribution. It is recommended that all users working with the source code, should start with a fresh clone of eXist-db 5.0.0, as its source footprint is not compatible with 5.0.0-RC7 or older.

The Building eXist-db documentation page has been updated with the latest instructions for building eXist-db with Maven.

Backwards Compatibility

eXist-db 5.0.0 is binary compatible with eXist-db RC8, RC7, and RC6. Regardless, before upgrading to this version of eXist-db, it is strongly recommended to perform a full backup and restore. Users who are upgrading should always consult the Upgrading Guide in the documentation. For details of backwards compatibility with versions of eXist-db prior to 5.0.0-RC6, please see the Backwards Compatibility details of 5.0.0-RC6.

NOTE: Applications that shipped with previous version of eXist-db are not guaranteed to be forwards compatible. To ensure smooth operation you should clear your web browser's cache before trying to access newer apps.

Downloading this Version

  • eXist-db v5.0.0 is available for download from GitHub.
  • Docker images for are available from eXist-db's DockerHub.
  • Maven artifacts are available from Maven Central.
  • Mac users of the Homebrew package repository may acquire eXist 5.0.0 directly from there via. the exist-db cask.

High Scores!

We would like to say a big Thank You to all of those developers who contributed to eXist-db 5.0.0. Your contributions were very welcome.

Name

Commits

Baddies Defeated

Adam Retter

872

60.51 %

Dannes Wessels

231

16.03 %

Wolfgang Meier

97

6.73 %

Duncan Paterson

95

6.59 %

Dependabot

43

2.98 %

Joe Wicentowski

36

2.50 %

Patrick Reinhart

12

0.83 %

Magdalena Turska

12

0.83 %

Juri Leino

7

0.49 %

Lars Windauer

4

0.28 %

Leif Jöran-Olsson

4

0.28 %

Opax

3

0.21 %

Peter Stadler

3

0.21 %

Dmitriy Shabanov

2

0.14 %

Peter Hungerburg

2

0.14 %

Olaf Schreck

2

0.14 %

Otmar Humbel

2

0.14 %

Stanislav Jordanov

2

0.14 %

Bert Willems

1

0.07 %

Bruce Robertson

1

0.07 %

Claudius Teodorescu

1

0.07 %

Ioannis Cherouvim

1

0.07 %

Marcel Schaeben

1

0.07 %

Marcelo Duarte Trevisani

1

0.07 %

Mathias Goebel

1

0.07 %

Mike Jones

1

0.07 %