serialization: Java serialization companion code (UID drift, JEP 290/415 filters, records, JSON/Protobuf comparison)
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01KqJyCidz3ZgRyHABv2GVJh
This commit is contained in:
Executable
+57
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
# Regenerates every file in ../output/. Requires JDK25_HOME.
|
||||
set -euo pipefail
|
||||
[[ -z "${JDK25_HOME:-}" ]] && { echo "JDK25_HOME must be set" >&2; exit 1; }
|
||||
cd "$(dirname "$0")/.."
|
||||
OUT=output; mkdir -p "$OUT"
|
||||
export JAVA_HOME="$JDK25_HOME"
|
||||
mvn -q -f ../pom.xml -pl serialization -am package 2>&1 | grep -v -E "Picked up|^WARNING" || true
|
||||
J="$JDK25_HOME/bin/java"; JC="$JDK25_HOME/bin/javac"
|
||||
M2="${HOME}/.m2/repository"
|
||||
CP="target/classes:$(ls $M2/tools/jackson/core/jackson-databind/3.2.3/*.jar):$(ls $M2/tools/jackson/core/jackson-core/3.2.3/*.jar):$(ls $M2/com/fasterxml/jackson/core/jackson-annotations/*/*.jar | tail -1):$(ls $M2/com/google/protobuf/protobuf-java/4.36.2/*.jar)"
|
||||
run() { f=$1; shift; echo "==> $f"; "$J" "$@" 2>&1 | grep -v "Picked up" > "$OUT/$f"; }
|
||||
|
||||
# 01: the UID travels inside the stream
|
||||
run 01-uid-in-stream.txt -cp "$CP" com.ankurm.serialization.UidInStreamDemo
|
||||
|
||||
# 02/03: two versions of the same class, with and without an explicit serialVersionUID
|
||||
for mode in implicit explicit; do
|
||||
rm -rf target/drift-$mode; mkdir -p target/drift-$mode
|
||||
for v in v1 v2; do
|
||||
d=target/drift-$mode/$v/com/ankurm/serialization/drift; mkdir -p $d
|
||||
if [[ $mode == explicit ]]; then
|
||||
sed 's#/\*UID\*/#private static final long serialVersionUID = 1L;#' src/versions/$v/Account.java > $d/Account.java
|
||||
else
|
||||
sed 's#/\*UID\*/##' src/versions/$v/Account.java > $d/Account.java
|
||||
fi
|
||||
cp src/versions/common/*.java $d/
|
||||
$JC -d target/drift-$mode/$v/classes $d/*.java 2>&1 | grep -v "Picked up" || true
|
||||
done
|
||||
done
|
||||
{
|
||||
echo '$ # implicit serialVersionUID (none declared)'
|
||||
echo '$ java -cp v1 DriftWrite'
|
||||
"$J" -cp target/drift-implicit/v1/classes com.ankurm.serialization.drift.DriftWrite target/account-implicit.ser 2>&1 | grep -v "Picked up"
|
||||
echo '$ java -cp v2 DriftRead # v2 adds a field'
|
||||
"$J" -cp target/drift-implicit/v2/classes com.ankurm.serialization.drift.DriftRead target/account-implicit.ser 2>&1 | grep -v "Picked up"
|
||||
} > "$OUT/02-drift-implicit.txt"
|
||||
{
|
||||
echo '$ # explicit serialVersionUID = 1L'
|
||||
echo '$ java -cp v1 DriftWrite'
|
||||
"$J" -cp target/drift-explicit/v1/classes com.ankurm.serialization.drift.DriftWrite target/account-explicit.ser 2>&1 | grep -v "Picked up"
|
||||
echo '$ java -cp v2 DriftRead # v2 adds a field'
|
||||
"$J" -cp target/drift-explicit/v2/classes com.ankurm.serialization.drift.DriftRead target/account-explicit.ser 2>&1 | grep -v "Picked up"
|
||||
} > "$OUT/03-drift-explicit.txt"
|
||||
|
||||
run 04-readobject-runs-code.txt -cp "$CP" com.ankurm.serialization.ReadObjectRunsCodeDemo
|
||||
run 05-resource-limits.txt -Xmx256m -cp "$CP" com.ankurm.serialization.ResourceLimitsDemo
|
||||
run 06-records.txt -cp "$CP" com.ankurm.serialization.RecordsDemo
|
||||
{
|
||||
echo '$ java -Djdk.serialFilter="maxdepth=10;com.ankurm.serialization.*;java.lang.*;!*" FilterFactoryDemo'
|
||||
"$J" -Djdk.serialFilter='maxdepth=10;com.ankurm.serialization.*;java.lang.*;!*' -cp "$CP" com.ankurm.serialization.FilterFactoryDemo 2>&1 | grep -v "Picked up"
|
||||
} > "$OUT/07-filter-factory.txt"
|
||||
run 08-format-sizes.txt -cp "$CP" com.ankurm.serialization.FormatSizeDemo
|
||||
echo "==> JMH"
|
||||
"$J" -jar target/benchmarks.jar SerializationBenchmark -rf text -rff "$OUT/09-jmh-raw.txt" > /dev/null 2>&1
|
||||
cp target/surefire-reports/com.ankurm.serialization.SerializationTest.txt "$OUT/10-tests.txt"
|
||||
echo Done
|
||||
Reference in New Issue
Block a user