From e3d48094341b03d79d9bc86ff919cd93c118e1aa Mon Sep 17 00:00:00 2001 From: hg-ms <53219833+hg-ms@users.noreply.github.com> Date: Mon, 26 Jan 2026 12:48:55 +0100 Subject: [PATCH 1/4] more java 26+ handler: YearMonth MonthDay added binary Handler BinaryHandlerMonthDay and BinaryHandlerYearMonth required for java 26+ compatible to java < 26 --- .../java/time/BinaryHandlerMonthDay.java | 76 +++++++++++++++++++ .../java/time/BinaryHandlerYearMonth.java | 76 +++++++++++++++++++ .../binary/types/BinaryPersistence.java | 4 + 3 files changed, 156 insertions(+) create mode 100644 persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java create mode 100644 persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java new file mode 100644 index 0000000..d7a40ae --- /dev/null +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java @@ -0,0 +1,76 @@ +package org.eclipse.serializer.persistence.binary.java.time; + +import java.time.MonthDay; + +import org.eclipse.serializer.persistence.binary.types.AbstractBinaryHandlerCustomNonReferentialFixedLength; +import org.eclipse.serializer.persistence.binary.types.Binary; +import org.eclipse.serializer.persistence.types.PersistenceLoadHandler; +import org.eclipse.serializer.persistence.types.PersistenceStoreHandler; + +/** + * Binary Handler for java.time.MonthDay + * Required for java >= 26 because of transient fields and + * changed binary format of MonthDay implementation. + * + * Binary Format must be compatibe with java < 26 versions! + * + */ +public class BinaryHandlerMonthDay extends AbstractBinaryHandlerCustomNonReferentialFixedLength +{ + static final long BINARY_OFFSET_MONTH = 0L; + static final long BINARY_OFFSET_DAY = BINARY_OFFSET_MONTH + Integer.BYTES; + static final long BINARY_LENGTH = BINARY_OFFSET_DAY + Integer.BYTES; + + /////////////////////////////////////////////////////////////////////////// + // static methods // + /////////////////// + + public static BinaryHandlerMonthDay New() + { + return new BinaryHandlerMonthDay(); + } + + + /////////////////////////////////////////////////////////////////////////// + // constructors // + ///////////////// + + protected BinaryHandlerMonthDay() + { + super( + MonthDay.class, + CustomFields( + CustomField(int.class, "month" ), + CustomField(int.class, "day" ) + ) + ); + } + + /////////////////////////////////////////////////////////////////////////// + // methods // + //////////// + /// + @Override + public void updateState(final Binary data, final MonthDay instance, final PersistenceLoadHandler handler) + { + // no-op + } + + @Override + public void store(final Binary data, final MonthDay instance, final long objectId, final PersistenceStoreHandler handler) + { + data.storeEntityHeader(BINARY_LENGTH, this.typeId(), objectId); + + data.store_int (BINARY_OFFSET_MONTH , instance.getMonthValue()); + data.store_int (BINARY_OFFSET_DAY , instance.getDayOfMonth()); + } + + @Override + public MonthDay create(final Binary data, final PersistenceLoadHandler handler) + { + return MonthDay.of( + data.read_int (BINARY_OFFSET_MONTH), + data.read_int (BINARY_OFFSET_DAY)); + } + +} diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java new file mode 100644 index 0000000..6d65e92 --- /dev/null +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java @@ -0,0 +1,76 @@ +package org.eclipse.serializer.persistence.binary.java.time; + +import java.time.YearMonth; + +import org.eclipse.serializer.persistence.binary.types.AbstractBinaryHandlerCustomNonReferentialFixedLength; +import org.eclipse.serializer.persistence.binary.types.Binary; +import org.eclipse.serializer.persistence.types.PersistenceLoadHandler; +import org.eclipse.serializer.persistence.types.PersistenceStoreHandler; + +/** + * Binary Handler for java.time.YearMonth + * Required for java >= 26 because of transient fields and + * changed binary format of YearMonth implementation. + * + * Binary Format must be compatibe with java < 26 versions! + * + */ +public class BinaryHandlerYearMonth extends AbstractBinaryHandlerCustomNonReferentialFixedLength +{ + static final long BINARY_OFFSET_YEAR = 0L; + static final long BINARY_OFFSET_MONTH = BINARY_OFFSET_YEAR + Integer.BYTES; + static final long BINARY_LENGTH = BINARY_OFFSET_MONTH + Integer.BYTES; + + /////////////////////////////////////////////////////////////////////////// + // static methods // + /////////////////// + + public static BinaryHandlerYearMonth New() + { + return new BinaryHandlerYearMonth(); + } + + + /////////////////////////////////////////////////////////////////////////// + // constructors // + ///////////////// + + protected BinaryHandlerYearMonth() + { + super( + YearMonth.class, + CustomFields( + CustomField(int.class, "year" ), + CustomField(int.class, "month" ) + ) + ); + } + + /////////////////////////////////////////////////////////////////////////// + // methods // + //////////// + /// + @Override + public void updateState(final Binary data, final YearMonth instance, final PersistenceLoadHandler handler) + { + // no-op + } + + @Override + public void store(final Binary data, final YearMonth instance, final long objectId, final PersistenceStoreHandler handler) + { + data.storeEntityHeader(BINARY_LENGTH, this.typeId(), objectId); + + data.store_int (BINARY_OFFSET_YEAR , instance.getYear()); + data.store_int (BINARY_OFFSET_MONTH , instance.getMonthValue()); + } + + @Override + public YearMonth create(final Binary data, final PersistenceLoadHandler handler) + { + return YearMonth.of( + data.read_int (BINARY_OFFSET_YEAR), + data.read_int (BINARY_OFFSET_MONTH)); + } + +} diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/types/BinaryPersistence.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/types/BinaryPersistence.java index 0461c17..c0805ff 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/types/BinaryPersistence.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/types/BinaryPersistence.java @@ -64,7 +64,9 @@ import org.eclipse.serializer.persistence.binary.java.sql.BinaryHandlerSqlTime; import org.eclipse.serializer.persistence.binary.java.sql.BinaryHandlerSqlTimestamp; import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerLocalDate; +import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerMonthDay; import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerPeriod; +import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerYearMonth; import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerZoneOffset; import org.eclipse.serializer.persistence.binary.java.util.BinaryHandlerArrayDeque; import org.eclipse.serializer.persistence.binary.java.util.BinaryHandlerArrayList; @@ -273,6 +275,8 @@ static final void initializeNativeTypeId( BinaryHandlerBitSet.New(), BinaryHandlerLocalDate.New(), + BinaryHandlerYearMonth.New(), + BinaryHandlerMonthDay.New(), /* (12.11.2019 TM)NOTE: * One might think that "empty" implementations of a collection interface would have no fields, anyway. From 79fad69319924195edc3f93c0f72c404c357a275 Mon Sep 17 00:00:00 2001 From: hg-ms <53219833+hg-ms@users.noreply.github.com> Date: Mon, 26 Jan 2026 12:52:29 +0100 Subject: [PATCH 2/4] License headers added --- .../binary/java/time/BinaryHandlerMonthDay.java | 14 ++++++++++++++ .../binary/java/time/BinaryHandlerYearMonth.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java index d7a40ae..6f164a6 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java @@ -1,5 +1,19 @@ package org.eclipse.serializer.persistence.binary.java.time; +/*- + * #%L + * Eclipse Serializer Persistence Binary + * %% + * Copyright (C) 2023 - 2026 MicroStream Software + * %% + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * #L% + */ + import java.time.MonthDay; import org.eclipse.serializer.persistence.binary.types.AbstractBinaryHandlerCustomNonReferentialFixedLength; diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java index 6d65e92..2321bbb 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java @@ -1,5 +1,19 @@ package org.eclipse.serializer.persistence.binary.java.time; +/*- + * #%L + * Eclipse Serializer Persistence Binary + * %% + * Copyright (C) 2023 - 2026 MicroStream Software + * %% + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * #L% + */ + import java.time.YearMonth; import org.eclipse.serializer.persistence.binary.types.AbstractBinaryHandlerCustomNonReferentialFixedLength; From 8ea1a61ef8cbeff4e39b85edf45809b11f4d3a94 Mon Sep 17 00:00:00 2001 From: hg-ms <53219833+hg-ms@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:21:44 +0100 Subject: [PATCH 3/4] java doc fix --- .../binary/java/time/BinaryHandlerLocalDate.java | 8 ++++++++ .../binary/java/time/BinaryHandlerMonthDay.java | 2 +- .../binary/java/time/BinaryHandlerYearMonth.java | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java index c6223cd..7598601 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java @@ -21,6 +21,14 @@ import org.eclipse.serializer.persistence.types.PersistenceLoadHandler; import org.eclipse.serializer.persistence.types.PersistenceStoreHandler; +/** + * Binary Handler for java.time.LocalDate + * Required for java ≥ 26 because of transient fields and + * changed binary format of YearMonth implementation. + * + * Binary Format must be compatibe with java < 26 versions! + * + */ public class BinaryHandlerLocalDate extends AbstractBinaryHandlerCustomNonReferentialFixedLength { static final long BINARY_OFFSET_YEAR = 0L; diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java index 6f164a6..032cecf 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java @@ -23,7 +23,7 @@ /** * Binary Handler for java.time.MonthDay - * Required for java >= 26 because of transient fields and + * Required for java ≥ 26 because of transient fields and * changed binary format of MonthDay implementation. * * Binary Format must be compatibe with java < 26 versions! diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java index 2321bbb..cb3ea2a 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java @@ -23,7 +23,7 @@ /** * Binary Handler for java.time.YearMonth - * Required for java >= 26 because of transient fields and + * Required for java ≥ 26 because of transient fields and * changed binary format of YearMonth implementation. * * Binary Format must be compatibe with java < 26 versions! From 5692ce57fb116a3144d9e0d3249252b8db1dcc8b Mon Sep 17 00:00:00 2001 From: hg-ms <53219833+hg-ms@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:35:50 +0100 Subject: [PATCH 4/4] hmtl --- .../persistence/binary/java/time/BinaryHandlerLocalDate.java | 2 +- .../persistence/binary/java/time/BinaryHandlerMonthDay.java | 2 +- .../persistence/binary/java/time/BinaryHandlerYearMonth.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java index 7598601..c80da4c 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerLocalDate.java @@ -26,7 +26,7 @@ * Required for java ≥ 26 because of transient fields and * changed binary format of YearMonth implementation. * - * Binary Format must be compatibe with java < 26 versions! + * Binary Format must be compatibe with java < 26 versions! * */ public class BinaryHandlerLocalDate extends AbstractBinaryHandlerCustomNonReferentialFixedLength diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java index 032cecf..d1448b0 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerMonthDay.java @@ -26,7 +26,7 @@ * Required for java ≥ 26 because of transient fields and * changed binary format of MonthDay implementation. * - * Binary Format must be compatibe with java < 26 versions! + * Binary Format must be compatibe with java < 26 versions! * */ public class BinaryHandlerMonthDay extends AbstractBinaryHandlerCustomNonReferentialFixedLength diff --git a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java index cb3ea2a..c5e587a 100644 --- a/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java +++ b/persistence/binary/src/main/java/org/eclipse/serializer/persistence/binary/java/time/BinaryHandlerYearMonth.java @@ -26,7 +26,7 @@ * Required for java ≥ 26 because of transient fields and * changed binary format of YearMonth implementation. * - * Binary Format must be compatibe with java < 26 versions! + * Binary Format must be compatibe with java < 26 versions! * */ public class BinaryHandlerYearMonth extends AbstractBinaryHandlerCustomNonReferentialFixedLength