OPENJPA-2908 fix delayed collection proxies
some new methods in base interfaces did not get handled correctly
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java b/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
index 8c8f89c..6108d7d 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataDefaults.java
@@ -350,9 +350,11 @@
* user-defined.
*/
protected static boolean isUserDefined(Class<?> cls) {
- return cls != null && !cls.getName().startsWith("java.")
- && !cls.getName().startsWith ("javax.");
- }
+ return cls != null
+ && !cls.getName().startsWith("java.")
+ && !cls.getName().startsWith ("javax.")
+ && !cls.getName().startsWith ("jakarta.");
+ }
/**
* Affirms if the given method matches the following signature
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
index bef35b6..9a8bcc4 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedArrayListProxy.java
@@ -25,6 +25,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -407,6 +408,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public boolean equals(Object paramObject) {
if (!_directAccess && isDelayLoad()) {
load();
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java
index d15fedf..cb142f5 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedHashSetProxy.java
@@ -23,6 +23,7 @@
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -277,6 +278,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public boolean containsAll(Collection c) {
if (!_directAccess && isDelayLoad()) {
load();
@@ -284,6 +293,7 @@
return super.containsAll(c);
}
+
@Override
public String toString() {
if (!_directAccess && isDelayLoad()) {
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
index 15e6b1d..a156187 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedHashSetProxy.java
@@ -23,6 +23,7 @@
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedHashSet;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -276,6 +277,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public boolean containsAll(Collection c) {
if (!_directAccess && isDelayLoad()) {
load();
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
index 8df82db..77562c6 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedLinkedListProxy.java
@@ -25,6 +25,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -569,6 +570,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public boolean contains(Object object) {
if (!_directAccess && isDelayLoad()) {
load();
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
index 10f07da..54283b9 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedPriorityQueueProxy.java
@@ -24,6 +24,7 @@
import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.SortedSet;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -331,6 +332,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public boolean containsAll(Collection c) {
if (!_directAccess && isDelayLoad()) {
load();
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java
index 281bf9a..0bdbb4b 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedTreeSetProxy.java
@@ -25,6 +25,7 @@
import java.util.NavigableSet;
import java.util.SortedSet;
import java.util.TreeSet;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -316,6 +317,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public Comparator comparator() {
if (!_directAccess && isDelayLoad()) {
load();
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java
index ee2ea87..d714950 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/util/DelayedVectorProxy.java
@@ -26,6 +26,7 @@
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
+import java.util.function.IntFunction;
import org.apache.openjpa.kernel.AutoDetach;
import org.apache.openjpa.kernel.Broker;
@@ -526,6 +527,14 @@
}
@Override
+ public Object[] toArray(IntFunction generator) {
+ if (!_directAccess && isDelayLoad()) {
+ load();
+ }
+ return super.toArray(generator);
+ }
+
+ @Override
public synchronized boolean equals(Object paramObject) {
if (!_directAccess && isDelayLoad()) {
load();
diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
index b0acd13..8c97b39 100644
--- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
+++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
@@ -769,7 +769,7 @@
/**
* Adds a prefix <code>"openjpa."</code> to the given key, if necessary. A key is
* considered without prefix if it starts neither of <code>"openjpa."</code>,
- * <code>"java."</code> and <code>"javax."</code>.
+ * <code>"java."</code>, <code>"javax."</code> and {@code "jakarta."}.
*/
String fixPrefix(String key) {
return (key == null || hasKnownPrefix(key)) ? key : "openjpa."+key;
diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
index 246ea3b..1b104dc 100644
--- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
+++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/meta/ClassMetaDataIterator.java
@@ -66,6 +66,7 @@
ClassLoader loader, boolean topDown) {
// skip classes that can't have metadata
if (cls != null && (cls.isPrimitive()
+ || cls.getName().startsWith("jakarta.")
|| cls.getName().startsWith("java.")
|| cls.getName().startsWith("javax."))) {
_loader = null;
diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
index f56f2fc..1c38817 100644
--- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
+++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/TemporaryClassLoader.java
@@ -55,7 +55,8 @@
// "sun." is required for JDK 1.4, which has an access check for
// sun.reflect.GeneratedSerializationConstructorAccessor1
if (name.startsWith("java.") || name.startsWith("javax.")
- || name.startsWith("sun.") || name.startsWith("jdk.")) {
+ || name.startsWith("sun.") || name.startsWith("jdk.")
+ || name.startsWith("jakarta.") ) {
return Class.forName(name, resolve, getClass().getClassLoader());
}