From ba56a521f377a5bf2abf0d69e54d1eb361ffca3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Cristov=C3=A3o=20de=20Ara=C3=BAjo=20Silva=20Filho?= Date: Wed, 15 Jan 2025 09:18:57 -0300 Subject: [PATCH] OPENJPA-2908 * Bumped jakarta persistence API to 3.1.0 * Added necessary stub impl of methods (throws UnsupportedOperationException) * Tests passes, but actual impls must be made in probably different issues, one for each new features (https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1#jakarta-persistence-3-1) --- .../openjpa/lib/conf/ClassListValue.java | 23 +++--- .../persistence/PersistenceProviderImpl.java | 5 +- .../criteria/CriteriaBuilderImpl.java | 70 +++++++++++++++++++ .../persistence/criteria/Expressions.java | 13 +++- pom.xml | 2 +- 5 files changed, 94 insertions(+), 19 deletions(-) diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ClassListValue.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ClassListValue.java index 76a5b0ba93..b7b05b0577 100644 --- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ClassListValue.java +++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ClassListValue.java @@ -56,21 +56,18 @@ protected String getInternalString() { @Override protected void setInternalString(String val) { String[] vals = StringUtil.split(val, ",", 0); - if (vals != null) { - for (int i = 0; i < vals.length; i++) - vals[i] = vals[i].trim(); + if (vals.length == 0) { + set(null); + return; } - final ClassLoader loader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction()); - set(ofNullable(StringUtil.split(val, ",", 0)) - .map(it -> Stream.of(it).map(v -> { - try { - return loader.loadClass(v.trim()); - } catch (final ClassNotFoundException e) { - throw new IllegalStateException(e); - } - }).toArray(Class[]::new)) - .orElse(null)); + set(Stream.of(vals).map(v -> { + try { + return loader.loadClass(v.trim()); + } catch (final ClassNotFoundException e) { + throw new IllegalStateException(e); + } + }).toArray(Class[]::new)); } @Override diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java index 0e0a5e472e..e3d59a27c3 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java @@ -46,6 +46,7 @@ import jakarta.persistence.spi.PersistenceProvider; import jakarta.persistence.spi.PersistenceUnitInfo; import jakarta.persistence.spi.ProviderUtil; +import jakarta.persistence.spi.TransformerException; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; @@ -384,12 +385,12 @@ public ClassLoader getClassLoader(Class context, ClassLoader env) { @Override public byte[] transform(ClassLoader cl, String name, Class previousVersion, ProtectionDomain pd, byte[] bytes) - throws IllegalClassFormatException { + throws TransformerException { try { return _trans.transform(cl, name, previousVersion, pd, bytes); } catch (IllegalClassFormatException e) { - throw e; + throw new TransformerException(e); } } } diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaBuilderImpl.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaBuilderImpl.java index c57a18f4d2..7d109f25ea 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaBuilderImpl.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaBuilderImpl.java @@ -20,9 +20,13 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.nio.channels.UnsupportedAddressTypeException; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -983,4 +987,70 @@ public Predicate qbe(From from, T example) { public ComparisonStyle qbeStyle() { return new ComparisonStyle.Default(); } + + @Override + public Expression ceiling(Expression x) { + // TODO Implement ceiling op + throw new UnsupportedOperationException(); + } + + @Override + public Expression exp(Expression x) { + // TODO Implement exp op + throw new UnsupportedAddressTypeException(); + } + + @Override + public Expression floor(Expression x) { + // TODO Implement floor op + throw new UnsupportedOperationException(); + } + + @Override + public Expression ln(Expression x) { + // TODO Implement ln op + throw new UnsupportedOperationException(); + } + + @Override + public Expression localDate() { + // TODO Implement localDate + throw new UnsupportedOperationException(); + } + + @Override + public Expression localDateTime() { + // TODO Implement ceiling op + throw new UnsupportedOperationException(); + } + + @Override + public Expression localTime() { + // TODO Implement localTime op + throw new UnsupportedOperationException(); + } + + @Override + public Expression power(Expression x, Number y) { + // TODO Implement power op + throw new UnsupportedOperationException(); + } + + @Override + public Expression power(Expression x, Expression y) { + // TODO Implement power op + throw new UnsupportedOperationException(); + } + + @Override + public Expression round(Expression x, Integer n) { + // TODO Implement round op + throw new UnsupportedOperationException(); + } + + @Override + public Expression sign(Expression x) { + // TODO Implement sign op + throw new UnsupportedOperationException(); + } } diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java index a180c605a9..f7ca4633b6 100644 --- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java +++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java @@ -1612,7 +1612,7 @@ public StringBuilder asValue(AliasContext q) { } } - public static class SimpleCase extends ExpressionImpl implements CriteriaBuilder.SimpleCase { + public static class SimpleCase extends ExpressionImpl implements CriteriaBuilder.SimpleCase { private final List> thens = new ArrayList<>(); private final List> whens = new ArrayList<>(); private Expression otherwise; @@ -1632,12 +1632,19 @@ public Expression getExpression() { return caseOperand; } - public SimpleCase when(Expression when, Expression then) { - whens.add(when); + public SimpleCase when(Expression when, Expression then) { + whens.add((Expression) when); thens.add(then); return this; } + @Override + public SimpleCase when(Expression condition, R result) { + whens.add((Expression) condition); + thens.add(new Constant<>(result)); + return this; + } + @Override public SimpleCase when(C when, Expression then) { return when(new Constant<>(when), then); diff --git a/pom.xml b/pom.xml index bfe03dfee6..3e265ec7eb 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,7 @@ 2.12.0 2.1.1 - 3.0.0 + 3.1.0 2.0.1 3.0.2 3.1.0