What's new
Support for modern Java and Tomcat versions
With version 4.0, Kitodo adds support for Java 21 and Tomcat 10. This means this new version needs to be deployed on a different web server than previous Kitodo.Production releases and cannot simply be replaced in the same Tomcat 9 instance as before. For general installation instructions please consult the corresponding guide.
Database and search index server support has not changed since Kitodo.Production 3.9, but the database schema itself has been slightly updated and needs to be migrated when upgrading from an existing installation (see database migration notes below). Please consult the system requirements page for additional details.
See #6692 for additional details
Comprehensive XML validation
From version 4.0 onwards XML files in Kitodo.Production are validated against their resprective schema definitions upon usage. This includes metadata records imported from remote catalog search interfaces, ruleset files, internal metadata files and XSLT mapping files used for metadata import and export. When validation fails, an exception is thrown and loading of the XML file is aborted. The user is informed about the validation errors and has to fix the XML file before it can be used.
Since internal metadata files created by previous Kitodo.Production version did not contain completely valid METS structures, a new Kitodo script "resaveMetadataFile" was added to allow updating metadata files of existing processes with correct and valid METS XML. New processes created with Kitodo.Production 4.0 automatically contain valid METS structures.
This XML support is mandatory to improve the stability of Kitodo.Production, which is highly dependent on many XML files. One exception is the schema validation of metadata records from external sources, which is optional because Kitodo users normally do not have control over those external sources and therefor cannot fix causes of potential validation errors. For this reason, schema validation can be deactived in corresponding import configurations.
See #6815 for additional details.
Pagination editor improvements
This new release contains improvements to the pagination feature of the metadata editor that have been discussed during the Kitodo community meeting and implemented as part of the development fund 2025. Exemplary improvements are:
- the layout of the pagination panel has been refactored to better make use of the available screen estate
- alphabetic pagination types have been added
- sheet pagination starting with verso pages has been added
- the redundant page selection list has been removed
See #6683 for a complete list of improvements.
Bean scopes
The so-called "backing beans" in Kitodo have been refactored and their scope has been updated to the most appropriate options.
See #6456 for details.
Cyber Resilience Act
A Cyber Resilience Act document has been added to Kitodo to adhere to the corresponding new EU regulation.
See #6945 for details.
Extenionless urls
URLs in Kitodo.Production 4.0 omit the .jsf extensions (for example pages/desktop.jsf -> pages/desktop). To retain compatibility with existing bookmarks, URLs with jsf extensions will still work, but be forwarded to extensionless URLs and Kitodo itself will only navigate to URLs without extensions.
See #6773 for details.
CSV export
In addition to the already existing PDF and Excel export for the process list, a new CSV export has been added.
See #6905 for details.
Database migration
To create a fresh installation of Kitodo.Production 4.0.0 please use the SQL dump kitodo_4-0-0.sql included in this release.
To update an existing Kitodo 3.9.x installation instead, please migrate your database with the provided migration file migration_3-9-0_to_4-0-0.sql.
Configuration
Changes to hibernate.cfg.xml:
- The property
hibernate.dialectshould be updated fromorg.hibernate.dialect.MySQL5Dialecttoorg.hibernate.dialect.MySQLDialect(the number 5 was removed) - The property
hibernate.connection.driver_classshould be updated tocom.mysql.cj.jdbc.Driver
Changelog
Note: entries marked with a * denote changes and bug fixes since the 4.0.0.RC1 release of Kitodo.Production.
- * Fix layout of 'Add metadata' popup dialog on mass import page by @solth in #7040
- * Update commons-configuration2 to 2.15.0 by @henning-gerhardt in #7050
- * Improve folder editing form by @BartChris in #6993
- * Hide processes and tasks of inactive projects by @solth in #7043
- * Speedup displaying of extended search page by @henning-gerhardt in #7055
- * Use commons-collections4 by @henning-gerhardt in #7053
- * Catch Count exception during indexing by @BartChris in #7025
- * Add tests for URL query parameters for task and process list by @thomaslow in #7059
- * Fix exception when sorting list views by invisible column by @thomaslow in #7060
- * Local only schemas for xslt by @BartChris in #7061
- * Fix empty list columns when creating new client by @thomaslow in #7062
- * Use multiple field/value terms in ES query by @BartChris in #6782
- * Remove custom Chrome installation from Github workflow by @BartChris in #7074
- * Fix use of returnless function in
scroll.jsby @solth in #7058 - * Fix check for displaying option to create structure from selected media by @solth in #7054
- * Add test for ActiveMQ CreateNewProcessesProcessor by @matthias-ronge in #7075
- * Add Kitodo script to set ImportConfiguration for selected processes by @solth in #7080
- * Submit search terms in Selenium Test using Enter Key and harden further Selenium tests by @BartChris in #7081
- * Fix deleting media after deleting parent logical division by @thomaslow in #7069
- Fix query for assigned projects by @BartChris in #6637
- Show functional metadata in ruleset edit mask by @solth in #6629
- Fix missing link to child process in asynchronous export by @BartChris in #6643
- Optimize task related buttons in process list by @BartChris in #6644
- Optimization of the process list by @BartChris in #6649
- Switch to standard workbook generation to fix PDF export by @BartChris in #6651
- Restrict Excel and PDF export to current client by @BartChris in #6655
- Lookup BaseType in the correct way by @BartChris in #6646
- Fix metadata dialog in calendar by @oliver-stoehr in #6663
- Fix base type regex by @BartChris in #6667
- Harden query parsing: prevent numeric titles and non-numeric IDs from breaking search by @BartChris in #6672
- PrimeFaces update by @solth in #6591
- Fix the export button by @BartChris in #6660
- Skip subfolders of ruleset directory when listing ruleset xml files by @solth in #6686
- Reduce number of SQL queries during Excel export by @BartChris in #6691
- [main] Adapt error handling in script logging by @BartChris in #6695
- Adapt delete logic for templates by @BartChris in #6700
- Fix mass process deletion from list by @BartChris in #6648
- Prevent duplicate items in task list by @BartChris in #6711
- fix checkbox layout in process list filter by @clemensmach in #6708
- Fix issues to generate valid METS structures by @solth in #6715
- Add missing Spanish translations by @solth in #6725
- Deactivate error prone parallel task processing by default by @solth in #6727
- Improve Selenium Test Reliability of MetadataST.updateMediaReferenceTest by @thomaslow in #6737
- Make parsedFilter regex broader by @BartChris in #6736
- Optimize list row count by @BartChris in #6733
- Performance Improvements For Hibernate ORM 6 by @thomaslow in #6734
- Add logic for enriching LABELs on export by @BartChris in #6745
- Fix maxOccurs validation by grouping metadata values under a single view per ID by @BartChris in #6753
- Allow restrictions with empty 'division' values in rulesets by @solth in #6747
- Improve Selenium Test Reliability via Custom Locating Handler by @thomaslow in #6762
- [main] Update CodeQL action to version 4 by @henning-gerhardt in #6757
- Prevent IndexOutOfBoundsException in addNewMediaToWorkpiece by clamping the insertion index by @BartChris in #6756
- IndexingService: Use try-with-resource statement by @henning-gerhardt in #6768
- Fix Index queries in task list by @BartChris in #6732
- Update to Java 17/21 and Tomcat 10.1 by @thomaslow in #6692
- Fix spelling mistake in RepeatingFieldDecorator in main branch by @thomaslow in #6794
- Remove not used class IndexWorkerStatus by @henning-gerhardt in #6793
- Make displayed filters more coherent by @BartChris in #6763
- Fix Spring warning about
commons-loggingconflict by @thomaslow in #6797 - Deactivate popup dialog preventing redirect after automatic logout when session times out by @solth in #6799
- Upgrade to Java 21 by @thomaslow in #6796
- Upgrade Omnifaces to v4.7.1 by @thomaslow in #6809
- Fix default child import configuration by @BartChris in #6813
- Optimize Update of process state by @BartChris in #6647
- Pagination editor improvements by @oliver-stoehr in #6683
- Fix IndexOutOfBoundsException in CommandService by @henning-gerhardt in #6820
- Bump org.apache.logging.log4j:log4j-core from 2.19.0 to 2.25.3 by @dependabot[bot] in #6832
- Fix ambigous ID in query by @BartChris in #6829
- Disable step done user search if disabled in properties by @henning-gerhardt in #6808
- Remove multipart form encoding from all edit views except mass import by @thomaslow in #6810
- Fix media upload in metadata editor by @solth in #6837
- Fix check for context menu option 'select assigned media' in structure tree by @solth in #6838
- Skip form validation of 'Change docstruct type' dialog when clicking 'Cancel' button by @solth in #6840
- Add missing form components by @solth in #6842
- Remove not used and obsolete wikifield by @henning-gerhardt in #6758
- Add XML schema validation for metadata, rulesets and mapping files by @solth in #6815
- Open linked processes in metadata editor by @solth in #6824
- Filter ID to be an integer value by @matthias-ronge in #6676
- Optimize user list by @BartChris in #6803
- Re-enable text selection in process table by @BartChris in #6850
- Fix hasProcesses lookup and improve ProjectForm performance by @BartChris in #6778
- Log 'load workpiece' message at debug level by @solth in #6849
- Remove reliance on bidirectional association in task-user relation by @BartChris in #6851
- Refactor Bean Scopes: User, Role, Authority, Client, LdapGroup, LdapServer forms by @thomaslow in #6770
- Add missing form for 'metadata locked' dialogs 'ok' button by @solth in #6848
- Decouple xsd files by @henning-gerhardt in #6857
- Use local references xsd schema files by @henning-gerhardt in #6858
- Improve log error message by @henning-gerhardt in #6859
- Change tokenization for more coherent search by @BartChris in #6764
- Refactor Bean Scopes: Project, Template, Workflow, Docket, Ruleset forms by @thomaslow in #6847
- overwrite primefaces theme for deactivated rows by @clemensmach in #6865
- Replace some deprecated methods by @solth in #6868
- Move linking child processes to a separate dialog in metadata editor by @solth in #6860
- Fall back on installed Chrome version if ChromeDriver version does not match installed Chrome binary by @solth in #6876
- Update Selenium framework to version 4 by @solth in #6872
- Optimize Process list by batching by @BartChris in #6831
- Fix CodeQL warnings about casts and potential input resource leaks by @solth in #6875
- Fix some deprecated methods by @henning-gerhardt in #6877
- Replace deprecated URL constructor by @solth in #6882
- Remove unused imports by @solth in #6884
- Replace explicit type argument with
<>by @solth in #6885 - Replace Java assert keyword usage with Junit assert method calling by @henning-gerhardt in #6887
- Update Junit and Mockito to latest 5.x version by @henning-gerhardt in #6889
- Update maven spotbugs plugin to most recent version 4.9.8.2 by @thomaslow in #6891
- Skip empty metadata fields when doing a Re-import by @BartChris in #6495
- Bump com.fasterxml.jackson.core:jackson-core from 2.17.2 to 2.18.6 by @dependabot[bot] in #6902
- Sequenced Collections by @solth in #6880
- Update Maven plugins to most recent version by @henning-gerhardt in #6894
- Cleanup long term preservation validation it test by @henning-gerhardt in #6895
- Remove useless parameters by @solth in #6913
- Refactor some code for potential performance optimizations by @solth in #6915
- Paginate every second page by @oliver-stoehr in #6869
- Remove
.jsfsuffix from all URLs by @thomaslow in #6773 - Simplify Import XSL and allow usage of external files by @BartChris in #6888
- Add columns for workflow and docket to template list by @solth in #6916
- Move 'unlink process' option to end of context menu by @solth in #6918
- Update GitHub actions to version which support NodeJS 24 by @henning-gerhardt in #6920
- Remove obsolete/unused value "dataSource" from use attribute usage by @henning-gerhardt in #6923
- Remove duplicate license file by @stweil in #6110
- Bump org.springframework:spring-webmvc from 6.2.14 to 6.2.17 by @dependabot[bot] in #6941
- Fix encoding for Spanish texts (convert ISO-8859-1 to UTF-8) by @stweil in #6935
- Add Tomcat 'rewrite valve' to restore compatibility with legacy 'jsf' urls by @solth in #6932
- Optimize desktop view by @BartChris in #6886
- Show task element ID in error message when task has no title by @Erikmitk in #6929
- Minor updates of dependencies by @stweil in #6942
- Add missing form on desktop to prevent warning message by @solth in #6934
- Add CSV-Export by @BartChris in #6905
- Stream API simplifications by @solth in #6936
- Bump actions/checkout from 5 to 6 by @stweil in #6939
- Refactor Bean Scopes: Process List by @thomaslow in #6903
- CRA by @stefanCCS in #6945
- Simplify Web driver handling by @BartChris in #6947
- Show validation error dialog in metadata editor when updating catalog metadata by @solth in #6943
- Fix media cannot be deleted in metadata editor by @thomaslow in #6930
- Use locally stored 'xlink' and 'mods-xml' schema definition files for tests by @solth in #6951
- Increase resource cache limit by @henning-gerhardt in #6950
- Update Spring security components by @henning-gerhardt in #6956
- Save all processes when creating a process hierarchy by @BartChris in #6893
- Bump org.apache.activemq:activemq-client from 5.19.0 to 5.19.3 by @dependabot[bot] in #6960
- make text in disabled input fields selectable by @clemensmach in #6959
- [DOCUMENTATION] Fix typos and improve wording by @stweil in #6962
- Prevent exception during catalog import by @solth in #6966
- Remove unused image files by @henning-gerhardt in #6958
- Change Servlet Mapping and fix SVG exceptions by @BartChris in #6968
- Fix CSV action by @BartChris in #6970
- Fix outdated reference to ProcessForm in processFromTemplate.xhtml by @thomaslow in #6971
- Bump org.apache.activemq:activemq-client from 5.19.3 to 5.19.4 by @dependabot[bot] in #6972
- Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4 by @dependabot[bot] in #6973
- Avoid possible confusion between local variable and field with the same name by @solth in #6937
- Fix folder editing and deleting by @BartChris in #6946
- Refactor Bean Scopes: Task List by @thomaslow in #6906
- Update MariaDB java client to 3.5.8 by @henning-gerhardt in #6977
- Update JUnit to 6.0.3 by @henning-gerhardt in #6980
- Correctly sync available projects, roles and clients on add and delete by @BartChris in #6981
- Fix project-template editing by @BartChris in #6982
- Update flyway to version 12.3.0 by @henning-gerhardt in #6976
- Update and remove obsolete plexus dependencies by @henning-gerhardt in #6969
- Bump org.omnifaces:omnifaces from 4.7.1 to 4.7.5 by @dependabot[bot] in #6994
- Fix two EL variable comments by @solth in #6988
- Refactor mass import page to use base list view instead of base edit view by @solth in #6983
- Bump org.bouncycastle:bcprov-jdk18on from 1.78.1 to 1.84 by @dependabot[bot] in #6998
- Prevent error for undefined metadata groups by @oliver-stoehr in #6997
- Add missing 'referrer' parameter to 'takeOverTask' method calls by @solth in #6999
- Check whether process is used in ImportConfiguration before deletion by @solth in #7001
- Update to Spring security 7.0.x components by @henning-gerhardt in #6964
- Primefaces 13 by @solth in #6991
- Export only selected processes by @BartChris in #6985
- Fix page navigation clicking on task bell in process list by @thomaslow in #7012
- Fix MassIndexing error in MariaDB by @BartChris in #7009
- Rename misleading class variable by @henning-gerhardt in #7015
- Make CommentForm ViewScoped by @thomaslow in #7011
- Fix layout of 'set import configuration' popup dialog by @solth in #7017
- Upgrade to omnifaces v4.7.9 by @thomaslow in #7019
- Fix layout of popup dialog button wrappers by @solth in #7020
- Show process ID on task details page by @solth in #7021
- Fix problems in workflow editor by @BartChris in #6974
- Fix 'listProjectsTest' by re-ordering template details by @solth in #7022
- Enable text selection in process list by @BartChris in #7027
- Remove unused variable in Selenium test by @solth in #7029
- Bump org.springframework:spring-webmvc from 6.2.17 to 6.2.18 by @dependabot[bot] in #7032
- Fix search for number in search field by @BartChris in #7034
New Contributors
- @stefanCCS made their first contribution in #6945
Full Changelog: kitodo-production-3.9.0...kitodo-production-4.0.0