Skip to content

Jollyday 2.0 Migration Guide

Tobias Schneider edited this page Feb 5, 2026 · 9 revisions

Before you start

Jollyday needs Java 17 or later.

2.0 Migration

Breaking Changes

Update the base JDK to 17

The baseline for Jollyday will be JDK 17 beginning with Jollyday 2.0.0

See #712

Avoid Redundant Configuration for Religious Holidays in descriptionPropertiesKey

The Jollyday library provides holiday definitions via XML configuration files and a Java API. In previous versions, holiday XML entries often duplicated the holiday type in the descriptionPropertiesKey attribute. For example:

<ChristianHoliday type="EASTER_MONDAY" descriptionPropertiesKey="christian.EASTER_MONDAY"/>

This redundancy can lead to unnecessary complexity, maintenance overhead, and potential inconsistencies in internationalization.

Issue #866 introduces an enhancement to remove redundant descriptionPropertiesKey values. The new approach recommends relying on the type attribute alone unless a custom description is explicitly needed:

<ChristianHoliday type="EASTER_MONDAY"/>

This change simplifies XML configurations, reduces duplication, and makes the holiday definitions easier to maintain. Only include descriptionPropertiesKey if you need a custom label that differs from the default type-based description.

See #866

Rename JapaneseHolidayManager to reflect the correct behaviour of bridging holidays

Please adapt your own jollyday.properties, if you have one, and replace

manager.impl.jp = de.focus_shift.jollyday.core.impl.JapaneseHolidayManager

with

manager.impl.jp = de.focus_shift.jollyday.core.impl.JapaneseBridgingHolidayManager

See #798

Add 'HolidayConfiguration' Postfix to SPI classes that are Holidays

To clearify that this classes are configuration classes and are not an instance of a holiday, we added the postfix HolidayConfiguration. Please adapt your own jollyday.properties, if you have one, and replace

# Configure the parsers to be used for each individual configuration type
parser.impl.de.focus_shift.jollyday.core.spi.Fixed                       = de.focus_shift.jollyday.core.parser.impl.FixedParser
parser.impl.de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth         = de.focus_shift.jollyday.core.parser.impl.FixedWeekdayInMonthParser
parser.impl.de.focus_shift.jollyday.core.spi.IslamicHoliday              = de.focus_shift.jollyday.core.parser.impl.IslamicHolidayParser
parser.impl.de.focus_shift.jollyday.core.spi.ChristianHoliday            = de.focus_shift.jollyday.core.parser.impl.ChristianHolidayParser
parser.impl.de.focus_shift.jollyday.core.spi.RelativeToFixed             = de.focus_shift.jollyday.core.parser.impl.RelativeToFixedParser
parser.impl.de.focus_shift.jollyday.core.spi.RelativeToWeekdayInMonth    = de.focus_shift.jollyday.core.parser.impl.RelativeToWeekdayInMonthParser
parser.impl.de.focus_shift.jollyday.core.spi.FixedWeekdayBetweenFixed    = de.focus_shift.jollyday.core.parser.impl.FixedWeekdayBetweenFixedParser
parser.impl.de.focus_shift.jollyday.core.spi.FixedWeekdayRelativeToFixed = de.focus_shift.jollyday.core.parser.impl.FixedWeekdayRelativeToFixedParser
parser.impl.de.focus_shift.jollyday.core.spi.EthiopianOrthodoxHoliday    = de.focus_shift.jollyday.core.parser.impl.EthiopianOrthodoxHolidayParser
parser.impl.de.focus_shift.jollyday.core.spi.RelativeToEasterSunday      = de.focus_shift.jollyday.core.parser.impl.RelativeToEasterSundayParser

with

# Configure the parsers to be used for each individual configuration type
parser.impl.de.focus_shift.jollyday.core.spi.FixedHolidayConfiguration                       = de.focus_shift.jollyday.core.parser.impl.FixedParser
parser.impl.de.focus_shift.jollyday.core.spi.FixedWeekdayInMonthHolidayConfiguration         = de.focus_shift.jollyday.core.parser.impl.FixedWeekdayInMonthParser
parser.impl.de.focus_shift.jollyday.core.spi.IslamicHolidayConfiguration                     = de.focus_shift.jollyday.core.parser.impl.IslamicHolidayParser
parser.impl.de.focus_shift.jollyday.core.spi.ChristianHolidayConfiguration                   = de.focus_shift.jollyday.core.parser.impl.ChristianHolidayParser
parser.impl.de.focus_shift.jollyday.core.spi.RelativeToFixedHolidayConfiguration             = de.focus_shift.jollyday.core.parser.impl.RelativeToFixedParser
parser.impl.de.focus_shift.jollyday.core.spi.RelativeToWeekdayInMonthHolidayConfiguration    = de.focus_shift.jollyday.core.parser.impl.RelativeToWeekdayInMonthParser
parser.impl.de.focus_shift.jollyday.core.spi.FixedWeekdayBetweenFixedHolidayConfiguration    = de.focus_shift.jollyday.core.parser.impl.FixedWeekdayBetweenFixedParser
parser.impl.de.focus_shift.jollyday.core.spi.FixedWeekdayRelativeToFixedHolidayConfiguration = de.focus_shift.jollyday.core.parser.impl.FixedWeekdayRelativeToFixedParser
parser.impl.de.focus_shift.jollyday.core.spi.EthiopianOrthodoxHolidayConfiguration           = de.focus_shift.jollyday.core.parser.impl.EthiopianOrthodoxHolidayParser
parser.impl.de.focus_shift.jollyday.core.spi.RelativeToEasterSundayHolidayConfiguration      = de.focus_shift.jollyday.core.parser.impl.RelativeToEasterSundayParser

See #711

Enhancements

Migrate from Jackson 2 to Jackson 3

The jollyday-jackson module now uses Jackson 3 to take advantage of:

  • Improved performance and memory efficiency
  • Compatibility with modern Java features
  • Reduced technical debt and better future-proofing

See #863