Date: Mon, 11 Oct 2021 22:48:18 +1300
Subject: [PATCH 14/91] Weak reference based PersistenceContext for streaming
queries
---
.../io/ebean/bean/PersistenceContext.java | 11 -
.../server/core/OrmQueryRequest.java | 14 -
.../server/query/CQueryIteratorSimple.java | 1 -
.../query/CQueryIteratorWithBuffer.java | 2 -
.../DefaultPersistenceContext.java | 98 +------
.../transaction/WeakPersistenceContext.java | 272 ++++++++++++++++++
.../DefaultPersistenceContextTest.java | 98 ++-----
7 files changed, 298 insertions(+), 198 deletions(-)
create mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java
diff --git a/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java b/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java
index 9d67499d1..33215595a 100644
--- a/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java
+++ b/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java
@@ -64,17 +64,6 @@ public interface PersistenceContext {
*/
PersistenceContext forIterate();
- /**
- * Return a new Persistence context during iteration of large query result.
- */
- PersistenceContext forIterateReset();
-
- /**
- * Return true if the persistence context has grown and hit the 'reset limit'
- * during large query iteration.
- */
- boolean resetLimit();
-
/**
* Wrapper on a bean to also indicate if a bean has been deleted.
*
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
index 85d89ffe2..a56319fd4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
@@ -263,20 +263,6 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
return jsonRead;
}
- /**
- * For iterate queries reset the persistenceContext and loadContext.
- */
- public void flushPersistenceContextOnIterate() {
- if (persistenceContext.resetLimit()) {
- persistenceContext = persistenceContext.forIterateReset();
- loadContext.resetPersistenceContext(persistenceContext);
- if (jsonRead != null) {
- jsonRead.setPersistenceContext(persistenceContext);
- jsonRead.setLoadContext(loadContext);
- }
- }
- }
-
/**
* Get the TransactionContext either explicitly set on the query or
* transaction scoped.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java
index d438ec747..6d183b936 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java
@@ -26,7 +26,6 @@ final class CQueryIteratorSimple implements QueryIterator {
public boolean hasNext() {
boolean ret = false;
try {
- request.flushPersistenceContextOnIterate();
ret = cquery.hasNext();
return ret;
} catch (SQLException e) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java
index ad1a924b5..3df436716 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java
@@ -35,8 +35,6 @@ final class CQueryIteratorWithBuffer implements QueryIterator {
try {
if (buffer.isEmpty() && moreToLoad) {
// load buffer
- request.flushPersistenceContextOnIterate();
-
int i = -1;
while (moreToLoad && ++i < bufferSize) {
if (cquery.hasNext()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
index 169ca59a3..911c54c47 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
@@ -25,15 +25,9 @@ import java.util.concurrent.locks.ReentrantLock;
*/
public final class DefaultPersistenceContext implements SpiPersistenceContext {
- /**
- * Map used hold caches. One cache per bean type.
- */
private final HashMap, ClassContext> typeCache = new HashMap<>();
-
private final ReentrantLock lock = new ReentrantLock();
- private int putCount;
-
/**
* Create a new PersistenceContext.
*/
@@ -41,48 +35,15 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
/**
- * Create as a shallow copy with initial or types that have not been added to.
- */
- private DefaultPersistenceContext(DefaultPersistenceContext parent, boolean initial) {
- for (Map.Entry, ClassContext> entry : parent.typeCache.entrySet()) {
- typeCache.put(entry.getKey(), entry.getValue().copy(initial));
- }
- }
-
- /**
- * Return the initial shallow copy with each ClassContext noting it's initialSize (to detect additions).
+ * Return a PersistenceContext to use for streaming queries.
*/
@Override
public PersistenceContext forIterate() {
- return new DefaultPersistenceContext(this, true);
- }
-
- /**
- * Return a shallow copy including each ClassContext that has had no additions (still at initialSize).
- */
- @Override
- public PersistenceContext forIterateReset() {
- return new DefaultPersistenceContext(this, false);
- }
-
- @Override
- public boolean resetLimit() {
- lock.lock();
- try {
- if (putCount < 100) {
- return false;
- }
- putCount = 0;
- for (ClassContext value : typeCache.values()) {
- if (value.resetLimit()) {
- return true;
- }
- }
- // checking after another 100 puts
- return false;
- } finally {
- lock.unlock();
+ WeakPersistenceContext weak = new WeakPersistenceContext();
+ for (ClassContext value : typeCache.values()) {
+ weak.add(value.rootType, value.deleteSet, value.map);
}
+ return weak;
}
/**
@@ -92,7 +53,6 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public void put(Class> rootType, Object id, Object bean) {
lock.lock();
try {
- putCount++;
classContext(rootType).put(id, bean);
} finally {
lock.unlock();
@@ -103,7 +63,6 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public Object putIfAbsent(Class> rootType, Object id, Object bean) {
lock.lock();
try {
- putCount++;
return classContext(rootType).putIfAbsent(id, bean);
} finally {
lock.unlock();
@@ -232,61 +191,18 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private final Map map = new HashMap<>();
private final Class> rootType;
private Set deleteSet;
- private int initialSize;
- private ClassContext parent;
private ClassContext(Class> rootType) {
this.rootType = rootType;
}
- /**
- * Create as a shallow copy.
- */
- private ClassContext(ClassContext source, boolean initial) {
- this.rootType = source.rootType;
- if (initial || source.isTransfer()) {
- parent = source.transferParent();
- initialSize = parent.size();
- if (source.deleteSet != null) {
- deleteSet = new HashSet<>(source.deleteSet);
- }
- }
- }
-
- /**
- * True if this should be transferred to a new iterator persistence context.
- */
- private boolean isTransfer() {
- // map not added to and has some original/parent beans
- return map.isEmpty() && initialSize > 0;
- }
-
- private ClassContext transferParent() {
- return (parent != null) ? parent : this;
- }
-
- /**
- * Return a shallow copy if initial copy or it has not grown (still at initialSize).
- */
- private ClassContext copy(boolean initial) {
- return new ClassContext(this, initial);
- }
-
- /**
- * Return true if grown above the reset limit size of 1000.
- */
- private boolean resetLimit() {
- return map.size() > 1000;
- }
-
@Override
public String toString() {
return "size:" + map.size();
}
private Object get(Object id) {
- Object bean = (parent == null) ? null : parent.get(id);
- return bean != null ? bean : map.get(id);
+ return map.get(id);
}
private WithOption getWithOption(Object id) {
@@ -313,7 +229,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
private int size() {
- return map.size() + initialSize;
+ return map.size();
}
private void clear() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java
new file mode 100644
index 000000000..4d7371bf9
--- /dev/null
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java
@@ -0,0 +1,272 @@
+package io.ebeaninternal.server.transaction;
+
+import io.ebean.bean.EntityBean;
+import io.ebean.bean.PersistenceContext;
+import io.ebeaninternal.api.SpiBeanType;
+import io.ebeaninternal.api.SpiBeanTypeManager;
+import io.ebeaninternal.api.SpiPersistenceContext;
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.util.*;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * Weak reference based PersistenceContext for "streaming queries".
+ */
+final class WeakPersistenceContext implements SpiPersistenceContext {
+
+ private final HashMap, WeakClassContext> typeCache = new HashMap<>();
+ private final ReentrantLock lock = new ReentrantLock();
+
+ WeakPersistenceContext() {
+ }
+
+ /**
+ * Load from the initiating persistence context.
+ */
+ void add(Class> rootType, Set deleteSet, Map map) {
+ typeCache.put(rootType, new WeakClassContext( rootType, deleteSet, map));
+ }
+
+ @Override
+ public PersistenceContext forIterate() {
+ return this;
+ }
+
+ @Override
+ public void put(Class> rootType, Object id, Object bean) {
+ lock.lock();
+ try {
+ classContext(rootType).put(id, bean);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public Object putIfAbsent(Class> rootType, Object id, Object bean) {
+ lock.lock();
+ try {
+ return classContext(rootType).putIfAbsent(id, bean);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public Object get(Class> rootType, Object id) {
+ lock.lock();
+ try {
+ return classContext(rootType).get(id);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public WithOption getWithOption(Class> rootType, Object id) {
+ lock.lock();
+ try {
+ return classContext(rootType).getWithOption(id);
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public int size(Class> rootType) {
+ lock.lock();
+ try {
+ WeakClassContext classMap = typeCache.get(rootType);
+ return classMap == null ? 0 : classMap.size();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void clear() {
+ lock.lock();
+ try {
+ typeCache.clear();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void clear(Class> rootType) {
+ lock.lock();
+ try {
+ WeakClassContext classMap = typeCache.get(rootType);
+ if (classMap != null) {
+ classMap.clear();
+ }
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void deleted(Class> rootType, Object id) {
+ lock.lock();
+ try {
+ WeakClassContext classMap = typeCache.get(rootType);
+ if (classMap != null && id != null) {
+ classMap.deleted(id);
+ }
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void clear(Class> rootType, Object id) {
+ lock.lock();
+ try {
+ WeakClassContext classMap = typeCache.get(rootType);
+ if (classMap != null && id != null) {
+ classMap.remove(id);
+ }
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public List dirtyBeans(SpiBeanTypeManager manager) {
+ lock.lock();
+ try {
+ List list = new ArrayList<>();
+ for (WeakClassContext classContext : typeCache.values()) {
+ classContext.dirtyBeans(manager, list);
+ }
+ return list;
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public String toString() {
+ lock.lock();
+ try {
+ return typeCache.toString();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ private WeakClassContext classContext(Class> rootType) {
+ return typeCache.computeIfAbsent(rootType, k -> new WeakClassContext(rootType));
+ }
+
+ private static class WeakClassContext {
+
+ private final ReferenceQueue queue = new ReferenceQueue<>();
+ private final Map map = new HashMap<>();
+ private final Class> rootType;
+ private Set deleteSet;
+
+ private WeakClassContext(Class> rootType) {
+ this.rootType = rootType;
+ }
+
+ private WeakClassContext(Class> rootType, Set initialDeleteSet, Map initialMap) {
+ this.rootType = rootType;
+ this.deleteSet = initialDeleteSet == null ? null : new HashSet<>(initialDeleteSet);
+ for (Map.Entry entry : initialMap.entrySet()) {
+ Object id = entry.getKey();
+ map.put(id, new BeanRef(id, entry.getValue(), queue));
+ }
+ }
+
+ private void expungeStaleEntries() {
+ Reference> ref;
+ while ((ref = queue.poll()) != null) {
+ map.remove(((BeanRef)ref).key());
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "size:" + map.size();
+ }
+
+ private Object get(Object id) {
+ expungeStaleEntries();
+ Reference ref = map.get(id);
+ return ref == null ? null : ref.get();
+ }
+
+ private WithOption getWithOption(Object id) {
+ if (deleteSet != null && deleteSet.contains(id)) {
+ return WithOption.DELETED;
+ }
+ Object bean = get(id);
+ return (bean == null) ? null : new WithOption(bean);
+ }
+
+ private Object putIfAbsent(Object id, Object bean) {
+ Object existingValue = get(id);
+ if (existingValue != null) {
+ // it is not absent
+ return existingValue;
+ }
+ // put the new value and return null indicating the put was successful
+ put(id, bean);
+ return null;
+ }
+
+ private void put(Object id, Object b) {
+ expungeStaleEntries();
+ map.put(id, new BeanRef(id, b, queue));
+ }
+
+ private int size() {
+ return map.size();
+ }
+
+ private void clear() {
+ map.clear();
+ }
+
+ private void remove(Object id) {
+ map.remove(id);
+ }
+
+ private void deleted(Object id) {
+ if (deleteSet == null) {
+ deleteSet = new HashSet<>();
+ }
+ deleteSet.add(id);
+ map.remove(id);
+ }
+
+ /**
+ * Add the dirty beans to the list.
+ */
+ void dirtyBeans(SpiBeanTypeManager manager, List list) {
+ final SpiBeanType beanType = manager.beanType(rootType);
+ for (BeanRef value : map.values()) {
+ EntityBean bean = (EntityBean) value.get();
+ if (bean != null && (bean._ebean_getIntercept().isDirty() || beanType.isToManyDirty(bean))) {
+ list.add(bean);
+ }
+ }
+ }
+ }
+
+ private static class BeanRef extends WeakReference {
+ private final Object key;
+ private BeanRef(Object key, Object referent, ReferenceQueue super Object> q) {
+ super(referent, q);
+ this.key = key;
+ }
+ Object key() {
+ return key;
+ }
+ }
+}
diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java b/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java
index 4983c31e3..1aa4af51c 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java
@@ -6,16 +6,13 @@ import org.junit.jupiter.api.Test;
import org.tests.model.basic.*;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-public class DefaultPersistenceContextTest {
+class DefaultPersistenceContextTest {
private final Customer customer42;
-
private final Car car1;
- public DefaultPersistenceContextTest() {
+ DefaultPersistenceContextTest() {
customer42 = new Customer();
customer42.setId(42);
car1 = new Car();
@@ -37,8 +34,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void put_get_withInheritance() {
-
+ void put_get_withInheritance() {
PersistenceContext pc = pc();
pc.put(root(Vehicle.class), 1, car1);
@@ -47,8 +43,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void put_get() {
-
+ void put_get() {
PersistenceContext pc = pc();
pc.put(Customer.class, customer42.getId(), customer42);
@@ -57,8 +52,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void putIfAbsent_when_absent() {
-
+ void putIfAbsent_when_absent() {
PersistenceContext pc = pc();
Object existing = pc.putIfAbsent(Customer.class, customer42.getId(), customer42);
@@ -66,8 +60,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void putIfAbsent_when_notAbsent() {
-
+ void putIfAbsent_when_notAbsent() {
PersistenceContext pc = pcWith42();
Object existing = pc.putIfAbsent(Customer.class, customer42.getId(), new Customer());
@@ -75,30 +68,28 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void get_when_empty() {
+ void get_when_empty() {
PersistenceContext pc = pc();
Object found = pc.get(Customer.class, 42);
assertThat(found).isNull();
}
@Test
- public void get_when_there() {
+ void get_when_there() {
PersistenceContext pc = pcWith42();
Object found = pc.get(Customer.class, 42);
assertThat(found).isSameAs(customer42);
}
@Test
- public void getWithOption_when_empty() {
-
+ void getWithOption_when_empty() {
PersistenceContext pc = pc();
PersistenceContext.WithOption withOption = pc.getWithOption(Customer.class, 42);
assertThat(withOption).isNull();
}
@Test
- public void getWithOption_when_there() {
-
+ void getWithOption_when_there() {
PersistenceContext pc = pcWith42();
PersistenceContext.WithOption withOption = pc.getWithOption(Customer.class, 42);
@@ -106,8 +97,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void getWithOption_when_deleted() {
-
+ void getWithOption_when_deleted() {
PersistenceContext pc = pcWith42();
pc.deleted(Customer.class, 42);
@@ -117,38 +107,33 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void size_when_empty() {
-
+ void size_when_empty() {
PersistenceContext pc = pc();
assertThat(pc.size(Customer.class)).isEqualTo(0);
}
@Test
- public void size_when_some() {
-
+ void size_when_some() {
PersistenceContext pc = pcWith42();
assertThat(pc.size(Customer.class)).isEqualTo(1);
}
@Test
- public void clear() {
-
+ void clear() {
PersistenceContext pc = pcWith42();
pc.clear();
assertThat(pc.size(Customer.class)).isEqualTo(0);
}
@Test
- public void clearClass() {
-
+ void clearClass() {
PersistenceContext pc = pcWith42();
pc.clear(Customer.class);
assertThat(pc.size(Customer.class)).isEqualTo(0);
}
@Test
- public void clearClassAndId() {
-
+ void clearClassAndId() {
PersistenceContext pc = pcWith42();
pc.put(Customer.class, 43, new Customer());
@@ -160,7 +145,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void forIterate() {
+ void forIterate() {
final DefaultPersistenceContext pc = pcWith42();
final Object origCustomer42 = pc.get(Customer.class, 42);
@@ -177,7 +162,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void forIterate_many() {
+ void forIterate_many() {
DefaultPersistenceContext pc = new DefaultPersistenceContext();
addCustomers(pc, 1, 100);
addContacts(pc, 1, 1010);
@@ -191,44 +176,7 @@ public class DefaultPersistenceContextTest {
}
@Test
- public void forIterate_resetLimit_forIterateReset() {
- DefaultPersistenceContext initialPc = new DefaultPersistenceContext();
- addCustomers(initialPc, 1, 100);
- addContacts(initialPc, 1, 1010);
-
- final PersistenceContext pcIterate = initialPc.forIterate();
- assertFalse(pcIterate.resetLimit());
-
- // added 900 NEW contact beans
- addContacts(pcIterate, 2000, 900);
- assertThat(pcIterate.size(Contact.class)).isEqualTo(1910);
- assertFalse(pcIterate.resetLimit());
-
- // boundary, added 1000 NEW contact beans (still false)
- addContacts(pcIterate, 3000, 100);
- assertFalse(pcIterate.resetLimit());
-
- addContacts(pcIterate, 4000, 1);
- addProducts(pcIterate, 1, 100);
- // ACT - over 1000 added beans boundary for contacts so returns true
- assertTrue(pcIterate.resetLimit());
-
- assertThat(pcIterate.size(Contact.class)).isEqualTo(2011);
- assertThat(pcIterate.size(Customer.class)).isEqualTo(100);
- assertThat(pcIterate.size(Product.class)).isEqualTo(100);
-
- // ACT - obtain new PC forIterateReset
- PersistenceContext pcReset = pcIterate.forIterateReset();
-
- // keeps original customer beans as no new added beans there
- assertThat(pcReset.size(Customer.class)).isEqualTo(100); // customers didn't change
- // added beans to contacts and products so those where reset
- assertThat(pcReset.size(Contact.class)).isEqualTo(0);
- assertThat(pcReset.size(Product.class)).isEqualTo(0);
- }
-
- @Test
- public void toString_sillyTest() {
+ void toString_sillyTest() {
DefaultPersistenceContext pc = pcWith42();
assertThat(pc.toString()).contains("org.tests.model.basic.Customer");
}
@@ -248,12 +196,4 @@ public class DefaultPersistenceContextTest {
pc.put(Contact.class, i, bean);
}
}
-
- private void addProducts(PersistenceContext pc, int start, int loop) {
- for (int i = start; i < start + loop; i++) {
- Product bean = new Product();
- bean.setId(i);
- pc.put(Product.class, i, bean);
- }
- }
}
From 8dbd290119fd001d8ebffa383fd13189e8e3ce0e Mon Sep 17 00:00:00 2001
From: Roland Praml
Date: Fri, 8 Oct 2021 09:27:38 +0200
Subject: [PATCH 15/91] Remove: ReadJson.resetContext as it is not used
---
.../io/ebean/text/json/JsonBeanReader.java | 2 +-
.../ebeaninternal/api/json/SpiJsonReader.java | 2 +-
.../server/deploy/BeanDescriptorJsonHelp.java | 2 +-
.../server/text/json/DJsonBeanReader.java | 4 ++--
.../server/text/json/ReadJson.java | 18 +++++-------------
.../io/ebean/text/json/JsonBeanReaderTest.java | 2 +-
6 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java b/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
index fc948016f..7acdb976f 100644
--- a/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
+++ b/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
@@ -20,7 +20,7 @@ public interface JsonBeanReader {
/**
* Create a new reader taking the context from the existing one but using a new JsonParser.
*/
- JsonBeanReader forJson(JsonParser moreJson, boolean resetContext);
+ JsonBeanReader forJson(JsonParser moreJson);
/**
* Add a bean explicitly to the persistence context.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
index aaf4e2ce8..4594cbe25 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
@@ -14,7 +14,7 @@ public interface SpiJsonReader {
PersistenceContext getPersistenceContext();
- SpiJsonReader forJson(JsonParser moreJson, boolean resetContext);
+ SpiJsonReader forJson(JsonParser moreJson);
void persistenceContextPut(Object beanId, T currentBean);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
index 5abb988c7..b11c987bb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
@@ -90,7 +90,7 @@ final class BeanDescriptorJsonHelp {
return null;
}
JsonParser newParser = node.traverse();
- SpiJsonReader newReader = jsonRead.forJson(newParser, false);
+ SpiJsonReader newReader = jsonRead.forJson(newParser);
// check for the discriminator value to determine the correct sub type
String discColumn = inheritInfo.getRoot().getDiscriminatorColumn();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java
index 8193d397c..79465e037 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java
@@ -45,7 +45,7 @@ public final class DJsonBeanReader implements JsonBeanReader {
}
@Override
- public JsonBeanReader forJson(JsonParser moreJson, boolean resetContext) {
- return new DJsonBeanReader<>(desc, readJson.forJson(moreJson, resetContext));
+ public JsonBeanReader forJson(JsonParser moreJson) {
+ return new DJsonBeanReader<>(desc, readJson.forJson(moreJson));
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java
index f685188b6..7acf4e531 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java
@@ -50,22 +50,14 @@ public final class ReadJson implements SpiJsonReader {
/**
* Construct when transferring load context, persistence context, object mapper etc to a new ReadJson instance.
*/
- private ReadJson(JsonParser moreJson, ReadJson source, boolean resetContext) {
+ private ReadJson(JsonParser moreJson, ReadJson source) {
this.parser = moreJson;
this.rootDesc = source.rootDesc;
this.pathStack = source.pathStack;
this.visitorMap = source.visitorMap;
this.objectMapper = source.objectMapper;
- if (resetContext) {
- this.persistenceContext = new DefaultPersistenceContext();
- this.loadContext = source.loadContext;
- if (loadContext != null) {
- loadContext.resetPersistenceContext(persistenceContext);
- }
- } else {
- this.persistenceContext = source.persistenceContext;
- this.loadContext = source.loadContext;
- }
+ this.persistenceContext = source.persistenceContext;
+ this.loadContext = source.loadContext;
}
private LoadContext initLoadContext(BeanDescriptor> desc, JsonReadOptions readOptions) {
@@ -96,8 +88,8 @@ public final class ReadJson implements SpiJsonReader {
* Return a new instance of ReadJson using the existing context but with a new JsonParser.
*/
@Override
- public SpiJsonReader forJson(JsonParser moreJson, boolean resetContext) {
- return new ReadJson(moreJson, this, resetContext);
+ public SpiJsonReader forJson(JsonParser moreJson) {
+ return new ReadJson(moreJson, this);
}
/**
diff --git a/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java b/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java
index 6cf8f52db..a60b18d3f 100644
--- a/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java
+++ b/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java
@@ -47,7 +47,7 @@ public class JsonBeanReaderTest extends BaseTestCase {
beanReader.read();
JsonParser more = getParser();
- JsonBeanReader moreReader = beanReader.forJson(more, true);
+ JsonBeanReader moreReader = beanReader.forJson(more);
Customer customer = moreReader.read();
assertThat(customer.getId()).isEqualTo(42);
From 3f5009aa91b5ad9b009edb8fa392fc853a2a4409 Mon Sep 17 00:00:00 2001
From: Roland Praml
Date: Mon, 11 Oct 2021 16:25:21 +0200
Subject: [PATCH 16/91] Use WeakReferences when in iterate query mode
---
.../io/ebean/bean/PersistenceContext.java | 9 +-
.../server/core/OrmQueryRequest.java | 15 +-
.../DefaultPersistenceContext.java | 131 +++++++--
.../transaction/WeakPersistenceContext.java | 272 ------------------
.../tests/basic/TestPersistenceContext.java | 66 +++++
5 files changed, 195 insertions(+), 298 deletions(-)
delete mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java
diff --git a/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java b/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java
index 33215595a..ed03080cd 100644
--- a/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java
+++ b/ebean-api/src/main/java/io/ebean/bean/PersistenceContext.java
@@ -60,10 +60,15 @@ public interface PersistenceContext {
int size(Class> rootType);
/**
- * Return a copy of the Persistence context to use for large query iteration.
+ * Signalizes the PersistenceContext, the begin for large query iteration.
*/
- PersistenceContext forIterate();
+ void beginIterate();
+ /**
+ * Signalizes the PersistenceContext, the end for large query iteration.
+ */
+ void endIterate();
+
/**
* Wrapper on a bean to also indicate if a bean has been deleted.
*
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
index a56319fd4..6ef1e352b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
@@ -225,6 +225,9 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
createdTransaction = true;
}
persistenceContext = persistenceContext(query, transaction);
+ if (Type.ITERATE == query.getType()) {
+ persistenceContext.beginIterate();
+ }
loadContext = new DLoadContext(this, secondaryQueries);
}
@@ -233,6 +236,9 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
*/
@Override
public void rollbackTransIfRequired() {
+ if (Type.ITERATE == query.getType()) {
+ persistenceContext.endIterate();
+ }
if (createdTransaction) {
try {
transaction.end();
@@ -278,11 +284,7 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
if (scope == PersistenceContextScope.QUERY || t == null) {
return new DefaultPersistenceContext();
}
- if (Type.ITERATE == query.getType()) {
- return t.getPersistenceContext().forIterate();
- } else {
- return t.getPersistenceContext();
- }
+ return t.getPersistenceContext();
}
/**
@@ -292,6 +294,9 @@ public final class OrmQueryRequest extends BeanRequest implements SpiOrmQuery
*/
@Override
public void endTransIfRequired() {
+ if (Type.ITERATE == query.getType()) {
+ persistenceContext.endIterate();
+ }
if (createdTransaction && transaction.isActive()) {
transaction.commit();
if (query.getType().isUpdate()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
index 911c54c47..1ff3d44fa 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
@@ -6,6 +6,9 @@ import io.ebeaninternal.api.SpiBeanType;
import io.ebeaninternal.api.SpiBeanTypeManager;
import io.ebeaninternal.api.SpiPersistenceContext;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
@@ -27,6 +30,14 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private final HashMap, ClassContext> typeCache = new HashMap<>();
private final ReentrantLock lock = new ReentrantLock();
+ private final ReferenceQueue queue = new ReferenceQueue();
+
+ /**
+ * When we are inside an iterate loop, we will add only WeakReferences. This
+ * allows the JVM GC to collect beans, which are not referenced elsewhere. In
+ * normal operation, we will use hard references, to avoid performance impact
+ */
+ private int iterateDepth;
/**
* Create a new PersistenceContext.
@@ -34,16 +45,25 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public DefaultPersistenceContext() {
}
- /**
- * Return a PersistenceContext to use for streaming queries.
- */
@Override
- public PersistenceContext forIterate() {
- WeakPersistenceContext weak = new WeakPersistenceContext();
- for (ClassContext value : typeCache.values()) {
- weak.add(value.rootType, value.deleteSet, value.map);
+ public void beginIterate() {
+ lock.lock();
+ try {
+ iterateDepth++;
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void endIterate() {
+ lock.lock();
+ try {
+ iterateDepth--;
+ expungeStaleEntries(); // when leaving the iterator, cleanup.
+ } finally {
+ lock.unlock();
}
- return weak;
}
/**
@@ -53,7 +73,8 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public void put(Class> rootType, Object id, Object bean) {
lock.lock();
try {
- classContext(rootType).put(id, bean);
+ expungeStaleEntries();
+ classContext(rootType).useReferences(iterateDepth > 0).put(id, bean);
} finally {
lock.unlock();
}
@@ -63,7 +84,8 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public Object putIfAbsent(Class> rootType, Object id, Object bean) {
lock.lock();
try {
- return classContext(rootType).putIfAbsent(id, bean);
+ expungeStaleEntries();
+ return classContext(rootType).useReferences(iterateDepth > 0).putIfAbsent(id, bean);
} finally {
lock.unlock();
}
@@ -76,6 +98,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public Object get(Class> rootType, Object id) {
lock.lock();
try {
+ expungeStaleEntries();
return classContext(rootType).get(id);
} finally {
lock.unlock();
@@ -86,6 +109,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public WithOption getWithOption(Class> rootType, Object id) {
lock.lock();
try {
+ expungeStaleEntries();
return classContext(rootType).getWithOption(id);
} finally {
lock.unlock();
@@ -99,6 +123,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public int size(Class> rootType) {
lock.lock();
try {
+ expungeStaleEntries();
ClassContext classMap = typeCache.get(rootType);
return classMap == null ? 0 : classMap.size();
} finally {
@@ -114,6 +139,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
lock.lock();
try {
typeCache.clear();
+ expungeStaleEntries();
} finally {
lock.unlock();
}
@@ -127,6 +153,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
if (classMap != null) {
classMap.clear();
}
+ expungeStaleEntries();
} finally {
lock.unlock();
}
@@ -140,6 +167,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
if (classMap != null && id != null) {
classMap.deleted(id);
}
+ expungeStaleEntries();
} finally {
lock.unlock();
}
@@ -153,6 +181,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
if (classMap != null && id != null) {
classMap.remove(id);
}
+ expungeStaleEntries();
} finally {
lock.unlock();
}
@@ -162,6 +191,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
public List dirtyBeans(SpiBeanTypeManager manager) {
lock.lock();
try {
+ expungeStaleEntries();
List list = new ArrayList<>();
for (ClassContext classContext : typeCache.values()) {
classContext.dirtyBeans(manager, list);
@@ -172,10 +202,23 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
}
+ /**
+ * When there is a queue, poll it to remove stale entries from the map. Note:
+ * This is always done AFTER useReferences was called with
+ * true. Polling an empty queue has no performance impact.
+ */
+ private void expungeStaleEntries() {
+ Reference> ref;
+ while ((ref = queue.poll()) != null) {
+ ((BeanRef)ref).expunge();
+ }
+ }
+
@Override
public String toString() {
lock.lock();
try {
+ expungeStaleEntries();
return typeCache.toString();
} finally {
lock.unlock();
@@ -183,26 +226,47 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
private ClassContext classContext(Class> rootType) {
- return typeCache.computeIfAbsent(rootType, k -> new ClassContext(rootType));
+ return typeCache.computeIfAbsent(rootType, k -> new ClassContext(k, queue));
}
-
+
private static class ClassContext {
private final Map map = new HashMap<>();
private final Class> rootType;
+ private final ReferenceQueue queue;
private Set deleteSet;
+
+ private boolean useReferences;
+ private int weakCount;
- private ClassContext(Class> rootType) {
+
+ private ClassContext(Class> rootType, ReferenceQueue queue) {
this.rootType = rootType;
+ this.queue = queue;
}
+ /**
+ * When called with "true", initialize referenceQueue and store BeanRefs instead
+ * of real object references.
+ */
+ public ClassContext useReferences(boolean useReferences) {
+ this.useReferences = useReferences;
+ return this;
+ }
+
+
@Override
public String toString() {
- return "size:" + map.size();
+ return "size:" + map.size() + " (" + weakCount + " weak)";
}
private Object get(Object id) {
- return map.get(id);
+ Object ret = map.get(id);
+ if (ret instanceof BeanRef) {
+ return ((BeanRef)ret).get();
+ } else {
+ return ret;
+ }
}
private WithOption getWithOption(Object id) {
@@ -220,12 +284,17 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
return existingValue;
}
// put the new value and return null indicating the put was successful
- map.put(id, bean);
+ put(id, bean);
return null;
}
private void put(Object id, Object b) {
- map.put(id, b);
+ if (useReferences) {
+ weakCount++;
+ map.put(id, new BeanRef(this, id, b, queue));
+ } else {
+ map.put(id, b);
+ }
}
private int size() {
@@ -234,10 +303,14 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private void clear() {
map.clear();
+ weakCount = 0;
}
private void remove(Object id) {
- map.remove(id);
+ Object ret = map.remove(id);
+ if (ret instanceof BeanRef) {
+ weakCount--;
+ }
}
private void deleted(Object id) {
@@ -245,7 +318,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
deleteSet = new HashSet<>();
}
deleteSet.add(id);
- map.remove(id);
+ remove(id);
}
/**
@@ -254,6 +327,10 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
void dirtyBeans(SpiBeanTypeManager manager, List list) {
final SpiBeanType beanType = manager.beanType(rootType);
for (Object value : map.values()) {
+ if (queue != null && value instanceof BeanRef) {
+ value = ((BeanRef) value).get();
+ if (value == null) continue;
+ }
EntityBean bean = (EntityBean) value;
if (bean._ebean_getIntercept().isDirty() || beanType.isToManyDirty(bean)) {
list.add(value);
@@ -262,4 +339,20 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
}
+ private static class BeanRef extends WeakReference {
+
+ private final ClassContext classContext;
+ private final Object key;
+
+ private BeanRef(ClassContext classContext, Object key, Object referent, ReferenceQueue super Object> q) {
+ super(referent, q);
+ this.classContext = classContext;
+ this.key = key;
+ }
+
+ private void expunge() {
+ classContext.remove(key);
+ }
+
+ }
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java
deleted file mode 100644
index 4d7371bf9..000000000
--- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/WeakPersistenceContext.java
+++ /dev/null
@@ -1,272 +0,0 @@
-package io.ebeaninternal.server.transaction;
-
-import io.ebean.bean.EntityBean;
-import io.ebean.bean.PersistenceContext;
-import io.ebeaninternal.api.SpiBeanType;
-import io.ebeaninternal.api.SpiBeanTypeManager;
-import io.ebeaninternal.api.SpiPersistenceContext;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-import java.util.*;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * Weak reference based PersistenceContext for "streaming queries".
- */
-final class WeakPersistenceContext implements SpiPersistenceContext {
-
- private final HashMap, WeakClassContext> typeCache = new HashMap<>();
- private final ReentrantLock lock = new ReentrantLock();
-
- WeakPersistenceContext() {
- }
-
- /**
- * Load from the initiating persistence context.
- */
- void add(Class> rootType, Set deleteSet, Map map) {
- typeCache.put(rootType, new WeakClassContext( rootType, deleteSet, map));
- }
-
- @Override
- public PersistenceContext forIterate() {
- return this;
- }
-
- @Override
- public void put(Class> rootType, Object id, Object bean) {
- lock.lock();
- try {
- classContext(rootType).put(id, bean);
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public Object putIfAbsent(Class> rootType, Object id, Object bean) {
- lock.lock();
- try {
- return classContext(rootType).putIfAbsent(id, bean);
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public Object get(Class> rootType, Object id) {
- lock.lock();
- try {
- return classContext(rootType).get(id);
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public WithOption getWithOption(Class> rootType, Object id) {
- lock.lock();
- try {
- return classContext(rootType).getWithOption(id);
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public int size(Class> rootType) {
- lock.lock();
- try {
- WeakClassContext classMap = typeCache.get(rootType);
- return classMap == null ? 0 : classMap.size();
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public void clear() {
- lock.lock();
- try {
- typeCache.clear();
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public void clear(Class> rootType) {
- lock.lock();
- try {
- WeakClassContext classMap = typeCache.get(rootType);
- if (classMap != null) {
- classMap.clear();
- }
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public void deleted(Class> rootType, Object id) {
- lock.lock();
- try {
- WeakClassContext classMap = typeCache.get(rootType);
- if (classMap != null && id != null) {
- classMap.deleted(id);
- }
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public void clear(Class> rootType, Object id) {
- lock.lock();
- try {
- WeakClassContext classMap = typeCache.get(rootType);
- if (classMap != null && id != null) {
- classMap.remove(id);
- }
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public List dirtyBeans(SpiBeanTypeManager manager) {
- lock.lock();
- try {
- List list = new ArrayList<>();
- for (WeakClassContext classContext : typeCache.values()) {
- classContext.dirtyBeans(manager, list);
- }
- return list;
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public String toString() {
- lock.lock();
- try {
- return typeCache.toString();
- } finally {
- lock.unlock();
- }
- }
-
- private WeakClassContext classContext(Class> rootType) {
- return typeCache.computeIfAbsent(rootType, k -> new WeakClassContext(rootType));
- }
-
- private static class WeakClassContext {
-
- private final ReferenceQueue queue = new ReferenceQueue<>();
- private final Map map = new HashMap<>();
- private final Class> rootType;
- private Set deleteSet;
-
- private WeakClassContext(Class> rootType) {
- this.rootType = rootType;
- }
-
- private WeakClassContext(Class> rootType, Set initialDeleteSet, Map initialMap) {
- this.rootType = rootType;
- this.deleteSet = initialDeleteSet == null ? null : new HashSet<>(initialDeleteSet);
- for (Map.Entry entry : initialMap.entrySet()) {
- Object id = entry.getKey();
- map.put(id, new BeanRef(id, entry.getValue(), queue));
- }
- }
-
- private void expungeStaleEntries() {
- Reference> ref;
- while ((ref = queue.poll()) != null) {
- map.remove(((BeanRef)ref).key());
- }
- }
-
- @Override
- public String toString() {
- return "size:" + map.size();
- }
-
- private Object get(Object id) {
- expungeStaleEntries();
- Reference ref = map.get(id);
- return ref == null ? null : ref.get();
- }
-
- private WithOption getWithOption(Object id) {
- if (deleteSet != null && deleteSet.contains(id)) {
- return WithOption.DELETED;
- }
- Object bean = get(id);
- return (bean == null) ? null : new WithOption(bean);
- }
-
- private Object putIfAbsent(Object id, Object bean) {
- Object existingValue = get(id);
- if (existingValue != null) {
- // it is not absent
- return existingValue;
- }
- // put the new value and return null indicating the put was successful
- put(id, bean);
- return null;
- }
-
- private void put(Object id, Object b) {
- expungeStaleEntries();
- map.put(id, new BeanRef(id, b, queue));
- }
-
- private int size() {
- return map.size();
- }
-
- private void clear() {
- map.clear();
- }
-
- private void remove(Object id) {
- map.remove(id);
- }
-
- private void deleted(Object id) {
- if (deleteSet == null) {
- deleteSet = new HashSet<>();
- }
- deleteSet.add(id);
- map.remove(id);
- }
-
- /**
- * Add the dirty beans to the list.
- */
- void dirtyBeans(SpiBeanTypeManager manager, List list) {
- final SpiBeanType beanType = manager.beanType(rootType);
- for (BeanRef value : map.values()) {
- EntityBean bean = (EntityBean) value.get();
- if (bean != null && (bean._ebean_getIntercept().isDirty() || beanType.isToManyDirty(bean))) {
- list.add(bean);
- }
- }
- }
- }
-
- private static class BeanRef extends WeakReference {
- private final Object key;
- private BeanRef(Object key, Object referent, ReferenceQueue super Object> q) {
- super(referent, q);
- this.key = key;
- }
- Object key() {
- return key;
- }
- }
-}
diff --git a/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java b/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
index ea894091a..4d79e5b89 100644
--- a/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
+++ b/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
@@ -2,16 +2,23 @@ package org.tests.basic;
import io.ebean.BaseTestCase;
import io.ebean.DB;
+import io.ebean.Query;
+import io.ebean.Transaction;
+import io.ebeaninternal.api.SpiPersistenceContext;
+import io.ebeaninternal.api.SpiTransaction;
+
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
+import java.util.List;
import java.util.WeakHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestPersistenceContext extends BaseTestCase {
@@ -112,6 +119,65 @@ public class TestPersistenceContext extends BaseTestCase {
}
});
}
+ }
+
+ @Disabled // run manually
+ @Test
+ void testPcScopes() throws InterruptedException {
+ for (int i = 0; i < 5000; i++) {
+ Customer c = new Customer();
+ c.setName("Customer #" + i);
+ DB.save(c);
+ Order o = new Order();
+ o.setCustomer(c);
+ DB.save(o);
+ }
+
+ try (Transaction txn = DB.beginTransaction()) {
+ List first100 = DB.find(Customer.class).where().le("id", 100).findList();
+ assertEquals(100, first100.size());
+ for (Customer c : first100) {
+ c.setSmallnote("one of the first 100");
+ }
+
+ Customer[] lastBean = new Customer[1];
+ DB.find(Customer.class).setLazyLoadBatchSize(1).findEach(customer -> {
+ if (customer.getId() <= 100) {
+ assertEquals("one of the first 100", customer.getSmallnote());
+ // nested finds
+ DB.find(Order.class).where().eq("customer", customer).findEach(20, consumer->{});
+ } else {
+ assertNotEquals("one of the first 100", customer.getSmallnote());
+ }
+ lastBean[0] = customer;
+ });
+
+ SpiPersistenceContext pc = ((SpiTransaction) txn).getPersistenceContext();
+ System.out.println(pc.toString()); // Customer=size:5000 (4900 weak), Order=size:100 (100 weak)
+
+ System.gc();
+ Thread.sleep(100);
+ pc.get(Customer.class, 1); // trigger expungeStaleEntries
+ pc.get(Order.class, 1); // Checkme: Would it be a problem, that every classContext has its own queue
+ System.out.println(pc.toString()); // Customer=size:101 (1 weak), no orders
+
+ first100 = DB.find(Customer.class).where().le("id", 100).findList();
+ for (Customer c : first100) {
+ assertEquals("one of the first 100", c.getSmallnote());
+ }
+ Customer lastBeanFromDb = DB.find(Customer.class).setId(lastBean[0].getId()).findOne();
+ assertTrue(lastBeanFromDb == lastBean[0]);
+
+ // read 200
+ DB.find(Customer.class).where().le("id", 200).findList();
+ System.out.println(pc.toString()); // Customer=size:201 (1 weak)
+
+ lastBean[0] = null;
+ lastBeanFromDb = null;
+ System.gc();
+ Thread.sleep(100);
+ System.out.println(pc.toString()); // Customer=size:200 (0 weak)
+ }
}
}
From 100832ddd926e45ebe02b03afdcab8351bf43d5d Mon Sep 17 00:00:00 2001
From: Roland Praml
Date: Mon, 11 Oct 2021 17:16:34 +0200
Subject: [PATCH 17/91] Changed test to test pc.beginIterate / endIterate
---
.../DefaultPersistenceContextTest.java | 33 +++++++++++++------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java b/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java
index 1aa4af51c..236d3a2fc 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/server/transaction/DefaultPersistenceContextTest.java
@@ -145,24 +145,24 @@ class DefaultPersistenceContextTest {
}
@Test
- void forIterate() {
+ void beginIterate() {
final DefaultPersistenceContext pc = pcWith42();
final Object origCustomer42 = pc.get(Customer.class, 42);
// act
- final PersistenceContext pcIterate = pc.forIterate();
- assertThat(pc).isNotSameAs(pcIterate);
- assertThat(pcIterate.size(Customer.class)).isEqualTo(1);
+ pc.beginIterate();
+ assertThat(pc.size(Customer.class)).isEqualTo(1);
// assert same instance (bean effectively transferred to iterator persistence context
- final Object customer42 = pcIterate.get(Customer.class, 42);
+ final Object customer42 = pc.get(Customer.class, 42);
assertThat(customer42).isSameAs(origCustomer42);
- final PersistenceContext.WithOption option = pcIterate.getWithOption(Customer.class, 42);
+ final PersistenceContext.WithOption option = pc.getWithOption(Customer.class, 42);
assertThat(option.getBean()).isSameAs(origCustomer42);
+ pc.endIterate();
}
@Test
- void forIterate_many() {
+ void beginIterate_many() throws InterruptedException {
DefaultPersistenceContext pc = new DefaultPersistenceContext();
addCustomers(pc, 1, 100);
addContacts(pc, 1, 1010);
@@ -170,9 +170,22 @@ class DefaultPersistenceContextTest {
assertThat(pc.size(Contact.class)).isEqualTo(1010);
// act
- final PersistenceContext pcIterate = pc.forIterate();
- assertThat(pcIterate.size(Customer.class)).isEqualTo(100);
- assertThat(pcIterate.size(Contact.class)).isEqualTo(1010);
+ pc.beginIterate();
+ assertThat(pc.size(Customer.class)).isEqualTo(100);
+ assertThat(pc.size(Contact.class)).isEqualTo(1010);
+
+ addCustomers(pc, 200, 100);
+ addContacts(pc, 2000, 1010);
+
+ assertThat(pc.size(Customer.class)).isEqualTo(200);
+ assertThat(pc.size(Contact.class)).isEqualTo(2020);
+ pc.endIterate();
+
+ System.gc();
+ Thread.sleep(50); // give the GC some time
+
+ assertThat(pc.size(Customer.class)).isEqualTo(100);
+ assertThat(pc.size(Contact.class)).isEqualTo(1010);
}
@Test
From 5322ab3e7e9c3b81f92b72a93de26f18522f94d7 Mon Sep 17 00:00:00 2001
From: Roland Praml
Date: Fri, 8 Oct 2021 09:27:38 +0200
Subject: [PATCH 18/91] Remove: ReadJson.resetContext as it is not used
---
.../io/ebean/text/json/JsonBeanReader.java | 2 +-
.../ebeaninternal/api/json/SpiJsonReader.java | 2 +-
.../server/deploy/BeanDescriptorJsonHelp.java | 2 +-
.../server/text/json/DJsonBeanReader.java | 4 ++--
.../server/text/json/ReadJson.java | 18 +++++-------------
.../io/ebean/text/json/JsonBeanReaderTest.java | 2 +-
6 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java b/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
index fc948016f..7acdb976f 100644
--- a/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
+++ b/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
@@ -20,7 +20,7 @@ public interface JsonBeanReader {
/**
* Create a new reader taking the context from the existing one but using a new JsonParser.
*/
- JsonBeanReader forJson(JsonParser moreJson, boolean resetContext);
+ JsonBeanReader forJson(JsonParser moreJson);
/**
* Add a bean explicitly to the persistence context.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
index aaf4e2ce8..4594cbe25 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/json/SpiJsonReader.java
@@ -14,7 +14,7 @@ public interface SpiJsonReader {
PersistenceContext getPersistenceContext();
- SpiJsonReader forJson(JsonParser moreJson, boolean resetContext);
+ SpiJsonReader forJson(JsonParser moreJson);
void persistenceContextPut(Object beanId, T currentBean);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
index 5abb988c7..b11c987bb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
@@ -90,7 +90,7 @@ final class BeanDescriptorJsonHelp {
return null;
}
JsonParser newParser = node.traverse();
- SpiJsonReader newReader = jsonRead.forJson(newParser, false);
+ SpiJsonReader newReader = jsonRead.forJson(newParser);
// check for the discriminator value to determine the correct sub type
String discColumn = inheritInfo.getRoot().getDiscriminatorColumn();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java
index 8193d397c..79465e037 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java
@@ -45,7 +45,7 @@ public final class DJsonBeanReader implements JsonBeanReader {
}
@Override
- public JsonBeanReader forJson(JsonParser moreJson, boolean resetContext) {
- return new DJsonBeanReader<>(desc, readJson.forJson(moreJson, resetContext));
+ public JsonBeanReader forJson(JsonParser moreJson) {
+ return new DJsonBeanReader<>(desc, readJson.forJson(moreJson));
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java
index f685188b6..7acf4e531 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java
@@ -50,22 +50,14 @@ public final class ReadJson implements SpiJsonReader {
/**
* Construct when transferring load context, persistence context, object mapper etc to a new ReadJson instance.
*/
- private ReadJson(JsonParser moreJson, ReadJson source, boolean resetContext) {
+ private ReadJson(JsonParser moreJson, ReadJson source) {
this.parser = moreJson;
this.rootDesc = source.rootDesc;
this.pathStack = source.pathStack;
this.visitorMap = source.visitorMap;
this.objectMapper = source.objectMapper;
- if (resetContext) {
- this.persistenceContext = new DefaultPersistenceContext();
- this.loadContext = source.loadContext;
- if (loadContext != null) {
- loadContext.resetPersistenceContext(persistenceContext);
- }
- } else {
- this.persistenceContext = source.persistenceContext;
- this.loadContext = source.loadContext;
- }
+ this.persistenceContext = source.persistenceContext;
+ this.loadContext = source.loadContext;
}
private LoadContext initLoadContext(BeanDescriptor> desc, JsonReadOptions readOptions) {
@@ -96,8 +88,8 @@ public final class ReadJson implements SpiJsonReader {
* Return a new instance of ReadJson using the existing context but with a new JsonParser.
*/
@Override
- public SpiJsonReader forJson(JsonParser moreJson, boolean resetContext) {
- return new ReadJson(moreJson, this, resetContext);
+ public SpiJsonReader forJson(JsonParser moreJson) {
+ return new ReadJson(moreJson, this);
}
/**
diff --git a/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java b/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java
index 6cf8f52db..a60b18d3f 100644
--- a/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java
+++ b/ebean-test/src/test/java/io/ebean/text/json/JsonBeanReaderTest.java
@@ -47,7 +47,7 @@ public class JsonBeanReaderTest extends BaseTestCase {
beanReader.read();
JsonParser more = getParser();
- JsonBeanReader moreReader = beanReader.forJson(more, true);
+ JsonBeanReader moreReader = beanReader.forJson(more);
Customer customer = moreReader.read();
assertThat(customer.getId()).isEqualTo(42);
From 2f277938e58890711e91538a6b9fe7487fca2aa4 Mon Sep 17 00:00:00 2001
From: Roland Praml
Date: Mon, 11 Oct 2021 17:48:09 +0200
Subject: [PATCH 19/91] Remove LoadContext.resetPersistenceContext
---
.../java/io/ebeaninternal/api/LoadContext.java | 8 --------
.../server/loadcontext/DLoadBeanContext.java | 2 +-
.../server/loadcontext/DLoadContext.java | 15 +--------------
.../server/loadcontext/DLoadManyContext.java | 2 +-
4 files changed, 3 insertions(+), 24 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/LoadContext.java b/ebean-core/src/main/java/io/ebeaninternal/api/LoadContext.java
index 51f02826c..b23a183bb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/LoadContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/LoadContext.java
@@ -36,14 +36,6 @@ public interface LoadContext {
*/
PersistenceContext getPersistenceContext();
- /**
- * Set the persistence context used by this query and future lazy loading.
- *
- * Used by query iterator when processing large result sets.
- *
- */
- void resetPersistenceContext(PersistenceContext persistenceContext);
-
/**
* Register a Bean for lazy loading.
*/
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java
index 2dd6c1378..427d59de2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java
@@ -46,7 +46,7 @@ final class DLoadBeanContext extends DLoadBaseContext implements LoadBeanContext
/**
* Reset the buffers after a query iterator reset.
*/
- public void clear() {
+ private void clear() {
if (bufferList != null) {
bufferList.clear();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java
index 018a9f647..bfef45804 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java
@@ -57,7 +57,7 @@ public final class DLoadContext implements LoadContext {
private final ProfileLocation profileLocation;
private final ProfilingListener profilingListener;
private final Map nodePathMap = new HashMap<>();
- private PersistenceContext persistenceContext;
+ private final PersistenceContext persistenceContext;
private List secQuery;
private Object tenantId;
@@ -251,19 +251,6 @@ public final class DLoadContext implements LoadContext {
return persistenceContext;
}
- @Override
- public void resetPersistenceContext(PersistenceContext persistenceContext) {
- this.persistenceContext = persistenceContext;
- // clear the load contexts for beans and beanCollections
- for (DLoadBeanContext beanContext : beanMap.values()) {
- beanContext.clear();
- }
- for (DLoadManyContext manyContext : manyMap.values()) {
- manyContext.clear();
- }
- this.rootBeanContext.clear();
- }
-
@Override
public void register(String path, EntityBeanIntercept ebi) {
getBeanContext(path).register(ebi);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java
index 8473e148b..68bd61d81 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java
@@ -48,7 +48,7 @@ final class DLoadManyContext extends DLoadBaseContext implements LoadManyContext
/**
* Reset the buffers for a query iterator reset.
*/
- public void clear() {
+ private void clear() {
if (bufferList != null) {
bufferList.clear();
}
From 556557276cebe1bcded67e3d1dd8c344ddb31877 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 12 Oct 2021 12:38:08 +1300
Subject: [PATCH 20/91] Bump ebean-agent version
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 091b0426b..84bd4f362 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,8 +45,8 @@
12.12.1
4.2
7.3
- 12.12.0
- 12.12.1
+ 12.12.2
+ 12.12.2
From c89d39ec2d4f9d3b0486a6916de92ac6eb26a387 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 12 Oct 2021 12:46:08 +1300
Subject: [PATCH 21/91] [maven-release-plugin] prepare release
ebean-parent-12.12.2
---
ebean-api/pom.xml | 2 +-
ebean-api/pom.xml.releaseBackup | 131 ++++++++++
ebean-autotune/pom.xml | 6 +-
ebean-autotune/pom.xml.releaseBackup | 74 ++++++
ebean-bom/pom.xml | 30 +--
ebean-bom/pom.xml.releaseBackup | 162 ++++++++++++
ebean-core-type/pom.xml | 4 +-
ebean-core-type/pom.xml.releaseBackup | 46 ++++
ebean-core/pom.xml | 10 +-
ebean-core/pom.xml.releaseBackup | 247 ++++++++++++++++++
ebean-ddl-generator/pom.xml | 6 +-
ebean-ddl-generator/pom.xml.releaseBackup | 106 ++++++++
ebean-externalmapping-api/pom.xml | 2 +-
.../pom.xml.releaseBackup | 30 +++
ebean-externalmapping-xml/pom.xml | 10 +-
.../pom.xml.releaseBackup | 100 +++++++
ebean-postgis/pom.xml | 6 +-
ebean-postgis/pom.xml.releaseBackup | 118 +++++++++
ebean-querybean/pom.xml | 10 +-
ebean-querybean/pom.xml.releaseBackup | 113 ++++++++
ebean-redis/pom.xml | 12 +-
ebean-redis/pom.xml.releaseBackup | 93 +++++++
ebean-test/pom.xml | 6 +-
ebean-test/pom.xml.releaseBackup | 245 +++++++++++++++++
ebean/pom.xml | 8 +-
ebean/pom.xml.releaseBackup | 58 ++++
kotlin-querybean-generator/pom.xml | 8 +-
pom.xml | 4 +-
pom.xml.releaseBackup | 97 +++++++
querybean-generator/pom.xml | 2 +-
querybean-generator/pom.xml.releaseBackup | 52 ++++
release.properties | 83 ++++++
32 files changed, 1818 insertions(+), 63 deletions(-)
create mode 100644 ebean-api/pom.xml.releaseBackup
create mode 100644 ebean-autotune/pom.xml.releaseBackup
create mode 100644 ebean-bom/pom.xml.releaseBackup
create mode 100644 ebean-core-type/pom.xml.releaseBackup
create mode 100644 ebean-core/pom.xml.releaseBackup
create mode 100644 ebean-ddl-generator/pom.xml.releaseBackup
create mode 100644 ebean-externalmapping-api/pom.xml.releaseBackup
create mode 100644 ebean-externalmapping-xml/pom.xml.releaseBackup
create mode 100644 ebean-postgis/pom.xml.releaseBackup
create mode 100644 ebean-querybean/pom.xml.releaseBackup
create mode 100644 ebean-redis/pom.xml.releaseBackup
create mode 100644 ebean-test/pom.xml.releaseBackup
create mode 100644 ebean/pom.xml.releaseBackup
create mode 100644 pom.xml.releaseBackup
create mode 100644 querybean-generator/pom.xml.releaseBackup
create mode 100644 release.properties
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index b67a4459f..59600d198 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean api
diff --git a/ebean-api/pom.xml.releaseBackup b/ebean-api/pom.xml.releaseBackup
new file mode 100644
index 000000000..b67a4459f
--- /dev/null
+++ b/ebean-api/pom.xml.releaseBackup
@@ -0,0 +1,131 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean api
+ ebean api
+ ebean-api
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+ provided
+
+
+
+ io.avaje
+ avaje-config
+ 1.5
+
+
+
+
+ io.avaje
+ avaje-jsr305
+ 1.1
+ provided
+
+
+
+ io.ebean
+ persistence-api
+ 2.2.5
+
+
+
+ io.ebean
+ ebean-annotation
+ 7.3
+
+
+
+ io.ebean
+ ebean-types
+ 2.2
+
+
+
+ io.ebean
+ ebean-datasource-api
+ ${ebean-datasource.version}
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+ true
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+ true
+
+
+
+
+ com.h2database
+ h2
+ 1.4.199
+ true
+
+
+
+ javax.transaction
+ jta
+ 1.1
+ true
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ true
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 211349a54..6fa062dd3 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
@@ -14,7 +14,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
+ ebean-parent-12.12.2
ebean autotune
@@ -26,7 +26,7 @@
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
diff --git a/ebean-autotune/pom.xml.releaseBackup b/ebean-autotune/pom.xml.releaseBackup
new file mode 100644
index 000000000..211349a54
--- /dev/null
+++ b/ebean-autotune/pom.xml.releaseBackup
@@ -0,0 +1,74 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+
+
+
+
+
+
+ scm:git:git@github.com:ebean-orm/ebean.git
+ HEAD
+
+
+ ebean autotune
+ ebean automatic query tuning module
+ ebean-autotune
+
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ 2.3.2
+ provided
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index 5627cbbf9..9b613e1d6 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean bom
@@ -71,88 +71,88 @@
io.ebean
ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-api
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-core-type
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-ddl-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-externalmapping-api
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-externalmapping-xml
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-autotune
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-querybean
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
querybean-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
io.ebean
kotlin-querybean-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
io.ebean
ebean-test
- 12.12.2-SNAPSHOT
+ 12.12.2
test
io.ebean
ebean-postgis
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-redis
- 12.12.2-SNAPSHOT
+ 12.12.2
diff --git a/ebean-bom/pom.xml.releaseBackup b/ebean-bom/pom.xml.releaseBackup
new file mode 100644
index 000000000..5627cbbf9
--- /dev/null
+++ b/ebean-bom/pom.xml.releaseBackup
@@ -0,0 +1,162 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean bom
+ ebean bill of materials pom
+ ebean-bom
+ pom
+
+
+
+
+
+
+
+
+ io.ebean
+ ebean-ddl-runner
+ ${ebean-ddl-runner.version}
+
+
+
+ io.ebean
+ ebean-migration-auto
+ ${ebean-migration-auto.version}
+
+
+
+ io.ebean
+ ebean-migration
+ ${ebean-migration.version}
+
+
+
+ io.ebean
+ ebean-datasource-api
+ ${ebean-datasource.version}
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+ io.ebean
+ ebean-agent
+ ${ebean-agent.version}
+
+
+
+ io.ebean
+ ebean-maven-plugin
+ ${ebean-maven-plugin.version}
+
+
+
+ io.ebean
+ ebean-test-docker
+ ${ebean-test-docker.version}
+
+
+
+
+
+ io.ebean
+ ebean
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-api
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core-type
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-ddl-generator
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-externalmapping-api
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-externalmapping-xml
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-autotune
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-querybean
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ querybean-generator
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ io.ebean
+ kotlin-querybean-generator
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ io.ebean
+ ebean-test
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ ebean-postgis
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-redis
+ 12.12.2-SNAPSHOT
+
+
+
+
+
+
+
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index fe0d4888a..078b585cf 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean-core-type
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 12.12.2-SNAPSHOT
+ 12.12.2
diff --git a/ebean-core-type/pom.xml.releaseBackup b/ebean-core-type/pom.xml.releaseBackup
new file mode 100644
index 000000000..fe0d4888a
--- /dev/null
+++ b/ebean-core-type/pom.xml.releaseBackup
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean-core-type
+ ebean core type
+ ebean scalar types api
+
+
+
+
+ io.ebean
+ ebean-api
+ 12.12.2-SNAPSHOT
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+ true
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index f902be3fd..b22cdcc68 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean-core
@@ -15,7 +15,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
+ ebean-parent-12.12.2
@@ -41,19 +41,19 @@
io.ebean
ebean-api
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-core-type
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-externalmapping-api
- 12.12.2-SNAPSHOT
+ 12.12.2
diff --git a/ebean-core/pom.xml.releaseBackup b/ebean-core/pom.xml.releaseBackup
new file mode 100644
index 000000000..f902be3fd
--- /dev/null
+++ b/ebean-core/pom.xml.releaseBackup
@@ -0,0 +1,247 @@
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean-core
+ jar
+
+ ebean core
+ ebean core module
+ https://ebean.io/
+
+
+ scm:git:git@github.com:ebean-orm/ebean.git
+ HEAD
+
+
+
+
+
+ io.ebean
+ ebean-ddl-runner
+ 1.2
+
+
+
+ io.avaje
+ classpath-scanner
+ 6.2
+
+
+
+ io.ebean
+ ebean-migration-auto
+ 1.1
+
+
+
+ io.ebean
+ ebean-api
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core-type
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-externalmapping-api
+ 12.12.2-SNAPSHOT
+
+
+
+ org.antlr
+ antlr4-runtime
+ 4.8-1
+
+
+
+
+ io.avaje
+ avaje-jsr305-x
+ 1.1
+ provided
+
+
+
+
+ com.h2database
+ h2
+ 1.4.199
+ provided
+
+
+
+ javax.transaction
+ javax.transaction-api
+ 1.3
+ true
+
+
+
+
+ javax.validation
+ validation-api
+ 2.0.1.Final
+ true
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 3.0.0
+ true
+
+
+
+ joda-time
+ joda-time
+ 2.9.7
+ true
+
+
+
+
+
+
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+ true
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+ true
+
+
+
+
+ org.postgresql
+ postgresql
+ 42.2.20
+ true
+
+
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+
+
+ io.ebean
+ ebean-maven-plugin
+ ${ebean-maven-plugin.version}
+
+
+ test
+ process-test-classes
+
+ debug=0
+
+
+ testEnhance
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M4
+
+ false
+ false
+ false
+
+ **/Test*.java
+ **/*Test.java
+ **/*Tests.java
+
+
+
+
+ datasource.default
+ ${datasource.default}
+
+
+
+ dbClockDelta
+ ${dbClockDelta}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.1.1
+
+ Ebean 12
+ src/main/java/io/ebean/overview.html
+ io.ebeaninternal.*:io.ebeanservice:io.ebean.common:io.ebean.bean:io.ebean.service:io.ebean.metric:io.ebean.util:io.ebean.config.properties:io.ebean.config.dbplatform
+ true
+ src/main/java/com/avaje/ebean/overview.html
+
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
+
+
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index 0679d53bf..03e420254 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean ddl generation
@@ -28,14 +28,14 @@
io.ebean
ebean-core-type
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
diff --git a/ebean-ddl-generator/pom.xml.releaseBackup b/ebean-ddl-generator/pom.xml.releaseBackup
new file mode 100644
index 000000000..0679d53bf
--- /dev/null
+++ b/ebean-ddl-generator/pom.xml.releaseBackup
@@ -0,0 +1,106 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean ddl generation
+ DDL and DB Migration generation
+ ebean-ddl-generator
+
+
+
+
+ io.ebean
+ ebean-ddl-runner
+ 1.2
+
+
+
+ io.ebean
+ ebean-migration
+ 12.12.1
+
+
+
+ io.ebean
+ ebean-core-type
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ 2.3.2
+ provided
+
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+ test
+
+
+
+ javax.validation
+ validation-api
+ 2.0.1.Final
+ test
+
+
+
+
+
+
+
+ io.ebean
+ ebean-maven-plugin
+ ${ebean-maven-plugin.version}
+
+
+ test
+ process-test-classes
+
+ debug=0
+
+
+ testEnhance
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index 72ab57a4b..42d49d000 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean external mapping api
diff --git a/ebean-externalmapping-api/pom.xml.releaseBackup b/ebean-externalmapping-api/pom.xml.releaseBackup
new file mode 100644
index 000000000..72ab57a4b
--- /dev/null
+++ b/ebean-externalmapping-api/pom.xml.releaseBackup
@@ -0,0 +1,30 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean external mapping api
+ API for mapping external named queries
+ ebean-externalmapping-api
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 753c7dbd5..150fcd0df 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
@@ -14,7 +14,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
+ ebean-parent-12.12.2
ebean external mapping xml
@@ -33,7 +33,7 @@
io.ebean
ebean-externalmapping-api
- 12.12.2-SNAPSHOT
+ 12.12.2
@@ -59,14 +59,14 @@
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
test
io.ebean
ebean-ddl-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
test
diff --git a/ebean-externalmapping-xml/pom.xml.releaseBackup b/ebean-externalmapping-xml/pom.xml.releaseBackup
new file mode 100644
index 000000000..753c7dbd5
--- /dev/null
+++ b/ebean-externalmapping-xml/pom.xml.releaseBackup
@@ -0,0 +1,100 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+
+
+
+
+
+
+ scm:git:git@github.com:ebean-orm/ebean.git
+ HEAD
+
+
+ ebean external mapping xml
+ XML implementation for mapping external named queries
+ ebean-externalmapping-xml
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+ provided
+
+
+
+ io.ebean
+ ebean-externalmapping-api
+ 12.12.2-SNAPSHOT
+
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ 2.3.2
+
+
+
+ io.avaje
+ classpath-scanner
+ 6.2
+
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+ test
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ ebean-ddl-generator
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+
+ io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index 046768e1c..a7355e196 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean postgis
@@ -23,7 +23,7 @@
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
@@ -74,7 +74,7 @@
io.ebean
ebean-test
- 12.12.2-SNAPSHOT
+ 12.12.2
test
diff --git a/ebean-postgis/pom.xml.releaseBackup b/ebean-postgis/pom.xml.releaseBackup
new file mode 100644
index 000000000..046768e1c
--- /dev/null
+++ b/ebean-postgis/pom.xml.releaseBackup
@@ -0,0 +1,118 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean postgis
+ ebean postgis module
+ https://ebean.io/
+
+ ebean-postgis
+
+
+ 2.2.1
+
+
+
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+ true
+
+
+
+ net.postgis
+ postgis-jdbc
+ [${postgis.jdbc.version}]
+
+
+
+
+ org.postgresql
+ postgresql
+ 42.2.8
+ provided
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+ provided
+
+
+
+
+ org.geolatte
+ geolatte-geom
+ 1.0.6
+ provided
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+ test
+
+
+
+ io.ebean
+ ebean-test
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ org.avaje.composite
+ logback
+ 1.1
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
+
+
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index d5c624049..4a4ba5027 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean querybean
@@ -17,7 +17,7 @@
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
@@ -57,21 +57,21 @@
io.ebean
ebean-ddl-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
test
io.ebean
querybean-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
test
io.ebean
ebean-test
- 12.12.2-SNAPSHOT
+ 12.12.2
test
diff --git a/ebean-querybean/pom.xml.releaseBackup b/ebean-querybean/pom.xml.releaseBackup
new file mode 100644
index 000000000..d5c624049
--- /dev/null
+++ b/ebean-querybean/pom.xml.releaseBackup
@@ -0,0 +1,113 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean querybean
+ Ebean querybean support
+ ebean-querybean
+
+
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+
+ io.avaje
+ avaje-jsr305
+ 1.1
+ provided
+
+
+
+ joda-time
+ joda-time
+ 1.6
+ true
+
+
+
+ javax.validation
+ validation-api
+ 2.0.1.Final
+ true
+
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+ test
+
+
+
+ io.ebean
+ ebean-ddl-generator
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ querybean-generator
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ ebean-test
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+ org.avaje.composite
+ logback
+ 1.1
+ test
+
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
+
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 571988d2b..336c321e5 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean-redis
@@ -22,35 +22,35 @@
io.ebean
ebean-api
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
io.ebean
ebean-querybean
- 12.12.2-SNAPSHOT
+ 12.12.2
test
io.ebean
querybean-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
test
io.ebean
ebean-test
- 12.12.2-SNAPSHOT
+ 12.12.2
test
diff --git a/ebean-redis/pom.xml.releaseBackup b/ebean-redis/pom.xml.releaseBackup
new file mode 100644
index 000000000..571988d2b
--- /dev/null
+++ b/ebean-redis/pom.xml.releaseBackup
@@ -0,0 +1,93 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean-redis
+ ebean redis
+ Ebean Redis L2 Cache
+
+
+
+
+ redis.clients
+ jedis
+ 3.6.3
+
+
+
+ io.ebean
+ ebean-api
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ io.ebean
+ ebean-querybean
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ querybean-generator
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ ebean-test
+ 12.12.2-SNAPSHOT
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+ org.avaje.composite
+ logback
+ 1.1
+ test
+
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
+
+
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 9039501e5..00acb64d5 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean test
@@ -29,14 +29,14 @@
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
provided
io.ebean
ebean-ddl-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
diff --git a/ebean-test/pom.xml.releaseBackup b/ebean-test/pom.xml.releaseBackup
new file mode 100644
index 000000000..9039501e5
--- /dev/null
+++ b/ebean-test/pom.xml.releaseBackup
@@ -0,0 +1,245 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean test
+ Testing support for Ebean
+ ebean-test
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+ provided
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+ provided
+
+
+
+ io.ebean
+ ebean-ddl-generator
+ 12.12.2-SNAPSHOT
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+ true
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ ${jackson.version}
+ true
+
+
+
+ io.ebean
+ ebean-test-docker
+ 4.2
+
+
+
+ org.assertj
+ assertj-core
+ 3.14.0
+
+
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ 2.3.2
+
+
+
+
+ com.h2database
+ h2
+ 1.4.199
+
+
+
+
+
+ io.avaje
+ avaje-jsr305
+ 1.1
+ test
+
+
+
+ io.ebean
+ ebean-migration
+ 12.12.1
+ test
+
+
+
+ io.avaje
+ mod-uuid
+ 1.1
+ test
+
+
+
+ javax.transaction
+ jta
+ 1.1
+ test
+
+
+
+
+ javax.validation
+ validation-api
+ 2.0.1.Final
+ test
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 3.0.0
+ test
+
+
+
+ joda-time
+ joda-time
+ 2.9.7
+ test
+
+
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+ test
+
+
+ commons-io
+ commons-io
+ 2.7
+ test
+
+
+
+ org.postgresql
+ postgresql
+ 42.2.23
+
+
+ org.checkerframework
+ checker-qual
+
+
+ test
+
+
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+ 9.4.0.jre8
+ test
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.26
+ test
+
+
+
+ org.mariadb.jdbc
+ mariadb-java-client
+ 2.6.0
+ test
+
+
+
+ com.sap.cloud.db.jdbc
+ ngdbc
+ 2.3.48
+ test
+
+
+
+ com.oracle.database.jdbc
+ ojdbc10
+ 19.12.0.0
+ test
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.3
+ test
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+ db2
+
+
+
+ com.ibm.db2
+ jcc
+ 11.5.5.0
+ test
+
+
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.ebean.tile:enhancement:12.11.3
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
+
diff --git a/ebean/pom.xml b/ebean/pom.xml
index ae27a93d2..722ff25bd 100644
--- a/ebean/pom.xml
+++ b/ebean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
ebean composite
@@ -22,20 +22,20 @@
io.ebean
ebean-api
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
io.ebean
ebean-querybean
- 12.12.2-SNAPSHOT
+ 12.12.2
diff --git a/ebean/pom.xml.releaseBackup b/ebean/pom.xml.releaseBackup
new file mode 100644
index 000000000..ae27a93d2
--- /dev/null
+++ b/ebean/pom.xml.releaseBackup
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ ebean composite
+ Composite of common runtime dependencies
+ ebean
+
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+ io.ebean
+ ebean-api
+ 12.12.2-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 12.12.2-SNAPSHOT
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 12.12.2-SNAPSHOT
+
+
+
+
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index 4e3119533..4b1811649 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
kotlin querybean generator
@@ -29,7 +29,7 @@
io.ebean
ebean-querybean
- 12.12.2-SNAPSHOT
+ 12.12.2
test
@@ -43,7 +43,7 @@
io.ebean
ebean-core
- 12.12.2-SNAPSHOT
+ 12.12.2
test
@@ -64,7 +64,7 @@
io.ebean
ebean-ddl-generator
- 12.12.2-SNAPSHOT
+ 12.12.2
test
diff --git a/pom.xml b/pom.xml
index 84bd4f362..c39af91c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
io.ebean
ebean-parent
- 12.12.2-SNAPSHOT
+ 12.12.2
pom
ebean parent
@@ -18,7 +18,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
+ ebean-parent-12.12.2
diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup
new file mode 100644
index 000000000..84bd4f362
--- /dev/null
+++ b/pom.xml.releaseBackup
@@ -0,0 +1,97 @@
+
+
+ 4.0.0
+
+ org.avaje
+ java8-oss
+ 3.2
+
+
+ io.ebean
+ ebean-parent
+ 12.12.2-SNAPSHOT
+ pom
+
+ ebean parent
+ Parent for ebean modules
+ https://ebean.io/
+
+
+ scm:git:git@github.com:ebean-orm/ebean.git
+ HEAD
+
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+
+
+ rbygrave
+ Rob Bygrave
+ robin.bygrave@gmail.com
+
+
+
+
+ true
+ 2.12.1
+ 1.2
+ 1.1
+ 12.12.1
+ 4.2
+ 7.3
+ 12.12.2
+ 12.12.2
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+ provided
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.3
+ test
+
+
+
+ com.h2database
+ h2
+ 1.4.199
+ test
+
+
+
+
+
+ ebean
+ ebean-api
+ ebean-bom
+ ebean-core-type
+ ebean-core
+ ebean-ddl-generator
+ ebean-autotune
+ ebean-externalmapping-api
+ ebean-externalmapping-xml
+ ebean-test
+ querybean-generator
+ kotlin-querybean-generator
+ ebean-querybean
+ ebean-postgis
+ ebean-redis
+
+
+
+
+
diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml
index 5fd7ff9d4..8fcaeb7f1 100644
--- a/querybean-generator/pom.xml
+++ b/querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2-SNAPSHOT
+ 12.12.2
querybean generator
diff --git a/querybean-generator/pom.xml.releaseBackup b/querybean-generator/pom.xml.releaseBackup
new file mode 100644
index 000000000..5fd7ff9d4
--- /dev/null
+++ b/querybean-generator/pom.xml.releaseBackup
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 12.12.2-SNAPSHOT
+
+
+ querybean generator
+ Querybean generator
+ querybean-generator
+
+
+
+
+ io.avaje
+ junit
+ 1.0
+ test
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.2
+
+ 1.8
+ 1.8
+
+ -proc:none
+
+
+
+ io.repaint.maven
+ tiles-maven-plugin
+ 2.24
+ true
+
+
+ io.avaje.tile:moditech-module:1.0
+
+
+
+
+
+
+
diff --git a/release.properties b/release.properties
new file mode 100644
index 000000000..0ebb389e8
--- /dev/null
+++ b/release.properties
@@ -0,0 +1,83 @@
+#release configuration
+#Tue Oct 12 12:43:59 NZDT 2021
+projectVersionPolicyId=default
+project.scm.io.ebean\:ebean-core-type.tag=HEAD
+scm.branchCommitComment=@{prefix} prepare branch @{releaseLabel}
+project.rel.io.ebean\:ebean-ddl-generator=12.12.2
+project.dev.io.ebean\:ebean-core=12.12.3-SNAPSHOT
+project.scm.io.ebean\:ebean-api.tag=HEAD
+project.scm.io.ebean\:ebean-redis.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.scm.io.ebean\:ebean-querybean.tag=HEAD
+project.scm.io.ebean\:ebean-api.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.dev.io.ebean\:ebean-api=12.12.3-SNAPSHOT
+project.rel.io.ebean\:ebean=12.12.2
+project.dev.io.ebean\:ebean-core-type=12.12.3-SNAPSHOT
+project.scm.io.ebean\:ebean-ddl-generator.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+exec.activateProfiles=release
+project.dev.io.ebean\:ebean-test=12.12.3-SNAPSHOT
+project.scm.io.ebean\:kotlin-querybean-generator.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.scm.io.ebean\:ebean-querybean.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.scm.io.ebean\:ebean-bom.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.scm.io.ebean\:ebean-core.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.rel.io.ebean\:ebean-core-type=12.12.2
+project.rel.io.ebean\:kotlin-querybean-generator=12.12.2
+project.dev.io.ebean\:querybean-generator=12.12.3-SNAPSHOT
+project.scm.io.ebean\:ebean-autotune.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+scm.commentPrefix=[maven-release-plugin]
+releaseStrategyId=default
+project.rel.io.ebean\:ebean-querybean=12.12.2
+project.scm.io.ebean\:ebean-externalmapping-api.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.scm.io.ebean\:querybean-generator.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.dev.io.ebean\:kotlin-querybean-generator=12.12.3-SNAPSHOT
+project.scm.io.ebean\:ebean-core-type.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+completedPhase=generate-release-poms
+project.rel.io.ebean\:ebean-redis=12.12.2
+project.scm.io.ebean\:ebean-test.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.scm.io.ebean\:ebean-postgis.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.dev.io.ebean\:ebean-autotune=12.12.3-SNAPSHOT
+project.rel.io.ebean\:ebean-api=12.12.2
+project.scm.io.ebean\:ebean-postgis.tag=HEAD
+project.scm.io.ebean\:querybean-generator.tag=HEAD
+project.rel.io.ebean\:querybean-generator=12.12.2
+scm.tag=ebean-parent-12.12.2
+project.rel.io.ebean\:ebean-externalmapping-xml=12.12.2
+project.scm.io.ebean\:ebean-ddl-generator.tag=HEAD
+project.rel.io.ebean\:ebean-externalmapping-api=12.12.2
+project.scm.io.ebean\:ebean-externalmapping-xml.tag=HEAD
+preparationGoals=clean verify
+exec.pomFileName=pom.xml
+project.dev.io.ebean\:ebean-externalmapping-api=12.12.3-SNAPSHOT
+project.dev.io.ebean\:ebean=12.12.3-SNAPSHOT
+project.scm.io.ebean\:ebean.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.dev.io.ebean\:ebean-parent=12.12.3-SNAPSHOT
+project.dev.io.ebean\:ebean-externalmapping-xml=12.12.3-SNAPSHOT
+project.rel.io.ebean\:ebean-core=12.12.2
+project.dev.io.ebean\:ebean-redis=12.12.3-SNAPSHOT
+project.dev.io.ebean\:ebean-postgis=12.12.3-SNAPSHOT
+project.scm.io.ebean\:ebean-redis.tag=HEAD
+project.scm.io.ebean\:ebean-parent.tag=HEAD
+pushChanges=true
+project.scm.io.ebean\:ebean-externalmapping-xml.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+project.rel.io.ebean\:ebean-test=12.12.2
+project.scm.io.ebean\:kotlin-querybean-generator.tag=HEAD
+project.scm.io.ebean\:ebean-bom.tag=HEAD
+project.scm.io.ebean\:ebean-autotune.tag=HEAD
+project.scm.io.ebean\:ebean.tag=HEAD
+project.scm.io.ebean\:ebean-core.tag=HEAD
+project.rel.io.ebean\:ebean-autotune=12.12.2
+scm.rollbackCommitComment=@{prefix} rollback the release of @{releaseLabel}
+remoteTagging=true
+project.dev.io.ebean\:ebean-bom=12.12.3-SNAPSHOT
+project.dev.io.ebean\:ebean-querybean=12.12.3-SNAPSHOT
+project.rel.io.ebean\:ebean-bom=12.12.2
+project.scm.io.ebean\:ebean-parent.developerConnection=scm\:git\:git@github.com\:ebean-orm/ebean.git
+scm.url=scm\:git\:git@github.com\:ebean-orm/ebean.git
+scm.developmentCommitComment=@{prefix} prepare for next development iteration
+project.scm.io.ebean\:ebean-externalmapping-api.tag=HEAD
+scm.tagNameFormat=@{project.artifactId}-@{project.version}
+project.scm.io.ebean\:ebean-test.tag=HEAD
+project.dev.io.ebean\:ebean-ddl-generator=12.12.3-SNAPSHOT
+exec.snapshotReleasePluginAllowed=false
+scm.releaseCommitComment=@{prefix} prepare release @{releaseLabel}
+project.rel.io.ebean\:ebean-postgis=12.12.2
+project.rel.io.ebean\:ebean-parent=12.12.2
From caf18565a0187c939fbd554d12693c30824890b7 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 12 Oct 2021 12:46:15 +1300
Subject: [PATCH 22/91] [maven-release-plugin] prepare for next development
iteration
---
ebean-api/pom.xml | 2 +-
ebean-autotune/pom.xml | 6 +++---
ebean-bom/pom.xml | 30 +++++++++++++++---------------
ebean-core-type/pom.xml | 4 ++--
ebean-core/pom.xml | 10 +++++-----
ebean-ddl-generator/pom.xml | 6 +++---
ebean-externalmapping-api/pom.xml | 2 +-
ebean-externalmapping-xml/pom.xml | 10 +++++-----
ebean-postgis/pom.xml | 6 +++---
ebean-querybean/pom.xml | 10 +++++-----
ebean-redis/pom.xml | 12 ++++++------
ebean-test/pom.xml | 6 +++---
ebean/pom.xml | 8 ++++----
kotlin-querybean-generator/pom.xml | 8 ++++----
pom.xml | 4 ++--
querybean-generator/pom.xml | 2 +-
16 files changed, 63 insertions(+), 63 deletions(-)
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index 59600d198..441d946dd 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean api
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 6fa062dd3..b8a949d10 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
@@ -14,7 +14,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- ebean-parent-12.12.2
+ HEAD
ebean autotune
@@ -26,7 +26,7 @@
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index 9b613e1d6..fee769592 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean bom
@@ -71,88 +71,88 @@
io.ebean
ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-api
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-core-type
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-ddl-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-externalmapping-xml
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-autotune
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-querybean
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
querybean-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
io.ebean
kotlin-querybean-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
io.ebean
ebean-test
- 12.12.2
+ 12.12.3-SNAPSHOT
test
io.ebean
ebean-postgis
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-redis
- 12.12.2
+ 12.12.3-SNAPSHOT
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index 078b585cf..70df7676e 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean-core-type
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 12.12.2
+ 12.12.3-SNAPSHOT
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index b22cdcc68..fa61e4ee2 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean-core
@@ -15,7 +15,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- ebean-parent-12.12.2
+ HEAD
@@ -41,19 +41,19 @@
io.ebean
ebean-api
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-core-type
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 12.12.2
+ 12.12.3-SNAPSHOT
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index 03e420254..b9429be17 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean ddl generation
@@ -28,14 +28,14 @@
io.ebean
ebean-core-type
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index 42d49d000..55c2c26de 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean external mapping api
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 150fcd0df..8c25ebede 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
@@ -14,7 +14,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- ebean-parent-12.12.2
+ HEAD
ebean external mapping xml
@@ -33,7 +33,7 @@
io.ebean
ebean-externalmapping-api
- 12.12.2
+ 12.12.3-SNAPSHOT
@@ -59,14 +59,14 @@
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
test
io.ebean
ebean-ddl-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
test
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index a7355e196..26e7fbcd2 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean postgis
@@ -23,7 +23,7 @@
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
@@ -74,7 +74,7 @@
io.ebean
ebean-test
- 12.12.2
+ 12.12.3-SNAPSHOT
test
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index 4a4ba5027..fc56e3c81 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean querybean
@@ -17,7 +17,7 @@
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
@@ -57,21 +57,21 @@
io.ebean
ebean-ddl-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
test
io.ebean
querybean-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
test
io.ebean
ebean-test
- 12.12.2
+ 12.12.3-SNAPSHOT
test
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 336c321e5..af6861b28 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean-redis
@@ -22,35 +22,35 @@
io.ebean
ebean-api
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
io.ebean
ebean-querybean
- 12.12.2
+ 12.12.3-SNAPSHOT
test
io.ebean
querybean-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
test
io.ebean
ebean-test
- 12.12.2
+ 12.12.3-SNAPSHOT
test
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 00acb64d5..7773328c0 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean test
@@ -29,14 +29,14 @@
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
provided
io.ebean
ebean-ddl-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
diff --git a/ebean/pom.xml b/ebean/pom.xml
index 722ff25bd..50bcdede7 100644
--- a/ebean/pom.xml
+++ b/ebean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
ebean composite
@@ -22,20 +22,20 @@
io.ebean
ebean-api
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
io.ebean
ebean-querybean
- 12.12.2
+ 12.12.3-SNAPSHOT
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index 4b1811649..e0d3223d9 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
kotlin querybean generator
@@ -29,7 +29,7 @@
io.ebean
ebean-querybean
- 12.12.2
+ 12.12.3-SNAPSHOT
test
@@ -43,7 +43,7 @@
io.ebean
ebean-core
- 12.12.2
+ 12.12.3-SNAPSHOT
test
@@ -64,7 +64,7 @@
io.ebean
ebean-ddl-generator
- 12.12.2
+ 12.12.3-SNAPSHOT
test
diff --git a/pom.xml b/pom.xml
index c39af91c1..adc7b78f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
io.ebean
ebean-parent
- 12.12.2
+ 12.12.3-SNAPSHOT
pom
ebean parent
@@ -18,7 +18,7 @@
scm:git:git@github.com:ebean-orm/ebean.git
- ebean-parent-12.12.2
+ HEAD
diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml
index 8fcaeb7f1..912d0ed4d 100644
--- a/querybean-generator/pom.xml
+++ b/querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.2
+ 12.12.3-SNAPSHOT
querybean generator
From e173f6e9a905333494ab21ac5f307da0d0941aec Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 12 Oct 2021 15:10:36 +1300
Subject: [PATCH 23/91] Tidy only DefaultPersistenceContext after merge of
#2411
---
.../server/core/OrmQueryRequest.java | 1 -
.../DefaultPersistenceContext.java | 29 ++-----
.../tests/basic/TestPersistenceContext.java | 80 +++++++++----------
3 files changed, 46 insertions(+), 64 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
index 6ef1e352b..718df243c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/OrmQueryRequest.java
@@ -2,7 +2,6 @@ package io.ebeaninternal.server.core;
import io.ebean.*;
import io.ebean.bean.BeanCollection;
-import io.ebean.bean.EntityBean;
import io.ebean.bean.PersistenceContext;
import io.ebean.cache.QueryCacheEntry;
import io.ebean.common.BeanList;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
index 1ff3d44fa..d10d92ab2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultPersistenceContext.java
@@ -1,7 +1,6 @@
package io.ebeaninternal.server.transaction;
import io.ebean.bean.EntityBean;
-import io.ebean.bean.PersistenceContext;
import io.ebeaninternal.api.SpiBeanType;
import io.ebeaninternal.api.SpiBeanTypeManager;
import io.ebeaninternal.api.SpiPersistenceContext;
@@ -30,7 +29,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private final HashMap, ClassContext> typeCache = new HashMap<>();
private final ReentrantLock lock = new ReentrantLock();
- private final ReferenceQueue queue = new ReferenceQueue();
+ private final ReferenceQueue queue = new ReferenceQueue<>();
/**
* When we are inside an iterate loop, we will add only WeakReferences. This
@@ -66,9 +65,6 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
}
- /**
- * Set an object into the PersistenceContext.
- */
@Override
public void put(Class> rootType, Object id, Object bean) {
lock.lock();
@@ -116,9 +112,6 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
}
- /**
- * Return the number of beans of the given type in the persistence context.
- */
@Override
public int size(Class> rootType) {
lock.lock();
@@ -131,9 +124,6 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
}
}
- /**
- * Clear the PersistenceContext.
- */
@Override
public void clear() {
lock.lock();
@@ -210,10 +200,10 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private void expungeStaleEntries() {
Reference> ref;
while ((ref = queue.poll()) != null) {
- ((BeanRef)ref).expunge();
+ ((BeanRef) ref).expunge();
}
}
-
+
@Override
public String toString() {
lock.lock();
@@ -228,18 +218,16 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private ClassContext classContext(Class> rootType) {
return typeCache.computeIfAbsent(rootType, k -> new ClassContext(k, queue));
}
-
+
private static class ClassContext {
private final Map map = new HashMap<>();
private final Class> rootType;
private final ReferenceQueue queue;
private Set deleteSet;
-
private boolean useReferences;
private int weakCount;
-
private ClassContext(Class> rootType, ReferenceQueue queue) {
this.rootType = rootType;
this.queue = queue;
@@ -249,12 +237,11 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
* When called with "true", initialize referenceQueue and store BeanRefs instead
* of real object references.
*/
- public ClassContext useReferences(boolean useReferences) {
+ private ClassContext useReferences(boolean useReferences) {
this.useReferences = useReferences;
return this;
}
-
@Override
public String toString() {
return "size:" + map.size() + " (" + weakCount + " weak)";
@@ -263,7 +250,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private Object get(Object id) {
Object ret = map.get(id);
if (ret instanceof BeanRef) {
- return ((BeanRef)ret).get();
+ return ((BeanRef) ret).get();
} else {
return ret;
}
@@ -291,7 +278,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private void put(Object id, Object b) {
if (useReferences) {
weakCount++;
- map.put(id, new BeanRef(this, id, b, queue));
+ map.put(id, new BeanRef(this, id, b, queue));
} else {
map.put(id, b);
}
@@ -327,7 +314,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
void dirtyBeans(SpiBeanTypeManager manager, List list) {
final SpiBeanType beanType = manager.beanType(rootType);
for (Object value : map.values()) {
- if (queue != null && value instanceof BeanRef) {
+ if (value instanceof BeanRef) {
value = ((BeanRef) value).get();
if (value == null) continue;
}
diff --git a/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java b/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
index 4d79e5b89..9a53847b4 100644
--- a/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
+++ b/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
@@ -2,11 +2,9 @@ package org.tests.basic;
import io.ebean.BaseTestCase;
import io.ebean.DB;
-import io.ebean.Query;
import io.ebean.Transaction;
import io.ebeaninternal.api.SpiPersistenceContext;
import io.ebeaninternal.api.SpiTransaction;
-
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
@@ -17,33 +15,25 @@ import java.util.List;
import java.util.WeakHashMap;
import java.util.concurrent.atomic.AtomicInteger;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
-public class TestPersistenceContext extends BaseTestCase {
+class TestPersistenceContext extends BaseTestCase {
@Test
- public void test() {
-
+ void test() {
ResetBasicData.reset();
- // implicit transaction with its own
- // persistence context
+ // implicit transaction with its own persistence context
Order oBefore = DB.find(Order.class, 1);
-
- Order order = null;
-
// start a persistence context
DB.beginTransaction();
+
+ Order order;
try {
-
order = DB.find(Order.class, 1);
-
- // not the same instance ...as a different
- // persistence context
- assertTrue(order != oBefore);
-
+ // not the same instance ...as a different persistence context
+ assertNotSame(order, oBefore);
// finds an existing bean in the persistence context
// ... so doesn't even execute a query
@@ -51,19 +41,17 @@ public class TestPersistenceContext extends BaseTestCase {
Order o3 = DB.reference(Order.class, 1);
// all the same instance
- assertTrue(order == o2);
- assertTrue(order == o3);
+ assertSame(order, o2);
+ assertSame(order, o3);
} finally {
DB.endTransaction();
}
- // implicit transaction with its own
- // persistence context
+ // implicit transaction with its own persistence context
Order oAfter = DB.find(Order.class, 1);
-
- assertTrue(oAfter != oBefore);
- assertTrue(oAfter != order);
+ assertNotSame(oAfter, oBefore);
+ assertNotSame(oAfter, order);
// start a persistence context
DB.beginTransaction();
@@ -76,13 +64,16 @@ public class TestPersistenceContext extends BaseTestCase {
.setUseCache(false)
.setId(id)
.findOne();
+ assert customer != null;
System.gc();
Order order2 = DB.find(Order.class, orderId);
+ assert order2 != null;
Customer customer2 = order2.getCustomer();
+ assert customer2 != null;
assertEquals(customer.getId(), customer2.getId());
- assertTrue(customer == customer2);
+ assertSame(customer, customer2);
} finally {
DB.endTransaction();
@@ -120,11 +111,10 @@ public class TestPersistenceContext extends BaseTestCase {
});
}
}
-
+
@Disabled // run manually
@Test
- void testPcScopes() throws InterruptedException {
-
+ void testPcScopes_with_weakReferences() throws InterruptedException {
for (int i = 0; i < 5000; i++) {
Customer c = new Customer();
c.setName("Customer #" + i);
@@ -141,12 +131,15 @@ public class TestPersistenceContext extends BaseTestCase {
c.setSmallnote("one of the first 100");
}
+ // use lastBean to hold onto a weak reference bean
Customer[] lastBean = new Customer[1];
+ // findEach switches on use of weak reference in persistence context
DB.find(Customer.class).setLazyLoadBatchSize(1).findEach(customer -> {
if (customer.getId() <= 100) {
assertEquals("one of the first 100", customer.getSmallnote());
// nested finds
- DB.find(Order.class).where().eq("customer", customer).findEach(20, consumer->{});
+ DB.find(Order.class).where().eq("customer", customer).findEach(20, consumer -> {
+ });
} else {
assertNotEquals("one of the first 100", customer.getSmallnote());
}
@@ -154,30 +147,33 @@ public class TestPersistenceContext extends BaseTestCase {
});
SpiPersistenceContext pc = ((SpiTransaction) txn).getPersistenceContext();
- System.out.println(pc.toString()); // Customer=size:5000 (4900 weak), Order=size:100 (100 weak)
-
+ // the first 100 customers using strong references
+ assertThat(pc.toString()).contains("Customer=size:5000 (4900 weak)");
+ assertThat(pc.toString()).contains("Order=size:100 (100 weak)");
+
System.gc();
Thread.sleep(100);
pc.get(Customer.class, 1); // trigger expungeStaleEntries
- pc.get(Order.class, 1); // Checkme: Would it be a problem, that every classContext has its own queue
- System.out.println(pc.toString()); // Customer=size:101 (1 weak), no orders
+ // pc.get(Order.class, 1);
+ assertThat(pc.toString()).contains("Customer=size:101 (1 weak)");
+ assertThat(pc.toString()).contains("Order=size:0 (0 weak)");
first100 = DB.find(Customer.class).where().le("id", 100).findList();
for (Customer c : first100) {
assertEquals("one of the first 100", c.getSmallnote());
}
Customer lastBeanFromDb = DB.find(Customer.class).setId(lastBean[0].getId()).findOne();
- assertTrue(lastBeanFromDb == lastBean[0]);
-
+ assertSame(lastBeanFromDb, lastBean[0]);
+
// read 200
- DB.find(Customer.class).where().le("id", 200).findList();
- System.out.println(pc.toString()); // Customer=size:201 (1 weak)
-
- lastBean[0] = null;
+ DB.find(Customer.class).where().le("id", 200).findList();
+ assertThat(pc.toString()).contains("Customer=size:201 (1 weak)");
+
+ lastBean[0] = null; // allow GC on this one
lastBeanFromDb = null;
System.gc();
Thread.sleep(100);
- System.out.println(pc.toString()); // Customer=size:200 (0 weak)
+ assertThat(pc.toString()).contains("Customer=size:200 (0 weak)");
}
}
}
From 9bda4ab5c7ed15f39b66d5e6685b859d3c743875 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Wed, 13 Oct 2021 09:37:40 +1300
Subject: [PATCH 24/91] #2303 - Add javadoc for notes on Postgres with
"allQuotedIdentifiers = true"
---
ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java | 3 +++
ebean-api/src/main/java/io/ebean/config/PlatformConfig.java | 3 +++
2 files changed, 6 insertions(+)
diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
index ba0ca78d1..a4b6a6ace 100644
--- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
@@ -1547,6 +1547,9 @@ public class DatabaseConfig {
/**
* Set to true if all DB column and table names should use quoted identifiers.
+ *
+ * For Postgres pgjdbc version 42.2.24 should be used with datasource property
+ * quoteReturningIdentifiers set to false (refer #2303).
*/
public void setAllQuotedIdentifiers(boolean allQuotedIdentifiers) {
platformConfig.setAllQuotedIdentifiers(allQuotedIdentifiers);
diff --git a/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java b/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
index bcb97158d..6062759d2 100644
--- a/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
@@ -117,6 +117,9 @@ public class PlatformConfig {
/**
* Set to true if all DB column and table names should use quoted identifiers.
+ *
+ * For Postgres pgjdbc version 42.2.24 should be used with datasource property
+ * quoteReturningIdentifiers set to false (refer #2303).
*/
public void setAllQuotedIdentifiers(boolean allQuotedIdentifiers) {
this.allQuotedIdentifiers = allQuotedIdentifiers;
From 834c04bd33d48105e7aa13c7c6241f2e6ea30fba Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Wed, 13 Oct 2021 09:45:00 +1300
Subject: [PATCH 25/91] Update Postgres test dependency only (#2303)
---
ebean-core/pom.xml | 2 +-
ebean-postgis/pom.xml | 2 +-
ebean-test/pom.xml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index fa61e4ee2..625a26232 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -136,7 +136,7 @@
org.postgresql
postgresql
- 42.2.20
+ 42.2.24
true
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index 26e7fbcd2..c87c0a60c 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -44,7 +44,7 @@
org.postgresql
postgresql
- 42.2.8
+ 42.2.24
provided
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 7773328c0..4b19e1e3c 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -147,7 +147,7 @@
org.postgresql
postgresql
- 42.2.23
+ 42.2.24
org.checkerframework
From add7a8c4babb5c41ea20d013e2fad1026eeaecb1 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Thu, 14 Oct 2021 14:49:15 +1300
Subject: [PATCH 26/91] Javadoc for #2303 - bump to pgjdbc 42.2.25
Noting that this version of pgjdbc has not been released yet. Guessing that this is the next release number.
---
ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java | 2 +-
ebean-api/src/main/java/io/ebean/config/PlatformConfig.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
index a4b6a6ace..50fa8bb27 100644
--- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
@@ -1548,7 +1548,7 @@ public class DatabaseConfig {
/**
* Set to true if all DB column and table names should use quoted identifiers.
*
- * For Postgres pgjdbc version 42.2.24 should be used with datasource property
+ * For Postgres pgjdbc version 42.2.25 should be used with datasource property
* quoteReturningIdentifiers set to false (refer #2303).
*/
public void setAllQuotedIdentifiers(boolean allQuotedIdentifiers) {
diff --git a/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java b/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
index 6062759d2..a531ffa76 100644
--- a/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
@@ -118,7 +118,7 @@ public class PlatformConfig {
/**
* Set to true if all DB column and table names should use quoted identifiers.
*
- * For Postgres pgjdbc version 42.2.24 should be used with datasource property
+ * For Postgres pgjdbc version 42.2.25 should be used with datasource property
* quoteReturningIdentifiers set to false (refer #2303).
*/
public void setAllQuotedIdentifiers(boolean allQuotedIdentifiers) {
From fa252a1fe42efac07d83e6a068ff99b0891dd601 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 11:23:26 +1300
Subject: [PATCH 27/91] Javadoc for #2303 - bump to pgjdbc 42.3.0
---
ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java | 2 +-
ebean-api/src/main/java/io/ebean/config/PlatformConfig.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
index 50fa8bb27..281d0ea79 100644
--- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
@@ -1548,7 +1548,7 @@ public class DatabaseConfig {
/**
* Set to true if all DB column and table names should use quoted identifiers.
*
- * For Postgres pgjdbc version 42.2.25 should be used with datasource property
+ * For Postgres pgjdbc version 42.3.0 should be used with datasource property
* quoteReturningIdentifiers set to false (refer #2303).
*/
public void setAllQuotedIdentifiers(boolean allQuotedIdentifiers) {
diff --git a/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java b/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
index a531ffa76..f609af041 100644
--- a/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/PlatformConfig.java
@@ -118,7 +118,7 @@ public class PlatformConfig {
/**
* Set to true if all DB column and table names should use quoted identifiers.
*
- * For Postgres pgjdbc version 42.2.25 should be used with datasource property
+ * For Postgres pgjdbc version 42.3.0 should be used with datasource property
* quoteReturningIdentifiers set to false (refer #2303).
*/
public void setAllQuotedIdentifiers(boolean allQuotedIdentifiers) {
From 7862648b83307029ecf52e1ddb95d26307899170 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 11:50:22 +1300
Subject: [PATCH 28/91] #2419 - Add explicit @Nullable on findOne() methods
---
ebean-api/src/main/java/io/ebean/BeanFinder.java | 1 -
.../main/java/io/ebeaninternal/api/SpiEbeanServer.java | 2 ++
.../java/io/ebeaninternal/server/core/DefaultServer.java | 8 +++++++-
.../ebeaninternal/server/querydefn/DefaultDtoQuery.java | 2 ++
4 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/BeanFinder.java b/ebean-api/src/main/java/io/ebean/BeanFinder.java
index aab61b572..771736947 100644
--- a/ebean-api/src/main/java/io/ebean/BeanFinder.java
+++ b/ebean-api/src/main/java/io/ebean/BeanFinder.java
@@ -97,7 +97,6 @@ public abstract class BeanFinder {
/**
* Find an entity by ID returning an Optional.
*/
- @Nullable
public Optional findByIdOrEmpty(I id) {
return db().find(type).setId(id).findOneOrEmpty();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java
index 449a528f4..572f571d0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java
@@ -16,6 +16,7 @@ import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.query.CQuery;
import io.ebeaninternal.server.transaction.RemoteTransactionEvent;
+import javax.annotation.Nullable;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -257,6 +258,7 @@ public interface SpiEbeanServer extends SpiServer, ExtendedServer, EbeanServer,
/**
* DTO findOne query.
*/
+ @Nullable
T findDtoOne(SpiDtoQuery query);
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 33cfb36cb..9e22f99a8 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -102,6 +102,7 @@ import io.ebeanservice.docstore.api.DocStoreIntegration;
import org.slf4j.Logger;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -497,7 +498,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return new DefaultBeanState((EntityBean) bean);
}
// Not an entity bean
- return null;
+ return null; // throw new IllegalArgumentException("Bean is not an entity bean");
}
/**
@@ -1087,6 +1088,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
/**
* Try to get the object out of the persistence context.
*/
+ @Nullable
@SuppressWarnings("unchecked")
private T findIdCheckPersistenceContextAndCache(Transaction transaction, SpiQuery query, Object id) {
SpiTransaction t = (SpiTransaction) transaction;
@@ -1164,6 +1166,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return Optional.ofNullable(findOne(query, transaction));
}
+ @Nullable
@Override
public T findOne(Query query, Transaction transaction) {
SpiQuery spiQuery = (SpiQuery) query;
@@ -1179,6 +1182,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return extractUnique(list);
}
+ @Nullable
private T extractUnique(List list) {
if (list.isEmpty()) {
return null;
@@ -1514,6 +1518,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
+ @Nullable
@Override
public SqlRow findOne(SqlQuery query, Transaction t) {
// no findId() method for SqlQuery...
@@ -1657,6 +1662,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
+ @Nullable
@Override
public T findDtoOne(SpiDtoQuery query) {
DtoQueryRequest request = new DtoQueryRequest<>(this, dtoQueryEngine, query);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java
index 4a72c0057..c404308c5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java
@@ -12,6 +12,7 @@ import io.ebeaninternal.server.dto.DtoBeanDescriptor;
import io.ebeaninternal.server.dto.DtoMappingRequest;
import io.ebeaninternal.server.dto.DtoQueryPlan;
+import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
@@ -114,6 +115,7 @@ public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQue
return server.findDtoList(this);
}
+ @Nullable
@Override
public T findOne() {
return server.findDtoOne(this);
From a61c73c62aee35a08ec25e5b67cea8617c020171 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 11:52:36 +1300
Subject: [PATCH 29/91] #2418 #2420 BeanState.loadErrors() returns empty map
Change Database.beanState() to throw IllegalArgumentException when bean isn't an entity bean
---
.../src/main/java/io/ebean/BeanState.java | 1 -
.../io/ebean/bean/EntityBeanIntercept.java | 8 ++---
.../server/core/DefaultServer.java | 3 +-
.../org/tests/batchload/TestBeanState.java | 30 ++++++++++++-------
4 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/BeanState.java b/ebean-api/src/main/java/io/ebean/BeanState.java
index 20aa0f8e4..740334c61 100644
--- a/ebean-api/src/main/java/io/ebean/BeanState.java
+++ b/ebean-api/src/main/java/io/ebean/BeanState.java
@@ -138,7 +138,6 @@ public interface BeanState {
/**
* Returns a map with load errors.
*/
- @Nullable
Map loadErrors();
/**
diff --git a/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java b/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java
index 3725cc73c..28ac8a8e7 100644
--- a/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java
+++ b/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java
@@ -9,11 +9,7 @@ import javax.persistence.PersistenceException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.net.URL;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -1164,7 +1160,7 @@ public final class EntityBeanIntercept implements Serializable {
*/
public Map getLoadErrors() {
if (loadErrors == null) {
- return null;
+ return Collections.emptyMap();
}
Map ret = null;
int len = getPropertyLength();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 9e22f99a8..b6e26cbcb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -497,8 +497,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
if (bean instanceof EntityBean) {
return new DefaultBeanState((EntityBean) bean);
}
- // Not an entity bean
- return null; // throw new IllegalArgumentException("Bean is not an entity bean");
+ throw new IllegalArgumentException("Bean is not an entity bean");
}
/**
diff --git a/ebean-test/src/test/java/org/tests/batchload/TestBeanState.java b/ebean-test/src/test/java/org/tests/batchload/TestBeanState.java
index 2f244435e..69033d33c 100644
--- a/ebean-test/src/test/java/org/tests/batchload/TestBeanState.java
+++ b/ebean-test/src/test/java/org/tests/batchload/TestBeanState.java
@@ -16,11 +16,24 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
-public class TestBeanState extends BaseTestCase {
+class TestBeanState extends BaseTestCase {
@Test
- public void test() {
+ void invalid() {
+ assertThrows(IllegalArgumentException.class, () -> DB.beanState(new Object()));
+ }
+ @Test
+ void loadErrors_when_empty() {
+ ResetBasicData.reset();
+ Customer one = DB.find(Customer.class).setMaxRows(1).findOne();
+ BeanState beanState = DB.beanState(one);
+
+ assertThat(beanState.loadErrors()).isEmpty();
+ }
+
+ @Test
+ void test() {
ResetBasicData.reset();
List custs = DB.find(Customer.class).findList();
@@ -55,8 +68,7 @@ public class TestBeanState extends BaseTestCase {
}
@Test
- public void setDisableLazyLoad_expect_lazyLoadingDisabled() {
-
+ void setDisableLazyLoad_expect_lazyLoadingDisabled() {
ResetBasicData.reset();
List custs = DB.find(Customer.class).order("id").findList();
@@ -73,8 +85,7 @@ public class TestBeanState extends BaseTestCase {
}
@Test
- public void getChangedProps_when_setManyProperty() {
-
+ void changedProps_when_setManyProperty() {
ResetBasicData.reset();
Customer customer = DB.find(Customer.class).order("id").setMaxRows(1).findOne();
@@ -87,8 +98,7 @@ public class TestBeanState extends BaseTestCase {
}
@Test
- public void getChangedProps_when_setManyProperty_onNewBean() {
-
+ void changedProps_when_setManyProperty_onNewBean() {
Customer customer = new Customer();
BeanState beanState = DB.beanState(customer);
@@ -107,7 +117,7 @@ public class TestBeanState extends BaseTestCase {
}
@Test
- public void readOnly_when_setManyProperty() {
+ void readOnly_when_setManyProperty() {
Customer customer = new Customer();
customer.setContacts(new ArrayList<>());
@@ -120,7 +130,7 @@ public class TestBeanState extends BaseTestCase {
}
@Test
- public void readOnly_when_setProperty() {
+ void readOnly_when_setProperty() {
Customer customer = new Customer();
customer.setName("a");
From 5a4924b6cb816bac623c37753a31c9bb65516d6c Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 11:58:29 +1300
Subject: [PATCH 30/91] #2421 - Change database.diff() to return empty map
rather than null with null bean argument
---
.../server/core/DefaultServer.java | 2 +-
.../server/core/TestDiffHelpSimple.java | 29 +++++++++----------
2 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index b6e26cbcb..5754a9b35 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -566,7 +566,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
public Map diff(Object a, Object b) {
if (a == null) {
- return null;
+ return Collections.emptyMap();
}
BeanDescriptor> desc = descriptor(a.getClass());
return DiffHelp.diff(a, b, desc);
diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java b/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java
index 56be7e09c..5a91d0416 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/server/core/TestDiffHelpSimple.java
@@ -16,9 +16,10 @@ import java.sql.Timestamp;
import java.util.Map;
import java.util.Set;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
-public class TestDiffHelpSimple extends BaseTestCase {
+class TestDiffHelpSimple extends BaseTestCase {
long firstTime = System.currentTimeMillis() - 10000;
long secondTime = System.currentTimeMillis();
@@ -26,7 +27,7 @@ public class TestDiffHelpSimple extends BaseTestCase {
Database server;
BeanDescriptor orderDesc;
- public TestDiffHelpSimple() {
+ TestDiffHelpSimple() {
server = DB.getDefault();
SpiEbeanServer spiServer = (SpiEbeanServer) server;
orderDesc = spiServer.descriptor(Order.class);
@@ -44,9 +45,12 @@ public class TestDiffHelpSimple extends BaseTestCase {
}
@Test
- public void testBasicChanges() {
-
+ void diffWhenNull_expect_empty() {
+ assertThat(DB.diff(null, null)).isEmpty();
+ }
+ @Test
+ void testBasicChanges() {
Order order1 = createBaseOrder(server);
Order order2 = new Order();
@@ -70,9 +74,7 @@ public class TestDiffHelpSimple extends BaseTestCase {
}
@Test
- public void testBasicChanges_given_flatMode() {
-
-
+ void testBasicChanges_given_flatMode() {
Order order1 = createBaseOrder(server);
Order order2 = new Order();
@@ -98,8 +100,7 @@ public class TestDiffHelpSimple extends BaseTestCase {
}
@Test
- public void testIdIgnored() {
-
+ void testIdIgnored() {
Order order1 = createBaseOrder(server);
Order order2 = createBaseOrder(server);
order2.setId(14);
@@ -110,8 +111,7 @@ public class TestDiffHelpSimple extends BaseTestCase {
}
@Test
- public void testSecondValueNull() {
-
+ void testSecondValueNull() {
Order order1 = createBaseOrder(server);
Order order2 = createBaseOrder(server);
@@ -134,10 +134,8 @@ public class TestDiffHelpSimple extends BaseTestCase {
assertNull(shipDatePair.getOldValue());
}
-
@Test
- public void testFirstValueNull() {
-
+ void testFirstValueNull() {
Order order1 = createBaseOrder(server);
order1.setShipDate(null);
@@ -157,8 +155,7 @@ public class TestDiffHelpSimple extends BaseTestCase {
}
@Test
- public void testBothNull() {
-
+ void testBothNull() {
Order order1 = createBaseOrder(server);
order1.setShipDate(null);
From 709eb369c92aee8d55c786c9e53a916c76643e62 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 12:12:11 +1300
Subject: [PATCH 31/91] #2419 - Add explicit @Nullable on findOne() methods
---
ebean-api/src/main/java/io/ebean/Database.java | 1 +
.../main/java/io/ebeaninternal/server/core/DefaultServer.java | 1 +
2 files changed, 2 insertions(+)
diff --git a/ebean-api/src/main/java/io/ebean/Database.java b/ebean-api/src/main/java/io/ebean/Database.java
index 396f3225a..68efaf11e 100644
--- a/ebean-api/src/main/java/io/ebean/Database.java
+++ b/ebean-api/src/main/java/io/ebean/Database.java
@@ -1236,6 +1236,7 @@ public interface Database {
* @param id the bean id value
* @param transaction the transaction to use (can be null)
*/
+ @Nullable
T find(Class beanType, Object id, Transaction transaction);
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 5754a9b35..a75e62db3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -2302,6 +2302,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
/**
* Returns a set of properties if saving the bean will violate the unique constraints (defined by given properties).
*/
+ @Nullable
private Set checkUniqueness(EntityBean entityBean, BeanDescriptor> beanDesc, BeanProperty[] props, Transaction transaction) {
BeanProperty idProperty = beanDesc.idProperty();
Query> query = new DefaultOrmQuery<>(beanDesc, this, expressionFactory);
From c7bb027c7dda6530f3d117afac9bfa565c5354a8 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 17:33:23 +1300
Subject: [PATCH 32/91] #2422 - Remove extraneous jsr 305 @Nonnull
---
ebean-api/src/main/java/io/ebean/BeanFinder.java | 3 ---
ebean-api/src/main/java/io/ebean/DB.java | 3 ---
ebean-api/src/main/java/io/ebean/Database.java | 4 ----
ebean-api/src/main/java/io/ebean/DtoQuery.java | 5 -----
ebean-api/src/main/java/io/ebean/Ebean.java | 3 ---
.../src/main/java/io/ebean/EmptyPagedList.java | 3 ---
.../src/main/java/io/ebean/ExpressionList.java | 14 --------------
.../src/main/java/io/ebean/ExtendedServer.java | 16 ----------------
ebean-api/src/main/java/io/ebean/FetchGroup.java | 4 ----
.../main/java/io/ebean/FetchGroupBuilder.java | 15 ---------------
ebean-api/src/main/java/io/ebean/Finder.java | 3 ---
ebean-api/src/main/java/io/ebean/PagedList.java | 3 ---
ebean-api/src/main/java/io/ebean/Query.java | 16 ----------------
ebean-api/src/main/java/io/ebean/SqlQuery.java | 3 ---
.../src/main/java/io/ebean/plugin/BeanType.java | 5 -----
.../src/main/java/io/ebean/plugin/Property.java | 4 ----
16 files changed, 104 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/BeanFinder.java b/ebean-api/src/main/java/io/ebean/BeanFinder.java
index 771736947..7c5416363 100644
--- a/ebean-api/src/main/java/io/ebean/BeanFinder.java
+++ b/ebean-api/src/main/java/io/ebean/BeanFinder.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
@@ -81,7 +80,6 @@ public abstract class BeanFinder {
*
* Equivalent to {@link Database#reference(Class, Object)}
*/
- @Nonnull
public T ref(I id) {
return db().reference(type, id);
}
@@ -111,7 +109,6 @@ public abstract class BeanFinder {
/**
* Retrieves all entities of the given type.
*/
- @Nonnull
public List findAll() {
return query().findList();
}
diff --git a/ebean-api/src/main/java/io/ebean/DB.java b/ebean-api/src/main/java/io/ebean/DB.java
index 9bcfb047d..c855b9c1e 100644
--- a/ebean-api/src/main/java/io/ebean/DB.java
+++ b/ebean-api/src/main/java/io/ebean/DB.java
@@ -6,7 +6,6 @@ import io.ebean.plugin.Property;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -523,7 +522,6 @@ public final class DB {
* @param bean The entity bean to check uniqueness on
* @return a set of Properties if constraint validation was detected or empty list.
*/
- @Nonnull
public static Set checkUniqueness(Object bean) {
return getDefault().checkUniqueness(bean);
}
@@ -531,7 +529,6 @@ public final class DB {
/**
* Same as {@link #checkUniqueness(Object)}. but with given transaction.
*/
- @Nonnull
public static Set checkUniqueness(Object bean, Transaction transaction) {
return getDefault().checkUniqueness(bean, transaction);
}
diff --git a/ebean-api/src/main/java/io/ebean/Database.java b/ebean-api/src/main/java/io/ebean/Database.java
index 68efaf11e..b0c862f56 100644
--- a/ebean-api/src/main/java/io/ebean/Database.java
+++ b/ebean-api/src/main/java/io/ebean/Database.java
@@ -10,7 +10,6 @@ import io.ebean.plugin.SpiServer;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -949,7 +948,6 @@ public interface Database {
* @param beanType the type of entity bean
* @param id the id value
*/
- @Nonnull
T reference(Class beanType, Object id);
/**
@@ -1295,13 +1293,11 @@ public interface Database {
* @param bean The entity bean to check uniqueness on
* @return a set of Properties if constraint validation was detected or empty list.
*/
- @Nonnull
Set checkUniqueness(Object bean);
/**
* Same as {@link #checkUniqueness(Object)}. but with given transaction.
*/
- @Nonnull
Set checkUniqueness(Object bean, Transaction transaction);
/**
diff --git a/ebean-api/src/main/java/io/ebean/DtoQuery.java b/ebean-api/src/main/java/io/ebean/DtoQuery.java
index 69ed034ef..e46ee7105 100644
--- a/ebean-api/src/main/java/io/ebean/DtoQuery.java
+++ b/ebean-api/src/main/java/io/ebean/DtoQuery.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
@@ -43,7 +42,6 @@ public interface DtoQuery extends CancelableQuery {
/**
* Execute the query returning a list.
*/
- @Nonnull
List findList();
/**
@@ -53,7 +51,6 @@ public interface DtoQuery extends CancelableQuery {
* resultSet and potentially connection and MUST be closed. We should use
* QueryIterator in a try with resource block .
*/
- @Nonnull
QueryIterator findIterate();
/**
@@ -63,7 +60,6 @@ public interface DtoQuery extends CancelableQuery {
* resultSet and potentially connection and MUST be closed. We should use
* the Stream in a try with resource block .
*/
- @Nonnull
Stream findStream();
/**
@@ -105,7 +101,6 @@ public interface DtoQuery extends CancelableQuery {
/**
* Execute the query returning an optional bean.
*/
- @Nonnull
Optional findOneOrEmpty();
/**
diff --git a/ebean-api/src/main/java/io/ebean/Ebean.java b/ebean-api/src/main/java/io/ebean/Ebean.java
index eabc3c5b4..f1ce4aac3 100644
--- a/ebean-api/src/main/java/io/ebean/Ebean.java
+++ b/ebean-api/src/main/java/io/ebean/Ebean.java
@@ -6,7 +6,6 @@ import io.ebean.plugin.Property;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -506,7 +505,6 @@ public final class Ebean {
* @param bean The entity bean to check uniqueness on
* @return a set of Properties if constraint validation was detected or empty list.
*/
- @Nonnull
public static Set checkUniqueness(Object bean) {
return getDefault().checkUniqueness(bean);
}
@@ -514,7 +512,6 @@ public final class Ebean {
/**
* Same as {@link #checkUniqueness(Object)}. but with given transaction.
*/
- @Nonnull
public static Set checkUniqueness(Object bean, Transaction transaction) {
return getDefault().checkUniqueness(bean, transaction);
}
diff --git a/ebean-api/src/main/java/io/ebean/EmptyPagedList.java b/ebean-api/src/main/java/io/ebean/EmptyPagedList.java
index bbf72a731..74886c985 100644
--- a/ebean-api/src/main/java/io/ebean/EmptyPagedList.java
+++ b/ebean-api/src/main/java/io/ebean/EmptyPagedList.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
@@ -25,13 +24,11 @@ public class EmptyPagedList implements PagedList {
// do nothing
}
- @Nonnull
@Override
public Future getFutureCount() {
return null;
}
- @Nonnull
@Override
public List getList() {
return Collections.emptyList();
diff --git a/ebean-api/src/main/java/io/ebean/ExpressionList.java b/ebean-api/src/main/java/io/ebean/ExpressionList.java
index e91846e08..80587ebf2 100644
--- a/ebean-api/src/main/java/io/ebean/ExpressionList.java
+++ b/ebean-api/src/main/java/io/ebean/ExpressionList.java
@@ -6,7 +6,6 @@ import io.ebean.search.TextCommonTerms;
import io.ebean.search.TextQueryString;
import io.ebean.search.TextSimple;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import java.sql.Connection;
@@ -327,7 +326,6 @@ public interface ExpressionList {
*
* @see Query#findList()
*/
- @Nonnull
List findList();
/**
@@ -335,7 +333,6 @@ public interface ExpressionList {
*
* @see Query#findIds()
*/
- @Nonnull
List findIds();
/**
@@ -351,7 +348,6 @@ public interface ExpressionList {
*
* @see Query#findSet()
*/
- @Nonnull
Set findSet();
/**
@@ -359,7 +355,6 @@ public interface ExpressionList {
*
* @see Query#findMap()
*/
- @Nonnull
Map findMap();
/**
@@ -392,7 +387,6 @@ public interface ExpressionList {
*
* @return the list of values for the selected property
*/
- @Nonnull
List findSingleAttributeList();
/**
@@ -429,7 +423,6 @@ public interface ExpressionList {
/**
* Execute the query returning an optional bean.
*/
- @Nonnull
Optional findOneOrEmpty();
/**
@@ -442,7 +435,6 @@ public interface ExpressionList {
*
* @return a Future object for the row count query
*/
- @Nonnull
FutureRowCount findFutureCount();
/**
@@ -455,7 +447,6 @@ public interface ExpressionList {
*
* @return a Future object for the list of Id's
*/
- @Nonnull
FutureIds findFutureIds();
/**
@@ -468,7 +459,6 @@ public interface ExpressionList {
*
* @return a Future object for the list result of the query
*/
- @Nonnull
FutureList findFutureList();
/**
@@ -499,7 +489,6 @@ public interface ExpressionList {
* @return The PagedList
* @see Query#findPagedList()
*/
- @Nonnull
PagedList findPagedList();
/**
@@ -509,7 +498,6 @@ public interface ExpressionList {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
List> findVersions();
/**
@@ -519,13 +507,11 @@ public interface ExpressionList {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
List> findVersionsBetween(Timestamp start, Timestamp end);
/**
* Add some filter predicate expressions to the many property.
*/
- @Nonnull
ExpressionList filterMany(String manyProperty);
/**
diff --git a/ebean-api/src/main/java/io/ebean/ExtendedServer.java b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
index 59b1c678e..9decb9b27 100644
--- a/ebean-api/src/main/java/io/ebean/ExtendedServer.java
+++ b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import java.time.Clock;
@@ -82,7 +81,6 @@ public interface ExtendedServer {
*
* @see Query#findIds()
*/
- @Nonnull
List findIds(Query query, Transaction transaction);
/**
@@ -100,7 +98,6 @@ public interface ExtendedServer {
* @see Query#findEach(Consumer)
* @see Query#findEachWhile(Predicate)
*/
- @Nonnull
QueryIterator findIterate(Query query, Transaction transaction);
/**
@@ -112,7 +109,6 @@ public interface ExtendedServer {
* Note that the stream needs to be closed so use with try with resources.
*
*/
- @Nonnull
Stream findStream(Query query, Transaction transaction);
/**
@@ -125,7 +121,6 @@ public interface ExtendedServer {
*
* Note that the stream needs to be closed so use with try with resources.
*/
- @Nonnull
@Deprecated
Stream findLargeStream(Query query, Transaction transaction);
@@ -210,7 +205,6 @@ public interface ExtendedServer {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
List> findVersions(Query query, Transaction transaction);
/**
@@ -235,7 +229,6 @@ public interface ExtendedServer {
* @return the list of fetched beans.
* @see Query#findList()
*/
- @Nonnull
List findList(Query query, Transaction transaction);
/**
@@ -251,7 +244,6 @@ public interface ExtendedServer {
* @return a Future object for the row count query
* @see Query#findFutureCount()
*/
- @Nonnull
FutureRowCount findFutureCount(Query query, Transaction transaction);
/**
@@ -267,7 +259,6 @@ public interface ExtendedServer {
* @return a Future object for the list of Id's
* @see Query#findFutureIds()
*/
- @Nonnull
FutureIds findFutureIds(Query query, Transaction transaction);
/**
@@ -284,7 +275,6 @@ public interface ExtendedServer {
* @return a Future object for the list result of the query
* @see Query#findFutureList()
*/
- @Nonnull
FutureList findFutureList(Query query, Transaction transaction);
/**
@@ -316,7 +306,6 @@ public interface ExtendedServer {
* @return The PagedList
* @see Query#findPagedList()
*/
- @Nonnull
PagedList findPagedList(Query query, Transaction transaction);
/**
@@ -341,7 +330,6 @@ public interface ExtendedServer {
* @return the set of fetched beans.
* @see Query#findSet()
*/
- @Nonnull
Set findSet(Query query, Transaction transaction);
/**
@@ -358,7 +346,6 @@ public interface ExtendedServer {
* @return the map of fetched beans.
* @see Query#findMap()
*/
- @Nonnull
Map findMap(Query query, Transaction transaction);
/**
@@ -391,7 +378,6 @@ public interface ExtendedServer {
* @return the list of values for the selected property
* @see Query#findSingleAttributeList()
*/
- @Nonnull
List findSingleAttributeList(Query query, Transaction transaction);
/**
@@ -419,7 +405,6 @@ public interface ExtendedServer {
/**
* Similar to findOne() but returns an Optional (rather than nullable).
*/
- @Nonnull
Optional findOneOrEmpty(Query query, Transaction transaction);
/**
@@ -463,7 +448,6 @@ public interface ExtendedServer {
* @return the list of fetched MapBean.
* @see SqlQuery#findList()
*/
- @Nonnull
List findList(SqlQuery query, Transaction transaction);
/**
diff --git a/ebean-api/src/main/java/io/ebean/FetchGroup.java b/ebean-api/src/main/java/io/ebean/FetchGroup.java
index 95ea70412..5eb749048 100644
--- a/ebean-api/src/main/java/io/ebean/FetchGroup.java
+++ b/ebean-api/src/main/java/io/ebean/FetchGroup.java
@@ -2,8 +2,6 @@ package io.ebean;
import io.ebean.service.SpiFetchGroupQuery;
-import javax.annotation.Nonnull;
-
/**
* Defines what part of the object graph to load (select and fetch clauses).
*
@@ -83,7 +81,6 @@ public interface FetchGroup {
*
* @return The FetchGroup with the given select clause
*/
- @Nonnull
static FetchGroup of(Class cls, String select) {
return XServiceProvider.fetchGroupOf(cls, select);
}
@@ -108,7 +105,6 @@ public interface FetchGroup {
*
* @return The FetchGroupBuilder with the given select clause which we will add fetch clauses to
*/
- @Nonnull
static FetchGroupBuilder of(Class cls) {
return XServiceProvider.fetchGroupOf(cls);
}
diff --git a/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java b/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java
index 121cceb53..aeda3e7e5 100644
--- a/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java
+++ b/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java
@@ -1,7 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
-
/**
* Builds a FetchGroup by adding fetch clauses.
*
@@ -28,80 +26,67 @@ public interface FetchGroupBuilder {
/**
* Specify specific properties to select (top level properties).
*/
- @Nonnull
FetchGroupBuilder select(String select);
/**
* Fetch all the properties at the given path.
*/
- @Nonnull
FetchGroupBuilder fetch(String path);
/**
* Fetch the path with the nested fetch group.
*/
- @Nonnull
FetchGroupBuilder fetch(String path, FetchGroup> nestedGroup);
/**
* Fetch the path using a query join with the nested fetch group.
*/
- @Nonnull
FetchGroupBuilder fetchQuery(String path, FetchGroup> nestedGroup);
/**
* Fetch the path lazily with the nested fetch group.
*/
- @Nonnull
FetchGroupBuilder fetchLazy(String path, FetchGroup> nestedGroup);
/**
* Fetch the path including specified properties.
*/
- @Nonnull
FetchGroupBuilder fetch(String path, String properties);
/**
* Fetch the path including all its properties using a query join.
*/
- @Nonnull
FetchGroupBuilder fetchQuery(String path);
/**
* Fetch the path including all its properties using L2 cache.
* Cache misses fallback to fetchQuery().
*/
- @Nonnull
FetchGroupBuilder fetchCache(String path);
/**
* Fetch the path including specified properties using a query join.
*/
- @Nonnull
FetchGroupBuilder fetchQuery(String path, String properties);
/**
* Fetch the path including specified properties using L2 cache.
* Cache misses fallback to fetchQuery().
*/
- @Nonnull
FetchGroupBuilder fetchCache(String path, String properties);
/**
* Fetch the path including all its properties lazily.
*/
- @Nonnull
FetchGroupBuilder fetchLazy(String path);
/**
* Fetch the path including specified properties lazily.
*/
- @Nonnull
FetchGroupBuilder fetchLazy(String path, String properties);
/**
* Build and return the FetchGroup.
*/
- @Nonnull
FetchGroup build();
}
diff --git a/ebean-api/src/main/java/io/ebean/Finder.java b/ebean-api/src/main/java/io/ebean/Finder.java
index cc5ef87f6..68b0fe203 100644
--- a/ebean-api/src/main/java/io/ebean/Finder.java
+++ b/ebean-api/src/main/java/io/ebean/Finder.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
@@ -139,7 +138,6 @@ public class Finder {
*
* Equivalent to {@link Database#reference(Class, Object)}
*/
- @Nonnull
public T ref(I id) {
return db().reference(type, id);
}
@@ -166,7 +164,6 @@ public class Finder {
/**
* Retrieves all entities of the given type.
*/
- @Nonnull
public List all() {
return query().findList();
}
diff --git a/ebean-api/src/main/java/io/ebean/PagedList.java b/ebean-api/src/main/java/io/ebean/PagedList.java
index 662f426f8..f4e1d3610 100644
--- a/ebean-api/src/main/java/io/ebean/PagedList.java
+++ b/ebean-api/src/main/java/io/ebean/PagedList.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import java.util.List;
import java.util.concurrent.Future;
@@ -116,13 +115,11 @@ public interface PagedList {
*
* }
*/
- @Nonnull
Future getFutureCount();
/**
* Return the list of entities for this page.
*/
- @Nonnull
List getList();
/**
diff --git a/ebean-api/src/main/java/io/ebean/Query.java b/ebean-api/src/main/java/io/ebean/Query.java
index 0dc86905e..eee7bf8ff 100644
--- a/ebean-api/src/main/java/io/ebean/Query.java
+++ b/ebean-api/src/main/java/io/ebean/Query.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import java.sql.Connection;
@@ -689,7 +688,6 @@ public interface Query extends CancelableQuery {
* This query will execute against the Database that was used to create it.
*
*/
- @Nonnull
List findIds();
/**
@@ -727,7 +725,6 @@ public interface Query extends CancelableQuery {
*
* }
*/
- @Nonnull
QueryIterator findIterate();
/**
@@ -749,7 +746,6 @@ public interface Query extends CancelableQuery {
*
* }
*/
- @Nonnull
Stream findStream();
/**
@@ -772,7 +768,6 @@ public interface Query extends CancelableQuery {
*
* }
*/
- @Nonnull
@Deprecated
Stream findLargeStream();
@@ -882,7 +877,6 @@ public interface Query extends CancelableQuery {
*
* }
*/
- @Nonnull
List findList();
/**
@@ -898,7 +892,6 @@ public interface Query extends CancelableQuery {
*
* }
*/
- @Nonnull
Set findSet();
/**
@@ -918,7 +911,6 @@ public interface Query extends CancelableQuery {
*
* }
*/
- @Nonnull
Map findMap();
/**
@@ -951,7 +943,6 @@ public interface Query extends CancelableQuery {
*
* @return the list of values for the selected property
*/
- @Nonnull
List findSingleAttributeList();
/**
@@ -1049,7 +1040,6 @@ public interface Query extends CancelableQuery {
/**
* Execute the query returning an optional bean.
*/
- @Nonnull
Optional findOneOrEmpty();
/**
@@ -1064,7 +1054,6 @@ public interface Query extends CancelableQuery {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
List> findVersions();
/**
@@ -1074,7 +1063,6 @@ public interface Query extends CancelableQuery {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
List> findVersionsBetween(Timestamp start, Timestamp end);
/**
@@ -1132,7 +1120,6 @@ public interface Query extends CancelableQuery {
*
* @return a Future object for the row count query
*/
- @Nonnull
FutureRowCount findFutureCount();
/**
@@ -1145,7 +1132,6 @@ public interface Query extends CancelableQuery {
*
* @return a Future object for the list of Id's
*/
- @Nonnull
FutureIds findFutureIds();
/**
@@ -1157,7 +1143,6 @@ public interface Query extends CancelableQuery {
*
* @return a Future object for the list result of the query
*/
- @Nonnull
FutureList findFutureList();
/**
@@ -1187,7 +1172,6 @@ public interface Query extends CancelableQuery {
*
* @return The PagedList
*/
- @Nonnull
PagedList findPagedList();
/**
diff --git a/ebean-api/src/main/java/io/ebean/SqlQuery.java b/ebean-api/src/main/java/io/ebean/SqlQuery.java
index 9a878f233..d7e184257 100644
--- a/ebean-api/src/main/java/io/ebean/SqlQuery.java
+++ b/ebean-api/src/main/java/io/ebean/SqlQuery.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -42,7 +41,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
/**
* Execute the query returning a list.
*/
- @Nonnull
List findList();
/**
@@ -119,7 +117,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
/**
* Execute the query returning an optional row.
*/
- @Nonnull
Optional findOneOrEmpty();
/**
diff --git a/ebean-api/src/main/java/io/ebean/plugin/BeanType.java b/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
index 661b370d2..e7f324a56 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
@@ -8,7 +8,6 @@ import io.ebean.event.BeanPersistController;
import io.ebean.event.BeanPersistListener;
import io.ebean.event.BeanQueryAdapter;
-import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
@@ -21,7 +20,6 @@ public interface BeanType {
/**
* Return the short name of the bean type.
*/
- @Nonnull
String name();
/**
@@ -35,7 +33,6 @@ public interface BeanType {
/**
* Return the full name of the bean type.
*/
- @Nonnull
String fullName();
/**
@@ -49,7 +46,6 @@ public interface BeanType {
/**
* Return the class type this BeanDescriptor describes.
*/
- @Nonnull
Class type();
/**
@@ -76,7 +72,6 @@ public interface BeanType {
/**
* Return all the properties for this bean type.
*/
- @Nonnull
Collection extends Property> allProperties();
/**
diff --git a/ebean-api/src/main/java/io/ebean/plugin/Property.java b/ebean-api/src/main/java/io/ebean/plugin/Property.java
index 50a1ebc3d..d37fa2959 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/Property.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/Property.java
@@ -1,7 +1,5 @@
package io.ebean.plugin;
-import javax.annotation.Nonnull;
-
/**
* Property of a entity bean that can be read.
*/
@@ -10,7 +8,6 @@ public interface Property {
/**
* Return the name of the property.
*/
- @Nonnull
String name();
/**
@@ -24,7 +21,6 @@ public interface Property {
/**
* Return the type of the property.
*/
- @Nonnull
Class> type();
/**
From a445557ec3544cfaa69fa3d828abf529e2fe63b4 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Tue, 19 Oct 2021 17:59:25 +1300
Subject: [PATCH 33/91] #2422 - Remove extraneous jsr 305 @Nonnull
---
.../server/core/DefaultServer.java | 17 -----------------
.../server/deploy/BeanDescriptor.java | 5 -----
.../server/deploy/BeanProperty.java | 3 ---
.../server/query/DefaultFetchGroupQuery.java | 16 ----------------
.../java/io/ebean/typequery/TQRootBean.java | 19 -------------------
.../io/ebeaninternal/api/TDSpiServer.java | 4 ----
.../java/org/tests/query/cache/Contract.java | 2 --
7 files changed, 66 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index a75e62db3..e197ecc41 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -101,7 +101,6 @@ import io.ebeaninternal.util.ParamTypeHelper.TypeInfo;
import io.ebeanservice.docstore.api.DocStoreIntegration;
import org.slf4j.Logger;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import javax.persistence.OptimisticLockException;
@@ -1159,7 +1158,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
public Optional findOneOrEmpty(Query query, Transaction transaction) {
return Optional.ofNullable(findOne(query, transaction));
@@ -1192,7 +1190,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
public Set findSet(Query query, Transaction t) {
@@ -1209,7 +1206,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
public Map findMap(Query query, Transaction t) {
@@ -1231,7 +1227,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
@SuppressWarnings("unchecked")
public List findSingleAttributeList(Query query, Transaction t) {
@@ -1295,7 +1290,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
public List findIds(Query query, Transaction t) {
return findIdsWithCopy(((SpiQuery) query).copy(), t);
@@ -1356,7 +1350,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
public FutureRowCount findFutureCount(Query q, Transaction t) {
SpiQuery copy = ((SpiQuery) q).copy();
@@ -1367,7 +1360,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return queryFuture;
}
- @Nonnull
@Override
public FutureIds findFutureIds(Query query, Transaction t) {
SpiQuery copy = ((SpiQuery) query).copy();
@@ -1378,7 +1370,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return queryFuture;
}
- @Nonnull
@Override
public FutureList findFutureList(Query query, Transaction t) {
SpiQuery spiQuery = (SpiQuery) query.copy();
@@ -1396,7 +1387,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return queryFuture;
}
- @Nonnull
@Override
public PagedList findPagedList(Query query, Transaction transaction) {
SpiQuery spiQuery = (SpiQuery) query;
@@ -1410,7 +1400,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return new LimitOffsetPagedList<>(this, spiQuery);
}
- @Nonnull
@Override
public QueryIterator findIterate(Query query, Transaction t) {
SpiOrmQueryRequest request = createQueryRequest(Type.ITERATE, query, t);
@@ -1423,13 +1412,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
public Stream findLargeStream(Query query, Transaction transaction) {
return findStream(query, transaction);
}
- @Nonnull
@Override
public Stream findStream(Query query, Transaction transaction) {
return toStream(findIterate(query, transaction));
@@ -1475,7 +1462,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
// no try finally - findEachWhile guarantee's cleanup of the transaction if required
}
- @Nonnull
@Override
public List> findVersions(Query query, Transaction transaction) {
SpiOrmQueryRequest request = createQueryRequest(Type.LIST, query, transaction);
@@ -1487,7 +1473,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
public List findList(Query query, Transaction t) {
return findList(query, t, false);
@@ -1548,7 +1533,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Nonnull
@Override
public List findList(SqlQuery query, Transaction t) {
RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, t);
@@ -2271,7 +2255,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return checkUniqueness(bean, null);
}
- @Nonnull
@Override
public Set checkUniqueness(Object bean, Transaction transaction) {
EntityBean entityBean = checkEntityBean(bean);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
index d165815e4..d675d9bf0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
@@ -56,7 +56,6 @@ import io.ebeanservice.docstore.api.mapping.DocPropertyMapping;
import io.ebeanservice.docstore.api.mapping.DocumentMapping;
import org.slf4j.Logger;
-import javax.annotation.Nonnull;
import javax.persistence.PersistenceException;
import java.io.IOException;
import java.io.StringWriter;
@@ -1961,7 +1960,6 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
* Return the class type this BeanDescriptor describes.
*/
@Override
- @Nonnull
public Class type() {
return beanType;
}
@@ -1973,7 +1971,6 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
* instead.
*/
@Override
- @Nonnull
public String fullName() {
return fullName;
}
@@ -1982,7 +1979,6 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
* Return the short name of the entity bean.
*/
@Override
- @Nonnull
public String name() {
return name;
}
@@ -2936,7 +2932,6 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
}
@Override
- @Nonnull
public Collection extends Property> allProperties() {
return propertiesAll();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
index 12709ee70..bbee58e60 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
@@ -40,7 +40,6 @@ import io.ebeanservice.docstore.api.mapping.DocPropertyMapping;
import io.ebeanservice.docstore.api.mapping.DocPropertyOptions;
import io.ebeanservice.docstore.api.support.DocStructure;
-import javax.annotation.Nonnull;
import javax.persistence.PersistenceException;
import java.io.DataInput;
import java.io.DataOutput;
@@ -813,7 +812,6 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
* Return the name of the property.
*/
@Override
- @Nonnull
public String name() {
return name;
}
@@ -1299,7 +1297,6 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
* Return the property type.
*/
@Override
- @Nonnull
public Class> type() {
return propertyType;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
index 459bba998..5e5d2b834 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
@@ -29,7 +29,6 @@ import io.ebeaninternal.api.SpiQueryFetch;
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
import io.ebeaninternal.server.querydefn.SpiFetchGroup;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.sql.Connection;
import java.sql.Timestamp;
@@ -234,25 +233,21 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public List findIds() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public QueryIterator findIterate() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public Stream findStream() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public Stream findLargeStream() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
@@ -273,25 +268,21 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public List findList() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public Set findSet() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public Map findMap() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public List findSingleAttributeList() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
@@ -318,19 +309,16 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public Optional findOneOrEmpty() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public List> findVersions() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public List> findVersionsBetween(Timestamp start, Timestamp end) {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
@@ -361,25 +349,21 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public FutureRowCount findFutureCount() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public FutureIds findFutureIds() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public FutureList findFutureList() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Nonnull
@Override
public PagedList findPagedList() {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
diff --git a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
index 2b25938c2..1e3c8570b 100644
--- a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
+++ b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
@@ -28,7 +28,6 @@ import io.ebean.text.PathProperties;
import io.ebeaninternal.api.SpiQueryFetch;
import io.ebeaninternal.server.util.ArrayStack;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.sql.Connection;
import java.sql.Timestamp;
@@ -177,7 +176,6 @@ public abstract class TQRootBean {
* the find methods available on this 'root query bean' instance like findList().
*
*/
- @Nonnull
public Query query() {
return query;
}
@@ -1621,7 +1619,6 @@ public abstract class TQRootBean {
/**
* Execute the query returning an optional bean.
*/
- @Nonnull
public Optional findOneOrEmpty() {
return query.findOneOrEmpty();
}
@@ -1643,7 +1640,6 @@ public abstract class TQRootBean {
*
* @see Query#findList()
*/
- @Nonnull
public List findList() {
return query.findList();
}
@@ -1667,7 +1663,6 @@ public abstract class TQRootBean {
*
* }
*/
- @Nonnull
public Stream findStream() {
return query.findStream();
}
@@ -1697,7 +1692,6 @@ public abstract class TQRootBean {
*
* @see Query#findSet()
*/
- @Nonnull
public Set findSet() {
return query.findSet();
}
@@ -1710,7 +1704,6 @@ public abstract class TQRootBean {
*
* @see Query#findIds()
*/
- @Nonnull
public List findIds() {
return query.findIds();
}
@@ -1736,7 +1729,6 @@ public abstract class TQRootBean {
*
* @see Query#findMap()
*/
- @Nonnull
public Map findMap() {
return query.findMap();
}
@@ -1777,7 +1769,6 @@ public abstract class TQRootBean {
*
* }
*/
- @Nonnull
public QueryIterator findIterate() {
return query.findIterate();
}
@@ -1798,7 +1789,6 @@ public abstract class TQRootBean {
*
* @return the list of values for the selected property
*/
- @Nonnull
public List findSingleAttributeList() {
return query.findSingleAttributeList();
}
@@ -1913,7 +1903,6 @@ public abstract class TQRootBean {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
public List> findVersions() {
return query.findVersions();
}
@@ -1925,7 +1914,6 @@ public abstract class TQRootBean {
* It will execute the query against the history returning the versions of the bean.
*
*/
- @Nonnull
public List> findVersionsBetween(Timestamp start, Timestamp end) {
return query.findVersionsBetween(start, end);
}
@@ -1936,7 +1924,6 @@ public abstract class TQRootBean {
* This is the number of 'top level' or 'root level' entities.
*
*/
- @Nonnull
public int findCount() {
return query.findCount();
}
@@ -1951,7 +1938,6 @@ public abstract class TQRootBean {
*
* @return a Future object for the row count query
*/
- @Nonnull
public FutureRowCount findFutureCount() {
return query.findFutureCount();
}
@@ -1966,7 +1952,6 @@ public abstract class TQRootBean {
*
* @return a Future object for the list of Id's
*/
- @Nonnull
public FutureIds findFutureIds() {
return query.findFutureIds();
}
@@ -1980,7 +1965,6 @@ public abstract class TQRootBean {
*
* @return a Future object for the list result of the query
*/
- @Nonnull
public FutureList findFutureList() {
return query.findFutureList();
}
@@ -2014,7 +1998,6 @@ public abstract class TQRootBean {
*
* @return The PagedList
*/
- @Nonnull
public PagedList findPagedList() {
return query.findPagedList();
}
@@ -2047,7 +2030,6 @@ public abstract class TQRootBean {
/**
* Return the type of beans being queried.
*/
- @Nonnull
public Class getBeanType() {
return query.getBeanType();
}
@@ -2055,7 +2037,6 @@ public abstract class TQRootBean {
/**
* Return the expression list that has been built for this query.
*/
- @Nonnull
public ExpressionList getExpressionList() {
return query.where();
}
diff --git a/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java b/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java
index 620e9664a..10bfcd87a 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java
@@ -15,7 +15,6 @@ import io.ebean.plugin.SpiServer;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -267,7 +266,6 @@ public class TDSpiServer implements SpiServer {
return null;
}
- @Nonnull
@Override
public T reference(Class beanType, Object id) {
return null;
@@ -413,13 +411,11 @@ public class TDSpiServer implements SpiServer {
return 0;
}
- @Nonnull
@Override
public Set checkUniqueness(Object bean) {
return null;
}
- @Nonnull
@Override
public Set checkUniqueness(Object bean, Transaction transaction) {
return null;
diff --git a/ebean-test/src/test/java/org/tests/query/cache/Contract.java b/ebean-test/src/test/java/org/tests/query/cache/Contract.java
index 344a09be6..71cfcb727 100644
--- a/ebean-test/src/test/java/org/tests/query/cache/Contract.java
+++ b/ebean-test/src/test/java/org/tests/query/cache/Contract.java
@@ -1,6 +1,5 @@
package org.tests.query.cache;
-import javax.annotation.Nonnull;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@@ -17,7 +16,6 @@ public class Contract {
private List positions;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "container", fetch = FetchType.LAZY)
- @Nonnull
private List aclEntries = new ArrayList<>();
public Long getId() {
From 92a13ad265d62404ea91a0f8146071d964d1f7a4 Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Wed, 20 Oct 2021 09:52:06 +1300
Subject: [PATCH 34/91] Remove pom releaseBackup files that should not be there
---
ebean-api/pom.xml.releaseBackup | 131 ----------
ebean-autotune/pom.xml.releaseBackup | 74 ------
ebean-bom/pom.xml.releaseBackup | 162 ------------
ebean-core-type/pom.xml.releaseBackup | 46 ----
ebean-core/pom.xml.releaseBackup | 247 ------------------
ebean-ddl-generator/pom.xml.releaseBackup | 106 --------
.../pom.xml.releaseBackup | 30 ---
.../pom.xml.releaseBackup | 100 -------
ebean-postgis/pom.xml.releaseBackup | 118 ---------
ebean-querybean/pom.xml.releaseBackup | 113 --------
ebean-redis/pom.xml.releaseBackup | 93 -------
ebean-test/pom.xml.releaseBackup | 245 -----------------
ebean/pom.xml.releaseBackup | 58 ----
pom.xml.releaseBackup | 97 -------
querybean-generator/pom.xml.releaseBackup | 52 ----
15 files changed, 1672 deletions(-)
delete mode 100644 ebean-api/pom.xml.releaseBackup
delete mode 100644 ebean-autotune/pom.xml.releaseBackup
delete mode 100644 ebean-bom/pom.xml.releaseBackup
delete mode 100644 ebean-core-type/pom.xml.releaseBackup
delete mode 100644 ebean-core/pom.xml.releaseBackup
delete mode 100644 ebean-ddl-generator/pom.xml.releaseBackup
delete mode 100644 ebean-externalmapping-api/pom.xml.releaseBackup
delete mode 100644 ebean-externalmapping-xml/pom.xml.releaseBackup
delete mode 100644 ebean-postgis/pom.xml.releaseBackup
delete mode 100644 ebean-querybean/pom.xml.releaseBackup
delete mode 100644 ebean-redis/pom.xml.releaseBackup
delete mode 100644 ebean-test/pom.xml.releaseBackup
delete mode 100644 ebean/pom.xml.releaseBackup
delete mode 100644 pom.xml.releaseBackup
delete mode 100644 querybean-generator/pom.xml.releaseBackup
diff --git a/ebean-api/pom.xml.releaseBackup b/ebean-api/pom.xml.releaseBackup
deleted file mode 100644
index b67a4459f..000000000
--- a/ebean-api/pom.xml.releaseBackup
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean api
- ebean api
- ebean-api
-
-
-
-
-
- org.slf4j
- slf4j-api
- 1.7.30
- provided
-
-
-
- io.avaje
- avaje-config
- 1.5
-
-
-
-
- io.avaje
- avaje-jsr305
- 1.1
- provided
-
-
-
- io.ebean
- persistence-api
- 2.2.5
-
-
-
- io.ebean
- ebean-annotation
- 7.3
-
-
-
- io.ebean
- ebean-types
- 2.2
-
-
-
- io.ebean
- ebean-datasource-api
- ${ebean-datasource.version}
-
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
- true
-
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
- true
-
-
-
-
- com.h2database
- h2
- 1.4.199
- true
-
-
-
- javax.transaction
- jta
- 1.1
- true
-
-
-
- javax.servlet
- javax.servlet-api
- 3.1.0
- true
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
diff --git a/ebean-autotune/pom.xml.releaseBackup b/ebean-autotune/pom.xml.releaseBackup
deleted file mode 100644
index 211349a54..000000000
--- a/ebean-autotune/pom.xml.releaseBackup
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
-
-
-
-
-
-
- scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
-
-
- ebean autotune
- ebean automatic query tuning module
- ebean-autotune
-
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- provided
-
-
-
-
- org.glassfish.jaxb
- jaxb-runtime
- 2.3.2
- provided
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.ebean.tile:enhancement:12.11.3
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
diff --git a/ebean-bom/pom.xml.releaseBackup b/ebean-bom/pom.xml.releaseBackup
deleted file mode 100644
index 5627cbbf9..000000000
--- a/ebean-bom/pom.xml.releaseBackup
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean bom
- ebean bill of materials pom
- ebean-bom
- pom
-
-
-
-
-
-
-
-
- io.ebean
- ebean-ddl-runner
- ${ebean-ddl-runner.version}
-
-
-
- io.ebean
- ebean-migration-auto
- ${ebean-migration-auto.version}
-
-
-
- io.ebean
- ebean-migration
- ${ebean-migration.version}
-
-
-
- io.ebean
- ebean-datasource-api
- ${ebean-datasource.version}
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
-
-
-
- io.ebean
- ebean-agent
- ${ebean-agent.version}
-
-
-
- io.ebean
- ebean-maven-plugin
- ${ebean-maven-plugin.version}
-
-
-
- io.ebean
- ebean-test-docker
- ${ebean-test-docker.version}
-
-
-
-
-
- io.ebean
- ebean
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-api
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-core-type
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-ddl-generator
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-externalmapping-api
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-externalmapping-xml
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-autotune
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-querybean
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- querybean-generator
- 12.12.2-SNAPSHOT
- provided
-
-
-
- io.ebean
- kotlin-querybean-generator
- 12.12.2-SNAPSHOT
- provided
-
-
-
- io.ebean
- ebean-test
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.ebean
- ebean-postgis
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-redis
- 12.12.2-SNAPSHOT
-
-
-
-
-
-
-
diff --git a/ebean-core-type/pom.xml.releaseBackup b/ebean-core-type/pom.xml.releaseBackup
deleted file mode 100644
index fe0d4888a..000000000
--- a/ebean-core-type/pom.xml.releaseBackup
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean-core-type
- ebean core type
- ebean scalar types api
-
-
-
-
- io.ebean
- ebean-api
- 12.12.2-SNAPSHOT
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
- true
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
diff --git a/ebean-core/pom.xml.releaseBackup b/ebean-core/pom.xml.releaseBackup
deleted file mode 100644
index f902be3fd..000000000
--- a/ebean-core/pom.xml.releaseBackup
+++ /dev/null
@@ -1,247 +0,0 @@
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean-core
- jar
-
- ebean core
- ebean core module
- https://ebean.io/
-
-
- scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
-
-
-
-
-
- io.ebean
- ebean-ddl-runner
- 1.2
-
-
-
- io.avaje
- classpath-scanner
- 6.2
-
-
-
- io.ebean
- ebean-migration-auto
- 1.1
-
-
-
- io.ebean
- ebean-api
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-core-type
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-externalmapping-api
- 12.12.2-SNAPSHOT
-
-
-
- org.antlr
- antlr4-runtime
- 4.8-1
-
-
-
-
- io.avaje
- avaje-jsr305-x
- 1.1
- provided
-
-
-
-
- com.h2database
- h2
- 1.4.199
- provided
-
-
-
- javax.transaction
- javax.transaction-api
- 1.3
- true
-
-
-
-
- javax.validation
- validation-api
- 2.0.1.Final
- true
-
-
- jakarta.validation
- jakarta.validation-api
- 3.0.0
- true
-
-
-
- joda-time
- joda-time
- 2.9.7
- true
-
-
-
-
-
-
-
-
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
- true
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
- true
-
-
-
-
- org.postgresql
- postgresql
- 42.2.20
- true
-
-
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
-
-
- io.ebean
- ebean-maven-plugin
- ${ebean-maven-plugin.version}
-
-
- test
- process-test-classes
-
- debug=0
-
-
- testEnhance
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.0.0-M4
-
- false
- false
- false
-
- **/Test*.java
- **/*Test.java
- **/*Tests.java
-
-
-
-
- datasource.default
- ${datasource.default}
-
-
-
- dbClockDelta
- ${dbClockDelta}
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.1.1
-
- Ebean 12
- src/main/java/io/ebean/overview.html
- io.ebeaninternal.*:io.ebeanservice:io.ebean.common:io.ebean.bean:io.ebean.service:io.ebean.metric:io.ebean.util:io.ebean.config.properties:io.ebean.config.dbplatform
- true
- src/main/java/com/avaje/ebean/overview.html
-
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
-
-
diff --git a/ebean-ddl-generator/pom.xml.releaseBackup b/ebean-ddl-generator/pom.xml.releaseBackup
deleted file mode 100644
index 0679d53bf..000000000
--- a/ebean-ddl-generator/pom.xml.releaseBackup
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean ddl generation
- DDL and DB Migration generation
- ebean-ddl-generator
-
-
-
-
- io.ebean
- ebean-ddl-runner
- 1.2
-
-
-
- io.ebean
- ebean-migration
- 12.12.1
-
-
-
- io.ebean
- ebean-core-type
- 12.12.2-SNAPSHOT
- provided
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- provided
-
-
-
-
- org.glassfish.jaxb
- jaxb-runtime
- 2.3.2
- provided
-
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
- test
-
-
-
- javax.validation
- validation-api
- 2.0.1.Final
- test
-
-
-
-
-
-
-
- io.ebean
- ebean-maven-plugin
- ${ebean-maven-plugin.version}
-
-
- test
- process-test-classes
-
- debug=0
-
-
- testEnhance
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
diff --git a/ebean-externalmapping-api/pom.xml.releaseBackup b/ebean-externalmapping-api/pom.xml.releaseBackup
deleted file mode 100644
index 72ab57a4b..000000000
--- a/ebean-externalmapping-api/pom.xml.releaseBackup
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean external mapping api
- API for mapping external named queries
- ebean-externalmapping-api
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
diff --git a/ebean-externalmapping-xml/pom.xml.releaseBackup b/ebean-externalmapping-xml/pom.xml.releaseBackup
deleted file mode 100644
index 753c7dbd5..000000000
--- a/ebean-externalmapping-xml/pom.xml.releaseBackup
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
-
-
-
-
-
-
- scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
-
-
- ebean external mapping xml
- XML implementation for mapping external named queries
- ebean-externalmapping-xml
-
-
-
-
- org.slf4j
- slf4j-api
- 1.7.30
- provided
-
-
-
- io.ebean
- ebean-externalmapping-api
- 12.12.2-SNAPSHOT
-
-
-
- org.glassfish.jaxb
- jaxb-runtime
- 2.3.2
-
-
-
- io.avaje
- classpath-scanner
- 6.2
-
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
- test
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.ebean
- ebean-ddl-generator
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
-
- io.ebean.tile:enhancement:12.11.3
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
diff --git a/ebean-postgis/pom.xml.releaseBackup b/ebean-postgis/pom.xml.releaseBackup
deleted file mode 100644
index 046768e1c..000000000
--- a/ebean-postgis/pom.xml.releaseBackup
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean postgis
- ebean postgis module
- https://ebean.io/
-
- ebean-postgis
-
-
- 2.2.1
-
-
-
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- provided
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
- true
-
-
-
- net.postgis
- postgis-jdbc
- [${postgis.jdbc.version}]
-
-
-
-
- org.postgresql
- postgresql
- 42.2.8
- provided
-
-
-
-
- org.slf4j
- slf4j-api
- 1.7.30
- provided
-
-
-
-
- org.geolatte
- geolatte-geom
- 1.0.6
- provided
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
- test
-
-
-
- io.ebean
- ebean-test
- 12.12.2-SNAPSHOT
- test
-
-
-
- org.avaje.composite
- logback
- 1.1
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.ebean.tile:enhancement:12.11.3
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
-
-
diff --git a/ebean-querybean/pom.xml.releaseBackup b/ebean-querybean/pom.xml.releaseBackup
deleted file mode 100644
index d5c624049..000000000
--- a/ebean-querybean/pom.xml.releaseBackup
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean querybean
- Ebean querybean support
- ebean-querybean
-
-
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- provided
-
-
-
-
- io.avaje
- avaje-jsr305
- 1.1
- provided
-
-
-
- joda-time
- joda-time
- 1.6
- true
-
-
-
- javax.validation
- validation-api
- 2.0.1.Final
- true
-
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
- test
-
-
-
- io.ebean
- ebean-ddl-generator
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.ebean
- querybean-generator
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.ebean
- ebean-test
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
- org.avaje.composite
- logback
- 1.1
- test
-
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.ebean.tile:enhancement:12.11.3
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
-
diff --git a/ebean-redis/pom.xml.releaseBackup b/ebean-redis/pom.xml.releaseBackup
deleted file mode 100644
index 571988d2b..000000000
--- a/ebean-redis/pom.xml.releaseBackup
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean-redis
- ebean redis
- Ebean Redis L2 Cache
-
-
-
-
- redis.clients
- jedis
- 3.6.3
-
-
-
- io.ebean
- ebean-api
- 12.12.2-SNAPSHOT
- provided
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- provided
-
-
-
- io.ebean
- ebean-querybean
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.ebean
- querybean-generator
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.ebean
- ebean-test
- 12.12.2-SNAPSHOT
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
- org.avaje.composite
- logback
- 1.1
- test
-
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.ebean.tile:enhancement:12.11.3
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
-
-
diff --git a/ebean-test/pom.xml.releaseBackup b/ebean-test/pom.xml.releaseBackup
deleted file mode 100644
index 9039501e5..000000000
--- a/ebean-test/pom.xml.releaseBackup
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean test
- Testing support for Ebean
- ebean-test
-
-
-
-
- org.slf4j
- slf4j-api
- 1.7.30
- provided
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
- provided
-
-
-
- io.ebean
- ebean-ddl-generator
- 12.12.2-SNAPSHOT
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
- true
-
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- ${jackson.version}
- true
-
-
-
- io.ebean
- ebean-test-docker
- 4.2
-
-
-
- org.assertj
- assertj-core
- 3.14.0
-
-
-
-
- org.glassfish.jaxb
- jaxb-runtime
- 2.3.2
-
-
-
-
- com.h2database
- h2
- 1.4.199
-
-
-
-
-
- io.avaje
- avaje-jsr305
- 1.1
- test
-
-
-
- io.ebean
- ebean-migration
- 12.12.1
- test
-
-
-
- io.avaje
- mod-uuid
- 1.1
- test
-
-
-
- javax.transaction
- jta
- 1.1
- test
-
-
-
-
- javax.validation
- validation-api
- 2.0.1.Final
- test
-
-
-
- jakarta.validation
- jakarta.validation-api
- 3.0.0
- test
-
-
-
- joda-time
- joda-time
- 2.9.7
- test
-
-
-
- javax.annotation
- javax.annotation-api
- 1.3.2
- test
-
-
- commons-io
- commons-io
- 2.7
- test
-
-
-
- org.postgresql
- postgresql
- 42.2.23
-
-
- org.checkerframework
- checker-qual
-
-
- test
-
-
-
- com.microsoft.sqlserver
- mssql-jdbc
- 9.4.0.jre8
- test
-
-
-
- mysql
- mysql-connector-java
- 8.0.26
- test
-
-
-
- org.mariadb.jdbc
- mariadb-java-client
- 2.6.0
- test
-
-
-
- com.sap.cloud.db.jdbc
- ngdbc
- 2.3.48
- test
-
-
-
- com.oracle.database.jdbc
- ojdbc10
- 19.12.0.0
- test
-
-
-
- ch.qos.logback
- logback-classic
- 1.2.3
- test
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
- db2
-
-
-
- com.ibm.db2
- jcc
- 11.5.5.0
- test
-
-
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.ebean.tile:enhancement:12.11.3
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
-
diff --git a/ebean/pom.xml.releaseBackup b/ebean/pom.xml.releaseBackup
deleted file mode 100644
index ae27a93d2..000000000
--- a/ebean/pom.xml.releaseBackup
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- ebean composite
- Composite of common runtime dependencies
- ebean
-
-
-
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
-
-
-
- io.ebean
- ebean-api
- 12.12.2-SNAPSHOT
-
-
-
- io.ebean
- ebean-core
- 12.12.2-SNAPSHOT
-
-
-
-
- io.ebean
- ebean-querybean
- 12.12.2-SNAPSHOT
-
-
-
-
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
diff --git a/pom.xml.releaseBackup b/pom.xml.releaseBackup
deleted file mode 100644
index 84bd4f362..000000000
--- a/pom.xml.releaseBackup
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
- 4.0.0
-
- org.avaje
- java8-oss
- 3.2
-
-
- io.ebean
- ebean-parent
- 12.12.2-SNAPSHOT
- pom
-
- ebean parent
- Parent for ebean modules
- https://ebean.io/
-
-
- scm:git:git@github.com:ebean-orm/ebean.git
- HEAD
-
-
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
-
-
- rbygrave
- Rob Bygrave
- robin.bygrave@gmail.com
-
-
-
-
- true
- 2.12.1
- 1.2
- 1.1
- 12.12.1
- 4.2
- 7.3
- 12.12.2
- 12.12.2
-
-
-
-
-
- org.slf4j
- slf4j-api
- 1.7.30
- provided
-
-
-
- ch.qos.logback
- logback-classic
- 1.2.3
- test
-
-
-
- com.h2database
- h2
- 1.4.199
- test
-
-
-
-
-
- ebean
- ebean-api
- ebean-bom
- ebean-core-type
- ebean-core
- ebean-ddl-generator
- ebean-autotune
- ebean-externalmapping-api
- ebean-externalmapping-xml
- ebean-test
- querybean-generator
- kotlin-querybean-generator
- ebean-querybean
- ebean-postgis
- ebean-redis
-
-
-
-
-
diff --git a/querybean-generator/pom.xml.releaseBackup b/querybean-generator/pom.xml.releaseBackup
deleted file mode 100644
index 5fd7ff9d4..000000000
--- a/querybean-generator/pom.xml.releaseBackup
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- 4.0.0
-
- ebean-parent
- io.ebean
- 12.12.2-SNAPSHOT
-
-
- querybean generator
- Querybean generator
- querybean-generator
-
-
-
-
- io.avaje
- junit
- 1.0
- test
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.2
-
- 1.8
- 1.8
-
- -proc:none
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
-
From b3ee982b64a9884a56d9ab42a5a1e93b798c279b Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Wed, 20 Oct 2021 15:45:20 +1300
Subject: [PATCH 35/91] Use @NonNullApi to explicitly reflect non-null return
types and params by default
---
ebean-api/pom.xml | 5 +-
.../java/io/ebean/BackgroundExecutor.java | 3 +
.../src/main/java/io/ebean/BeanFinder.java | 5 +-
.../main/java/io/ebean/BeanRepository.java | 2 +
.../src/main/java/io/ebean/BeanState.java | 1 -
ebean-api/src/main/java/io/ebean/DB.java | 82 +---------------
.../src/main/java/io/ebean/Database.java | 4 +-
.../src/main/java/io/ebean/DocumentStore.java | 4 +-
.../src/main/java/io/ebean/DtoQuery.java | 4 +-
ebean-api/src/main/java/io/ebean/Ebean.java | 2 +-
.../main/java/io/ebean/ExpressionList.java | 16 +--
.../main/java/io/ebean/ExtendedServer.java | 3 +-
.../src/main/java/io/ebean/FetchGroup.java | 2 +
.../main/java/io/ebean/FetchGroupBuilder.java | 3 +
ebean-api/src/main/java/io/ebean/Filter.java | 3 +
ebean-api/src/main/java/io/ebean/Finder.java | 4 +-
.../src/main/java/io/ebean/Junction.java | 6 +-
ebean-api/src/main/java/io/ebean/Query.java | 4 +-
.../src/main/java/io/ebean/SqlQuery.java | 5 +-
.../server/core/DefaultServer.java | 97 ++++++++++---------
.../io/ebeaninternal/server/el/ElFilter.java | 2 +
.../executor/DefaultBackgroundExecutor.java | 2 +
.../expression/DefaultExpressionList.java | 4 +
.../expression/FilterExpressionList.java | 19 ++--
.../server/expression/JunctionExpression.java | 4 +
.../server/query/DFetchGroupBuilder.java | 15 ++-
.../server/query/DefaultFetchGroupQuery.java | 7 +-
.../server/querydefn/DefaultDtoQuery.java | 3 +
.../server/querydefn/DefaultOrmQuery.java | 2 +
.../querydefn/DefaultRelationalQuery.java | 4 +
.../docstore/none/NoneDocStore.java | 2 +
ebean-querybean/pom.xml | 5 +-
.../java/io/ebean/typequery/TQRootBean.java | 31 +-----
.../java/org/querytest/QCustomerTest.java | 36 ++-----
.../ebeaninternal/api/TDSpiEbeanServer.java | 2 +
.../io/ebeaninternal/api/TDSpiServer.java | 2 +
.../BinaryTransactionEventReadWriteTest.java | 4 +-
pom.xml | 2 +-
tests/test-kotlin/pom.xml | 2 +-
.../ebean/test/kotlin/BasicInsertQueryTest.kt | 32 ++++++
40 files changed, 200 insertions(+), 235 deletions(-)
create mode 100644 tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/BasicInsertQueryTest.kt
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index 441d946dd..bda389e23 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -36,9 +36,8 @@
-->
io.avaje
- avaje-jsr305
- 1.1
- provided
+ avaje-lang
+ 1.0
diff --git a/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java b/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java
index 537fb7f36..f553933db 100644
--- a/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java
+++ b/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java
@@ -1,5 +1,7 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
+
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
@@ -18,6 +20,7 @@ import java.util.concurrent.TimeUnit;
* This also propagates MDC context from the current thread to the
* background task if defined.
*/
+@NonNullApi
public interface BackgroundExecutor {
/**
diff --git a/ebean-api/src/main/java/io/ebean/BeanFinder.java b/ebean-api/src/main/java/io/ebean/BeanFinder.java
index 7c5416363..1f5c0a12c 100644
--- a/ebean-api/src/main/java/io/ebean/BeanFinder.java
+++ b/ebean-api/src/main/java/io/ebean/BeanFinder.java
@@ -1,6 +1,7 @@
package io.ebean;
-import javax.annotation.Nullable;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import java.util.List;
import java.util.Optional;
@@ -26,10 +27,10 @@ import java.util.Optional;
* @param The ID type
* @param The Bean type
*/
+@NonNullApi
public abstract class BeanFinder {
protected final Database server;
-
protected final Class type;
/**
diff --git a/ebean-api/src/main/java/io/ebean/BeanRepository.java b/ebean-api/src/main/java/io/ebean/BeanRepository.java
index b89a49b39..ad973e261 100644
--- a/ebean-api/src/main/java/io/ebean/BeanRepository.java
+++ b/ebean-api/src/main/java/io/ebean/BeanRepository.java
@@ -1,5 +1,6 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
import io.ebean.bean.EntityBean;
import java.util.Collection;
@@ -31,6 +32,7 @@ import java.util.Collection;
* @param The ID type
* @param The Bean type
*/
+@NonNullApi
public abstract class BeanRepository extends BeanFinder {
/**
diff --git a/ebean-api/src/main/java/io/ebean/BeanState.java b/ebean-api/src/main/java/io/ebean/BeanState.java
index 740334c61..912d737fa 100644
--- a/ebean-api/src/main/java/io/ebean/BeanState.java
+++ b/ebean-api/src/main/java/io/ebean/BeanState.java
@@ -1,6 +1,5 @@
package io.ebean;
-import javax.annotation.Nullable;
import java.util.Map;
import java.util.Set;
diff --git a/ebean-api/src/main/java/io/ebean/DB.java b/ebean-api/src/main/java/io/ebean/DB.java
index c855b9c1e..b5438eb08 100644
--- a/ebean-api/src/main/java/io/ebean/DB.java
+++ b/ebean-api/src/main/java/io/ebean/DB.java
@@ -1,12 +1,13 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.annotation.TxIsolation;
import io.ebean.cache.ServerCacheManager;
import io.ebean.plugin.Property;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
import java.util.Collection;
@@ -59,6 +60,7 @@ import java.util.concurrent.Callable;
*
* }
*/
+@NonNullApi
public final class DB {
private static final DbContext context = DbContext.getInstance();
@@ -527,7 +529,7 @@ public final class DB {
}
/**
- * Same as {@link #checkUniqueness(Object)}. but with given transaction.
+ * Same as {@link #checkUniqueness(Object)} but with given transaction.
*/
public static Set checkUniqueness(Object bean, Transaction transaction) {
return getDefault().checkUniqueness(bean, transaction);
@@ -848,7 +850,6 @@ public final class DB {
* }
*/
public static Update createUpdate(Class beanType, String ormUpdate) {
-
return getDefault().createUpdate(beanType, ormUpdate);
}
@@ -856,7 +857,6 @@ public final class DB {
* Create a CsvReader for a given beanType.
*/
public static CsvReader createCsvReader(Class beanType) {
-
return getDefault().createCsvReader(beanType);
}
@@ -894,7 +894,6 @@ public final class DB {
* @return A ORM Query for this beanType
*/
public static Query createQuery(Class beanType) {
-
return getDefault().createQuery(beanType);
}
@@ -932,7 +931,6 @@ public final class DB {
* @return The query with expressions defined as per the parsed query statement
*/
public static Query createQuery(Class beanType, String eql) {
-
return getDefault().createQuery(beanType, eql);
}
@@ -948,7 +946,6 @@ public final class DB {
* @return A ORM Query object for this beanType
*/
public static Query find(Class beanType) {
-
return getDefault().find(beanType);
}
@@ -1027,77 +1024,6 @@ public final class DB {
return getDefault().filter(beanType);
}
-// /**
-// * Execute a Sql Update Delete or Insert statement. This returns the number of
-// * rows that where updated, deleted or inserted. If is executed in batch then
-// * this returns -1. You can get the actual rowCount after commit() from
-// * updateSql.getRowCount().
-// *
-// * If you wish to execute a Sql Select natively then you should use the
-// * FindByNativeSql object.
-// *
-// *
-// * Note that the table modification information is automatically deduced and
-// * you do not need to call the DB.externalModification() method when you
-// * use this method.
-// *
-// *
-// * Example:
-// *
-// * {@code
-// *
-// * // example that uses 'named' parameters
-// * String s = "UPDATE f_topic set post_count = :count where id = :id"
-// *
-// * SqlUpdate update = DB.createSqlUpdate(s);
-// *
-// * update.setParameter("id", 1);
-// * update.setParameter("count", 50);
-// *
-// * int modifiedCount = DB.execute(update);
-// *
-// * String msg = "There where " + modifiedCount + "rows updated";
-// *
-// * }
-// *
-// * @param sqlUpdate the update sql potentially with bind values
-// * @return the number of rows updated or deleted. -1 if executed in batch.
-// * @see SqlUpdate
-// * @see CallableSql
-// * @see DB#execute(CallableSql)
-// */
-// public static int execute(SqlUpdate sqlUpdate) {
-// return defaultDatabase().execute(sqlUpdate);
-// }
-//
-// /**
-// * For making calls to stored procedures.
-// *
-// * Example:
-// *
-// * {@code
-// *
-// * String sql = "{call sp_order_modify(?,?,?)}";
-// *
-// * CallableSql cs = DB.createCallableSql(sql);
-// * cs.setParameter(1, 27);
-// * cs.setParameter(2, "SHIPPED");
-// * cs.registerOut(3, Types.INTEGER);
-// *
-// * DB.execute(cs);
-// *
-// * // read the out parameter
-// * Integer returnValue = (Integer) cs.getObject(3);
-// *
-// * }
-// *
-// * @see CallableSql
-// * @see Ebean#execute(SqlUpdate)
-// */
-// public static int execute(CallableSql callableSql) {
-// return defaultDatabase().execute(callableSql);
-// }
-
/**
* Execute a TxRunnable in a Transaction with an explicit scope.
*
diff --git a/ebean-api/src/main/java/io/ebean/Database.java b/ebean-api/src/main/java/io/ebean/Database.java
index b0c862f56..c7cad0cf7 100644
--- a/ebean-api/src/main/java/io/ebean/Database.java
+++ b/ebean-api/src/main/java/io/ebean/Database.java
@@ -1,5 +1,7 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
import io.ebean.cache.ServerCacheManager;
@@ -10,7 +12,6 @@ import io.ebean.plugin.SpiServer;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
import javax.sql.DataSource;
@@ -91,6 +92,7 @@ import java.util.concurrent.Callable;
* @see DatabaseFactory
* @see DatabaseConfig
*/
+@NonNullApi
public interface Database {
/**
diff --git a/ebean-api/src/main/java/io/ebean/DocumentStore.java b/ebean-api/src/main/java/io/ebean/DocumentStore.java
index 0a2353ff0..7b5a6c481 100644
--- a/ebean-api/src/main/java/io/ebean/DocumentStore.java
+++ b/ebean-api/src/main/java/io/ebean/DocumentStore.java
@@ -1,9 +1,10 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.docstore.DocQueryContext;
import io.ebean.docstore.RawDoc;
-import javax.annotation.Nullable;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -13,6 +14,7 @@ import java.util.function.Predicate;
/**
* Document storage operations.
*/
+@NonNullApi
public interface DocumentStore {
/**
diff --git a/ebean-api/src/main/java/io/ebean/DtoQuery.java b/ebean-api/src/main/java/io/ebean/DtoQuery.java
index e46ee7105..853cfccb6 100644
--- a/ebean-api/src/main/java/io/ebean/DtoQuery.java
+++ b/ebean-api/src/main/java/io/ebean/DtoQuery.java
@@ -1,6 +1,7 @@
package io.ebean;
-import javax.annotation.Nullable;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
@@ -37,6 +38,7 @@ import java.util.stream.Stream;
*
* }
*/
+@NonNullApi
public interface DtoQuery extends CancelableQuery {
/**
diff --git a/ebean-api/src/main/java/io/ebean/Ebean.java b/ebean-api/src/main/java/io/ebean/Ebean.java
index f1ce4aac3..f58c9dac0 100644
--- a/ebean-api/src/main/java/io/ebean/Ebean.java
+++ b/ebean-api/src/main/java/io/ebean/Ebean.java
@@ -1,12 +1,12 @@
package io.ebean;
+import io.avaje.lang.Nullable;
import io.ebean.annotation.TxIsolation;
import io.ebean.cache.ServerCacheManager;
import io.ebean.plugin.Property;
import io.ebean.text.csv.CsvReader;
import io.ebean.text.json.JsonContext;
-import javax.annotation.Nullable;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
import java.util.Collection;
diff --git a/ebean-api/src/main/java/io/ebean/ExpressionList.java b/ebean-api/src/main/java/io/ebean/ExpressionList.java
index 80587ebf2..8f2ebe0d0 100644
--- a/ebean-api/src/main/java/io/ebean/ExpressionList.java
+++ b/ebean-api/src/main/java/io/ebean/ExpressionList.java
@@ -1,20 +1,13 @@
package io.ebean;
-import io.ebean.search.Match;
-import io.ebean.search.MultiMatch;
-import io.ebean.search.TextCommonTerms;
-import io.ebean.search.TextQueryString;
-import io.ebean.search.TextSimple;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
+import io.ebean.search.*;
-import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import java.sql.Connection;
import java.sql.Timestamp;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -38,6 +31,7 @@ import java.util.function.Predicate;
*
* @see Query#where()
*/
+@NonNullApi
public interface ExpressionList {
/**
diff --git a/ebean-api/src/main/java/io/ebean/ExtendedServer.java b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
index 9decb9b27..1bb21a721 100644
--- a/ebean-api/src/main/java/io/ebean/ExtendedServer.java
+++ b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
@@ -1,6 +1,7 @@
package io.ebean;
-import javax.annotation.Nullable;
+import io.avaje.lang.Nullable;
+
import javax.persistence.NonUniqueResultException;
import java.time.Clock;
import java.util.List;
diff --git a/ebean-api/src/main/java/io/ebean/FetchGroup.java b/ebean-api/src/main/java/io/ebean/FetchGroup.java
index 5eb749048..26e3d84c2 100644
--- a/ebean-api/src/main/java/io/ebean/FetchGroup.java
+++ b/ebean-api/src/main/java/io/ebean/FetchGroup.java
@@ -1,5 +1,6 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
import io.ebean.service.SpiFetchGroupQuery;
/**
@@ -60,6 +61,7 @@ import io.ebean.service.SpiFetchGroupQuery;
*
* @param The bean type the Fetch group can be applied to
*/
+@NonNullApi
public interface FetchGroup {
/**
diff --git a/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java b/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java
index aeda3e7e5..2b282fb05 100644
--- a/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java
+++ b/ebean-api/src/main/java/io/ebean/FetchGroupBuilder.java
@@ -1,5 +1,7 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
+
/**
* Builds a FetchGroup by adding fetch clauses.
*
@@ -21,6 +23,7 @@ package io.ebean;
*
* }
*/
+@NonNullApi
public interface FetchGroupBuilder {
/**
diff --git a/ebean-api/src/main/java/io/ebean/Filter.java b/ebean-api/src/main/java/io/ebean/Filter.java
index 758f88b57..5181b0e99 100644
--- a/ebean-api/src/main/java/io/ebean/Filter.java
+++ b/ebean-api/src/main/java/io/ebean/Filter.java
@@ -1,5 +1,7 @@
package io.ebean;
+import io.avaje.lang.NonNullApi;
+
import java.util.List;
import java.util.Set;
@@ -77,6 +79,7 @@ import java.util.Set;
*
* @param the entity bean type
*/
+@NonNullApi
public interface Filter {
/**
diff --git a/ebean-api/src/main/java/io/ebean/Finder.java b/ebean-api/src/main/java/io/ebean/Finder.java
index 68b0fe203..2bb927640 100644
--- a/ebean-api/src/main/java/io/ebean/Finder.java
+++ b/ebean-api/src/main/java/io/ebean/Finder.java
@@ -1,6 +1,7 @@
package io.ebean;
-import javax.annotation.Nullable;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import java.util.List;
/**
@@ -54,6 +55,7 @@ import java.util.List;
* }
*
*/
+@NonNullApi
public class Finder {
/**
diff --git a/ebean-api/src/main/java/io/ebean/Junction.java b/ebean-api/src/main/java/io/ebean/Junction.java
index 0ab001b37..b1bec8d76 100644
--- a/ebean-api/src/main/java/io/ebean/Junction.java
+++ b/ebean-api/src/main/java/io/ebean/Junction.java
@@ -113,9 +113,9 @@ public interface Junction extends Expression, ExpressionList {
*/
SHOULD("should", "", true);
- private String prefix;
- private String literal;
- private boolean text;
+ private final String prefix;
+ private final String literal;
+ private final boolean text;
Type(String literal, String prefix, boolean text) {
this.literal = literal;
diff --git a/ebean-api/src/main/java/io/ebean/Query.java b/ebean-api/src/main/java/io/ebean/Query.java
index eee7bf8ff..4ddfc9af5 100644
--- a/ebean-api/src/main/java/io/ebean/Query.java
+++ b/ebean-api/src/main/java/io/ebean/Query.java
@@ -1,6 +1,7 @@
package io.ebean;
-import javax.annotation.Nullable;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import javax.persistence.NonUniqueResultException;
import java.sql.Connection;
import java.sql.Timestamp;
@@ -176,6 +177,7 @@ import java.util.stream.Stream;
*
* @param the type of Entity bean this query will fetch.
*/
+@NonNullApi
public interface Query extends CancelableQuery {
/**
diff --git a/ebean-api/src/main/java/io/ebean/SqlQuery.java b/ebean-api/src/main/java/io/ebean/SqlQuery.java
index d7e184257..240d42aad 100644
--- a/ebean-api/src/main/java/io/ebean/SqlQuery.java
+++ b/ebean-api/src/main/java/io/ebean/SqlQuery.java
@@ -1,6 +1,7 @@
package io.ebean;
-import javax.annotation.Nullable;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@@ -36,6 +37,7 @@ import java.util.function.Predicate;
*
* }
*/
+@NonNullApi
public interface SqlQuery extends Serializable, CancelableQuery {
/**
@@ -351,6 +353,7 @@ public interface SqlQuery extends Serializable, CancelableQuery {
/**
* Return the single value.
*/
+ @Nullable
T findOne();
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index e197ecc41..239e58214 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -1,5 +1,7 @@
package io.ebeaninternal.server.core;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.AutoTune;
import io.ebean.BackgroundExecutor;
import io.ebean.BeanState;
@@ -101,7 +103,6 @@ import io.ebeaninternal.util.ParamTypeHelper.TypeInfo;
import io.ebeanservice.docstore.api.DocStoreIntegration;
import org.slf4j.Logger;
-import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -125,6 +126,7 @@ import static java.util.stream.StreamSupport.stream;
/**
* The default server side implementation of EbeanServer.
*/
+@NonNullApi
public final class DefaultServer implements SpiServer, SpiEbeanServer {
private static final Logger log = CoreLog.internal;
@@ -271,6 +273,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return lazyLoadBatchSize;
}
+ @Nullable
@Override
public Object currentTenantId() {
return currentTenantProvider == null ? null : currentTenantProvider.currentId();
@@ -563,7 +566,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public Map diff(Object a, Object b) {
+ public Map diff(@Nullable Object a, Object b) {
if (a == null) {
return Collections.emptyMap();
}
@@ -617,7 +620,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- private void executeSql(Connection connection, String sql) throws SQLException {
+ private void executeSql(Connection connection, @Nullable String sql) throws SQLException {
if (sql != null) {
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
transactionManager.log().sql().debug(sql);
@@ -723,7 +726,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public T executeCall(TxScope scope, Callable c) {
+ public T executeCall(@Nullable TxScope scope, Callable c) {
ScopedTransaction scopeTrans = transactionManager.beginScopedTransaction(scope);
try {
return c.call();
@@ -742,7 +745,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public void execute(TxScope scope, Runnable r) {
+ public void execute(@Nullable TxScope scope, Runnable r) {
ScopedTransaction t = transactionManager.beginScopedTransaction(scope);
try {
r.run();
@@ -765,6 +768,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
transactionManager.exitScopedTransaction(returnOrThrowable, opCode);
}
+ @Nullable
@Override
public SpiTransaction currentServerTransaction() {
return transactionManager.active();
@@ -894,7 +898,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public void merge(Object bean, MergeOptions options, Transaction transaction) {
+ public void merge(Object bean, MergeOptions options, @Nullable Transaction transaction) {
BeanDescriptor> desc = descriptor(bean.getClass());
if (desc == null) {
throw new PersistenceException(bean.getClass().getName() + " is NOT an Entity Bean registered with this server?");
@@ -1040,7 +1044,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Find a bean using its unique id.
*/
@Override
- public T find(Class beanType, Object id, Transaction t) {
+ public T find(Class beanType, Object id, @Nullable Transaction t) {
if (id == null) {
throw new NullPointerException("The id is null");
}
@@ -1048,20 +1052,20 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return findId(query, t);
}
- SpiOrmQueryRequest createQueryRequest(Type type, Query query, Transaction t) {
+ SpiOrmQueryRequest createQueryRequest(Type type, Query query, @Nullable Transaction t) {
SpiOrmQueryRequest request = buildQueryRequest(type, query, t);
request.prepareQuery();
return request;
}
- SpiOrmQueryRequest buildQueryRequest(Type type, Query query, Transaction t) {
+ SpiOrmQueryRequest buildQueryRequest(Type type, Query query, @Nullable Transaction t) {
SpiQuery spiQuery = (SpiQuery) query;
spiQuery.setType(type);
spiQuery.checkNamedParameters();
return buildQueryRequest(spiQuery, t);
}
- private SpiOrmQueryRequest buildQueryRequest(SpiQuery query, Transaction t) {
+ private SpiOrmQueryRequest buildQueryRequest(SpiQuery query, @Nullable Transaction t) {
if (t == null) {
t = currentServerTransaction();
}
@@ -1088,7 +1092,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
*/
@Nullable
@SuppressWarnings("unchecked")
- private T findIdCheckPersistenceContextAndCache(Transaction transaction, SpiQuery query, Object id) {
+ private T findIdCheckPersistenceContextAndCache(@Nullable Transaction transaction, SpiQuery query, Object id) {
SpiTransaction t = (SpiTransaction) transaction;
if (t == null) {
t = currentServerTransaction();
@@ -1133,8 +1137,9 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return (scope != null) ? scope : defaultPersistenceContextScope;
}
+ @Nullable
@SuppressWarnings("unchecked")
- private T findId(Query query, Transaction t) {
+ private T findId(Query query, @Nullable Transaction t) {
SpiQuery spiQuery = (SpiQuery) query;
spiQuery.setType(Type.BEAN);
if (SpiQuery.Mode.NORMAL == spiQuery.getMode() && !spiQuery.isForceHitDatabase()) {
@@ -1165,7 +1170,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Nullable
@Override
- public T findOne(Query query, Transaction transaction) {
+ public T findOne(Query query, @Nullable Transaction transaction) {
SpiQuery spiQuery = (SpiQuery) query;
if (spiQuery.isFindById()) {
// actually a find by Id query
@@ -1208,7 +1213,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
- public Map findMap(Query query, Transaction t) {
+ public Map findMap(Query query, @Nullable Transaction t) {
SpiOrmQueryRequest request = createQueryRequest(Type.MAP, query, t);
request.resetBeanCacheAutoMode(false);
if ((t == null || !t.isSkipCache()) && request.getFromBeanCache()) {
@@ -1244,7 +1249,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int findCount(Query query, Transaction t) {
+ public int findCount(Query query, @Nullable Transaction t) {
SpiQuery spiQuery = ((SpiQuery) query);
if (!spiQuery.isDistinct()) {
spiQuery = spiQuery.copy();
@@ -1253,7 +1258,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int findCountWithCopy(Query query, Transaction t) {
+ public int findCountWithCopy(Query query, @Nullable Transaction t) {
SpiOrmQueryRequest request = createQueryRequest(Type.COUNT, query, t);
Integer result = request.getFromQueryCache();
if (result != null) {
@@ -1463,7 +1468,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public List> findVersions(Query query, Transaction transaction) {
+ public List> findVersions(Query query, @Nullable Transaction transaction) {
SpiOrmQueryRequest request = createQueryRequest(Type.LIST, query, transaction);
try {
request.initTransIfRequired();
@@ -1479,7 +1484,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@SuppressWarnings("unchecked")
- private List findList(Query query, Transaction t, boolean findOne) {
+ private List findList(Query query, @Nullable Transaction t, boolean findOne) {
SpiOrmQueryRequest request = buildQueryRequest(Type.LIST, query, t);
request.resetBeanCacheAutoMode(findOne);
if ((t == null || !t.isSkipCache()) && request.getFromBeanCache()) {
@@ -1669,7 +1674,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Save the bean with an explicit transaction.
*/
@Override
- public void save(Object bean, Transaction t) {
+ public void save(Object bean, @Nullable Transaction t) {
persister.save(checkEntityBean(bean), t);
}
@@ -1688,7 +1693,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public void update(Object bean, Transaction t) {
+ public void update(Object bean, @Nullable Transaction t) {
persister.update(checkEntityBean(bean), t);
}
@@ -1701,7 +1706,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Update all beans in the collection with an explicit transaction.
*/
@Override
- public void updateAll(Collection> beans, Transaction transaction) {
+ public void updateAll(@Nullable Collection> beans, @Nullable Transaction transaction) {
if (beans == null || beans.isEmpty()) {
return;
}
@@ -1725,7 +1730,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Insert the bean with a transaction.
*/
@Override
- public void insert(Object bean, Transaction t) {
+ public void insert(Object bean, @Nullable Transaction t) {
persister.insert(checkEntityBean(bean), t);
}
@@ -1741,7 +1746,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Insert all beans in the collection with a transaction.
*/
@Override
- public void insertAll(Collection> beans, Transaction transaction) {
+ public void insertAll(@Nullable Collection> beans, @Nullable Transaction transaction) {
if (beans == null || beans.isEmpty()) {
return;
}
@@ -1754,7 +1759,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public List publish(Query query, Transaction transaction) {
+ public List publish(Query query, @Nullable Transaction transaction) {
return executeInTrans((txn) -> persister.publish(query, txn), transaction);
}
@@ -1776,7 +1781,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public List draftRestore(Query query, Transaction transaction) {
+ public List draftRestore(Query query, @Nullable Transaction transaction) {
return executeInTrans((txn) -> persister.draftRestore(query, txn), transaction);
}
@@ -1825,7 +1830,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
/**
* Save all beans in the iterator with an explicit transaction.
*/
- private int saveAllInternal(Collection> beans, Transaction transaction) {
+ private int saveAllInternal(@Nullable Collection> beans, @Nullable Transaction transaction) {
if (beans == null || beans.isEmpty()) {
return 0;
}
@@ -1847,7 +1852,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int delete(Class> beanType, Object id, Transaction transaction) {
+ public int delete(Class> beanType, Object id, @Nullable Transaction transaction) {
return delete(beanType, id, transaction, false);
}
@@ -1857,11 +1862,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int deletePermanent(Class> beanType, Object id, Transaction transaction) {
+ public int deletePermanent(Class> beanType, Object id, @Nullable Transaction transaction) {
return delete(beanType, id, transaction, true);
}
- private int delete(Class> beanType, Object id, Transaction transaction, boolean permanent) {
+ private int delete(Class> beanType, Object id, @Nullable Transaction transaction, boolean permanent) {
return executeInTrans((txn) -> persister.delete(beanType, id, txn, permanent), transaction);
}
@@ -1871,7 +1876,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int deleteAll(Class> beanType, Collection> ids, Transaction t) {
+ public int deleteAll(Class> beanType, Collection> ids, @Nullable Transaction t) {
return deleteAll(beanType, ids, t, false);
}
@@ -1881,11 +1886,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int deleteAllPermanent(Class> beanType, Collection> ids, Transaction t) {
+ public int deleteAllPermanent(Class> beanType, Collection> ids, @Nullable Transaction t) {
return deleteAll(beanType, ids, t, true);
}
- private int deleteAll(Class> beanType, Collection> ids, Transaction transaction, boolean permanent) {
+ private int deleteAll(Class> beanType, Collection> ids, @Nullable Transaction transaction, boolean permanent) {
return executeInTrans((txn) -> persister.deleteMany(beanType, ids, txn, permanent), transaction);
}
@@ -1901,7 +1906,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Delete the bean with the explicit transaction.
*/
@Override
- public boolean delete(Object bean, Transaction t) throws OptimisticLockException {
+ public boolean delete(Object bean, @Nullable Transaction t) throws OptimisticLockException {
// this should really return an int where -1 means jdbc batch/unknown
return persister.delete(checkEntityBean(bean), t, false) != 0;
}
@@ -1912,7 +1917,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public boolean deletePermanent(Object bean, Transaction t) throws OptimisticLockException {
+ public boolean deletePermanent(Object bean, @Nullable Transaction t) throws OptimisticLockException {
// this should really return an int where -1 means jdbc batch/unknown
return persister.delete(checkEntityBean(bean), t, true) != 0;
}
@@ -1923,7 +1928,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int deleteAllPermanent(Collection> beans, Transaction t) {
+ public int deleteAllPermanent(Collection> beans, @Nullable Transaction t) {
return deleteAllInternal(beans, t, true);
}
@@ -1939,14 +1944,14 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Delete all the beans in the collection.
*/
@Override
- public int deleteAll(Collection> beans, Transaction t) {
+ public int deleteAll(Collection> beans, @Nullable Transaction t) {
return deleteAllInternal(beans, t, false);
}
/**
* Delete all the beans in the iterator with an explicit transaction.
*/
- private int deleteAllInternal(Collection> beans, Transaction transaction, boolean permanent) {
+ private int deleteAllInternal(@Nullable Collection> beans, @Nullable Transaction transaction, boolean permanent) {
if (beans == null || beans.isEmpty()) {
return 0;
}
@@ -1966,7 +1971,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Execute the CallableSql with an explicit transaction.
*/
@Override
- public int execute(CallableSql callSql, Transaction t) {
+ public int execute(CallableSql callSql, @Nullable Transaction t) {
return persister.executeCallable(callSql, t);
}
@@ -1982,7 +1987,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Execute the updateSql with an explicit transaction.
*/
@Override
- public int execute(SqlUpdate updSql, Transaction t) {
+ public int execute(SqlUpdate updSql, @Nullable Transaction t) {
return persister.executeSqlUpdate(updSql, t);
}
@@ -1992,12 +1997,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public void addBatch(SpiSqlUpdate sqlUpdate, SpiTransaction transaction) {
+ public void addBatch(SpiSqlUpdate sqlUpdate, @Nullable SpiTransaction transaction) {
persister.addBatch(sqlUpdate, transaction);
}
@Override
- public int[] executeBatch(SpiSqlUpdate sqlUpdate, SpiTransaction transaction) {
+ public int[] executeBatch(SpiSqlUpdate sqlUpdate, @Nullable SpiTransaction transaction) {
return persister.executeBatch(sqlUpdate, transaction);
}
@@ -2013,7 +2018,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Execute the updateSql with an explicit transaction.
*/
@Override
- public int execute(Update> update, Transaction t) {
+ public int execute(Update> update, @Nullable Transaction t) {
return persister.executeOrmUpdate(update, t);
}
@@ -2171,7 +2176,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- private P executeInTrans(Function fun, Transaction t) {
+ private P executeInTrans(Function fun, @Nullable Transaction t) {
ObtainedTransaction wrap = initTransIfRequired(t);
try {
P result = fun.apply(wrap.transaction());
@@ -2188,7 +2193,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
/**
* Create a transaction if one is not currently active.
*/
- ObtainedTransaction initTransIfRequired(Transaction t) {
+ ObtainedTransaction initTransIfRequired(@Nullable Transaction t) {
if (t != null) {
return new ObtainedTransaction((SpiTransaction) t);
}
@@ -2256,7 +2261,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public Set checkUniqueness(Object bean, Transaction transaction) {
+ public Set checkUniqueness(Object bean, @Nullable Transaction transaction) {
EntityBean entityBean = checkEntityBean(bean);
BeanDescriptor> beanDesc = descriptor(entityBean.getClass());
BeanProperty idProperty = beanDesc.idProperty();
@@ -2286,7 +2291,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Returns a set of properties if saving the bean will violate the unique constraints (defined by given properties).
*/
@Nullable
- private Set checkUniqueness(EntityBean entityBean, BeanDescriptor> beanDesc, BeanProperty[] props, Transaction transaction) {
+ private Set checkUniqueness(EntityBean entityBean, BeanDescriptor> beanDesc, BeanProperty[] props, @Nullable Transaction transaction) {
BeanProperty idProperty = beanDesc.idProperty();
Query> query = new DefaultOrmQuery<>(beanDesc, this, expressionFactory);
ExpressionList> exprList = query.where();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java
index 6f8aec3aa..bd28af35c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.el;
+import io.avaje.lang.NonNullApi;
import io.ebean.Filter;
import io.ebeaninternal.server.deploy.BeanDescriptor;
@@ -11,6 +12,7 @@ import java.util.regex.Pattern;
/**
* Default implementation of the Filter interface.
*/
+@NonNullApi
public final class ElFilter implements Filter {
private final BeanDescriptor beanDescriptor;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java
index 305da21ca..7090a63e4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.executor;
+import io.avaje.lang.NonNullApi;
import io.ebeaninternal.api.SpiBackgroundExecutor;
import org.slf4j.MDC;
@@ -13,6 +14,7 @@ import java.util.concurrent.TimeUnit;
/**
* The default implementation of the BackgroundExecutor.
*/
+@NonNullApi
public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
private final ScheduledExecutorService executor;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java
index b9693df6d..7141b708b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java
@@ -1,5 +1,7 @@
package io.ebeaninternal.server.expression;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.DtoQuery;
@@ -51,6 +53,7 @@ import java.util.function.Predicate;
/**
* Default implementation of ExpressionList.
*/
+@NonNullApi
public class DefaultExpressionList implements SpiExpressionList {
private static final String AND = " and ";
@@ -469,6 +472,7 @@ public class DefaultExpressionList implements SpiExpressionList {
return query.exists();
}
+ @Nullable
@Override
public T findOne() {
return query.findOne();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java
index 0e8d4ba0b..45d308eec 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java
@@ -1,23 +1,15 @@
package io.ebeaninternal.server.expression;
-import io.ebean.ExpressionFactory;
-import io.ebean.ExpressionList;
-import io.ebean.FutureIds;
-import io.ebean.FutureList;
-import io.ebean.FutureRowCount;
-import io.ebean.Junction;
-import io.ebean.OrderBy;
-import io.ebean.Query;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
+import io.ebean.*;
import io.ebeaninternal.api.SpiExpressionList;
import io.ebeaninternal.api.SpiQuery;
import javax.persistence.PersistenceException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
+@NonNullApi
public final class FilterExpressionList extends DefaultExpressionList {
private static final String notAllowedMessage = "This method is not allowed on a filter";
@@ -92,6 +84,7 @@ public final class FilterExpressionList extends DefaultExpressionList {
return rootQuery.findSet();
}
+ @Nullable
@Override
public T findOne() {
return rootQuery.findOne();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java
index a408b5e74..d83db0cde 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java
@@ -1,5 +1,7 @@
package io.ebeaninternal.server.expression;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.DtoQuery;
@@ -48,6 +50,7 @@ import java.util.function.Predicate;
/**
* Junction implementation.
*/
+@NonNullApi
final class JunctionExpression implements SpiJunction, SpiExpression, ExpressionList {
DefaultExpressionList exprList;
@@ -476,6 +479,7 @@ final class JunctionExpression implements SpiJunction, SpiExpression, Expr
return exprList.findSet();
}
+ @Nullable
@Override
public T findOne() {
return exprList.findOne();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java
index 50966a45f..712e27153 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.query;
+import io.avaje.lang.NonNullApi;
import io.ebean.FetchConfig;
import io.ebean.FetchGroup;
import io.ebean.FetchGroupBuilder;
@@ -9,14 +10,12 @@ import io.ebeaninternal.server.querydefn.SpiFetchGroup;
/**
* Default implementation of the FetchGroupBuilder.
*/
+@NonNullApi
final class DFetchGroupBuilder implements FetchGroupBuilder {
private static final FetchConfig DEFAULT_FETCH = FetchConfig.ofDefault();
-
private static final FetchConfig FETCH_CACHE = FetchConfig.ofCache();
-
private static final FetchConfig FETCH_QUERY = FetchConfig.ofQuery();
-
private static final FetchConfig FETCH_LAZY = FetchConfig.ofLazy();
private final OrmQueryDetail detail;
@@ -38,22 +37,22 @@ final class DFetchGroupBuilder implements FetchGroupBuilder {
}
@Override
- public FetchGroupBuilder fetch(String path, FetchGroup nestedGroup) {
+ public FetchGroupBuilder fetch(String path, FetchGroup> nestedGroup) {
return fetchNested(path, nestedGroup, DEFAULT_FETCH);
}
@Override
- public FetchGroupBuilder fetchQuery(String path, FetchGroup nestedGroup) {
+ public FetchGroupBuilder fetchQuery(String path, FetchGroup> nestedGroup) {
return fetchNested(path, nestedGroup, FETCH_QUERY);
}
@Override
- public FetchGroupBuilder fetchLazy(String path, FetchGroup nestedGroup) {
+ public FetchGroupBuilder fetchLazy(String path, FetchGroup> nestedGroup) {
return fetchNested(path, nestedGroup, FETCH_LAZY);
}
- private FetchGroupBuilder fetchNested(String path, FetchGroup nestedGroup, FetchConfig fetchConfig) {
- OrmQueryDetail nestedDetail = ((SpiFetchGroup) nestedGroup).underlying();
+ private FetchGroupBuilder fetchNested(String path, FetchGroup> nestedGroup, FetchConfig fetchConfig) {
+ OrmQueryDetail nestedDetail = ((SpiFetchGroup>) nestedGroup).underlying();
detail.addNested(path, nestedDetail, fetchConfig);
return this;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
index 5e5d2b834..8011cc1b5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
@@ -1,5 +1,7 @@
package io.ebeaninternal.server.query;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.Database;
@@ -29,7 +31,6 @@ import io.ebeaninternal.api.SpiQueryFetch;
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
import io.ebeaninternal.server.querydefn.SpiFetchGroup;
-import javax.annotation.Nullable;
import java.sql.Connection;
import java.sql.Timestamp;
import java.util.List;
@@ -43,6 +44,7 @@ import java.util.stream.Stream;
/**
* Implementation of FetchGroup query for use to create FetchGroup via query beans.
*/
+@NonNullApi
final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQueryFetch {
private static final FetchConfig FETCH_CACHE = FetchConfig.ofCache();
@@ -64,6 +66,7 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
return this;
}
+ @SuppressWarnings("rawtypes")
@Override
public Query select(FetchGroup fetchGroup) {
this.detail = ((SpiFetchGroup) fetchGroup).detail();
@@ -116,7 +119,7 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
}
@Override
- public Query fetch(String property, String columns, FetchConfig config) {
+ public Query fetch(String property, @Nullable String columns, @Nullable FetchConfig config) {
detail.fetch(property, columns, config);
return this;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java
index c404308c5..5b3c49aac 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.querydefn;
+import io.avaje.lang.NonNullApi;
import io.ebean.DtoQuery;
import io.ebean.ProfileLocation;
import io.ebean.QueryIterator;
@@ -22,6 +23,7 @@ import java.util.stream.Stream;
/**
* Default implementation of DtoQuery.
*/
+@NonNullApi
public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQuery {
private final SpiEbeanServer server;
@@ -208,6 +210,7 @@ public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQue
return label;
}
+ @Nullable
@Override
public String getPlanLabel() {
if (label != null) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java
index 792a9192d..908490080 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.querydefn;
+import io.avaje.lang.NonNullApi;
import io.ebean.*;
import io.ebean.OrderBy.Property;
import io.ebean.bean.CallOrigin;
@@ -30,6 +31,7 @@ import java.util.stream.Stream;
/**
* Default implementation of an Object Relational query.
*/
+@NonNullApi
public final class DefaultOrmQuery extends AbstractQuery implements SpiQuery {
private static final String DEFAULT_QUERY_NAME = "default";
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
index 879d1bdaf..69c8dbb7a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
@@ -1,5 +1,7 @@
package io.ebeaninternal.server.querydefn;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
import io.ebean.RowConsumer;
import io.ebean.RowMapper;
import io.ebean.SqlQuery;
@@ -17,6 +19,7 @@ import java.util.function.Predicate;
/**
* Default implementation of SQuery - SQL Query.
*/
+@NonNullApi
public final class DefaultRelationalQuery extends AbstractQuery implements SpiSqlQuery {
private static final long serialVersionUID = -1098305779779591068L;
@@ -263,6 +266,7 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
this.mapper = mapper;
}
+ @Nullable
@Override
public T findOne() {
return mapperFindOne(mapper);
diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java
index d4932791e..a93f202bf 100644
--- a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java
+++ b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java
@@ -1,5 +1,6 @@
package io.ebeanservice.docstore.none;
+import io.avaje.lang.NonNullApi;
import io.ebean.DocStoreQueueEntry;
import io.ebean.DocumentStore;
import io.ebean.PagedList;
@@ -16,6 +17,7 @@ import java.util.function.Predicate;
/**
* DocumentStore that barfs it is used.
*/
+@NonNullApi
public final class NoneDocStore implements DocumentStore {
public static IllegalStateException implementationNotInClassPath() {
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index fc56e3c81..2ed6fac26 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -27,9 +27,8 @@
-->
io.avaje
- avaje-jsr305
- 1.1
- provided
+ avaje-lang
+ 1.0
diff --git a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
index 1e3c8570b..ed3c35350 100644
--- a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
+++ b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
@@ -1,24 +1,8 @@
package io.ebean.typequery;
-import io.ebean.CacheMode;
-import io.ebean.DB;
-import io.ebean.Database;
-import io.ebean.DtoQuery;
-import io.ebean.ExpressionList;
-import io.ebean.FetchConfig;
-import io.ebean.FetchGroup;
-import io.ebean.FutureIds;
-import io.ebean.FutureList;
-import io.ebean.FutureRowCount;
-import io.ebean.PagedList;
-import io.ebean.PersistenceContextScope;
-import io.ebean.ProfileLocation;
-import io.ebean.Query;
-import io.ebean.QueryIterator;
-import io.ebean.RawSql;
-import io.ebean.Transaction;
-import io.ebean.UpdateQuery;
-import io.ebean.Version;
+import io.avaje.lang.NonNullApi;
+import io.avaje.lang.Nullable;
+import io.ebean.*;
import io.ebean.search.MultiMatch;
import io.ebean.search.TextCommonTerms;
import io.ebean.search.TextQueryString;
@@ -28,15 +12,9 @@ import io.ebean.text.PathProperties;
import io.ebeaninternal.api.SpiQueryFetch;
import io.ebeaninternal.server.util.ArrayStack;
-import javax.annotation.Nullable;
import java.sql.Connection;
import java.sql.Timestamp;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
@@ -80,6 +58,7 @@ import java.util.stream.Stream;
* @param the entity bean type (normal entity bean type e.g. Customer)
* @param the specific root query bean type (e.g. QCustomer)
*/
+@NonNullApi
public abstract class TQRootBean {
/**
diff --git a/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java b/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java
index 865499458..00922b438 100644
--- a/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java
+++ b/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java
@@ -1,19 +1,9 @@
package org.querytest;
-import io.ebean.DB;
-import io.ebean.Database;
-import io.ebean.PagedList;
-import io.ebean.Query;
-import io.ebean.QueryIterator;
-import io.ebean.Transaction;
+import io.ebean.*;
import io.ebean.annotation.Transactional;
import io.ebean.types.Inet;
-import org.example.domain.ACat;
-import org.example.domain.ADog;
-import org.example.domain.Address;
-import org.example.domain.Animal;
-import org.example.domain.Country;
-import org.example.domain.Customer;
+import org.example.domain.*;
import org.example.domain.otherpackage.PhoneNumber;
import org.example.domain.otherpackage.ValidEmail;
import org.example.domain.query.QAnimal;
@@ -26,15 +16,7 @@ import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.StringJoiner;
+import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;
@@ -155,23 +137,21 @@ public class QCustomerTest {
assertThat(ids).isNotEmpty();
- Map map = new QCustomer()
+ Map map = new QCustomer()
.status.equalTo(Customer.Status.GOOD)
.findMap();
assertThat(map.size()).isEqualTo(ids.size());
- QueryIterator iterate = new QCustomer()
- .status.equalTo(Customer.Status.GOOD)
- .findIterate();
+ try (QueryIterator iterate =
+ new QCustomer()
+ .status.equalTo(Customer.Status.GOOD)
+ .findIterate()) {
- try {
while (iterate.hasNext()) {
Customer customer = iterate.next();
assertThat(customer.getName()).isNotNull();
}
- } finally {
- iterate.close();
}
}
diff --git a/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java b/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java
index 17bd8f19b..d4b0e4b20 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.api;
+import io.avaje.lang.NonNullApi;
import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
@@ -37,6 +38,7 @@ import java.util.stream.Stream;
/**
* Test double for SpiEbeanServer.
*/
+@NonNullApi
public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
String name;
diff --git a/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java b/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java
index 10bfcd87a..2cf23625b 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/api/TDSpiServer.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.api;
+import io.avaje.lang.NonNullApi;
import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.annotation.TxIsolation;
@@ -25,6 +26,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
+@NonNullApi
public class TDSpiServer implements SpiServer {
@Override
public void shutdown() {
diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/cluster/binarymessage/BinaryTransactionEventReadWriteTest.java b/ebean-test/src/test/java/io/ebeaninternal/server/cluster/binarymessage/BinaryTransactionEventReadWriteTest.java
index c77b855e0..61956ace5 100644
--- a/ebean-test/src/test/java/io/ebeaninternal/server/cluster/binarymessage/BinaryTransactionEventReadWriteTest.java
+++ b/ebean-test/src/test/java/io/ebeaninternal/server/cluster/binarymessage/BinaryTransactionEventReadWriteTest.java
@@ -15,6 +15,7 @@ import io.ebeaninternal.server.transaction.RemoteTransactionEvent;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
+import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
@@ -99,8 +100,9 @@ public class BinaryTransactionEventReadWriteTest extends BaseTestCase {
}
class TDEbeanServer extends TDSpiEbeanServer {
+ @Nonnull
@Override
- public BeanDescriptor> descriptorById(String descriptorId) {
+ public BeanDescriptor> descriptorById(@Nonnull String descriptorId) {
return customerBeanDescriptor;
}
}
diff --git a/pom.xml b/pom.xml
index adc7b78f4..e00014bc5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,7 +90,7 @@
ebean-querybean
ebean-postgis
ebean-redis
-
+ tests
diff --git a/tests/test-kotlin/pom.xml b/tests/test-kotlin/pom.xml
index ba2034ca3..b99a3bc8b 100644
--- a/tests/test-kotlin/pom.xml
+++ b/tests/test-kotlin/pom.xml
@@ -95,7 +95,7 @@
test
process-test-classes
- debug=5
+ debug=1
testEnhance
diff --git a/tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/BasicInsertQueryTest.kt b/tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/BasicInsertQueryTest.kt
new file mode 100644
index 000000000..550e4973c
--- /dev/null
+++ b/tests/test-kotlin/src/test/kotlin/io/ebean/test/kotlin/BasicInsertQueryTest.kt
@@ -0,0 +1,32 @@
+package io.ebean.test.kotlin
+
+import io.ebean.DB
+import org.assertj.core.api.Assertions.assertThat
+import org.example.order.Customer
+import org.junit.jupiter.api.Test
+
+class BasicInsertQueryTest {
+
+ @Test
+ fun `insert find`() {
+
+ val customer = Customer("HelloThere")
+ DB.save(customer)
+
+ val found = DB.find(Customer::class.java)
+ .setId(customer.id)
+ .findOne()
+
+ val name = found?.name
+ assertThat(name).isEqualTo("HelloThere")
+ assertThat(found).isNotNull
+
+ val list = DB.find(Customer::class.java)
+ .findList()
+
+ list.size
+ assertThat(list).isNotEmpty
+
+ DB.delete(customer)
+ }
+}
From 30088f4de71b3ec0e161f3afce063a01b429b90f Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Wed, 20 Oct 2021 15:53:50 +1300
Subject: [PATCH 36/91] #2423 Tidy up DefaultServer internals with
Objects.requireNonNull()
---
.../server/core/DefaultServer.java | 24 ++++++-------------
1 file changed, 7 insertions(+), 17 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 239e58214..e5c5d7cf1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -663,9 +663,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
public T reference(Class type, Object id) {
- if (id == null) {
- throw new NullPointerException("The id is null");
- }
+ Objects.requireNonNull(id);
BeanDescriptor desc = descriptor(type);
id = desc.convertId(id);
PersistenceContext pc = null;
@@ -835,12 +833,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
@SuppressWarnings("unchecked")
public void sort(List list, String sortByClause) {
- if (list == null) {
- throw new NullPointerException("list is null");
- }
- if (sortByClause == null) {
- throw new NullPointerException("sortByClause is null");
- }
+ Objects.requireNonNull(list);
+ Objects.requireNonNull(sortByClause);
if (list.isEmpty()) {
// don't need to sort an empty list
return;
@@ -1045,9 +1039,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
*/
@Override
public T find(Class beanType, Object id, @Nullable Transaction t) {
- if (id == null) {
- throw new NullPointerException("The id is null");
- }
+ Objects.requireNonNull(id);
Query query = createQuery(beanType).setId(id);
return findId(query, t);
}
@@ -1774,7 +1766,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public T publish(Class beanType, Object id, Transaction transaction) {
+ public T publish(Class beanType, Object id, @Nullable Transaction transaction) {
Query query = find(beanType).setId(id);
List liveBeans = publish(query, transaction);
return (liveBeans.size() == 1) ? liveBeans.get(0) : null;
@@ -1786,7 +1778,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public T draftRestore(Class beanType, Object id, Transaction transaction) {
+ public T draftRestore(Class beanType, Object id, @Nullable Transaction transaction) {
Query query = find(beanType).setId(id);
List beans = draftRestore(query, transaction);
return (beans.size() == 1) ? beans.get(0) : null;
@@ -1803,9 +1795,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
private EntityBean checkEntityBean(Object bean) {
- if (bean == null) {
- throw new IllegalArgumentException("The bean is null?");
- }
+ Objects.requireNonNull(bean);
if (!(bean instanceof EntityBean)) {
throw new IllegalArgumentException("Was expecting an EntityBean but got a " + bean.getClass());
}
From 3a138c3462ccbb3087c05f6970bca1f64ba5185b Mon Sep 17 00:00:00 2001
From: Rob Bygrave
Date: Wed, 20 Oct 2021 16:07:43 +1300
Subject: [PATCH 37/91] Tidy internals only - improve DefaultServer parameter
names
---
.../io/ebeaninternal/api/SpiEbeanServer.java | 6 +-
.../server/core/DefaultServer.java | 188 +++++++++---------
2 files changed, 97 insertions(+), 97 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java
index 572f571d0..53d0c4551 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java
@@ -142,7 +142,7 @@ public interface SpiEbeanServer extends SpiServer, ExtendedServer, EbeanServer,
/**
* Compile a query.
*/
- CQuery compileQuery(Type type, Query query, Transaction t);
+ CQuery compileQuery(Type type, Query query, Transaction transaction);
/**
* Execute the findId's query but without copying the query.
@@ -151,12 +151,12 @@ public interface SpiEbeanServer extends SpiServer, ExtendedServer, EbeanServer,
* the query has finished (if executing in a background thread).
*
*/
- List findIdsWithCopy(Query query, Transaction t);
+ List findIdsWithCopy(Query query, Transaction transaction);
/**
* Execute the findCount query but without copying the query.
*/
- int findCountWithCopy(Query query, Transaction t);
+ int findCountWithCopy(Query query, Transaction transaction);
/**
* Load a batch of Associated One Beans.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index e5c5d7cf1..f6ff48810 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -506,8 +506,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Compile a query. Only valid for ORM queries.
*/
@Override
- public CQuery compileQuery(Type type, Query query, Transaction t) {
- SpiOrmQueryRequest qr = createQueryRequest(type, query, t);
+ public CQuery compileQuery(Type type, Query query, Transaction transaction) {
+ SpiOrmQueryRequest qr = createQueryRequest(type, query, transaction);
OrmQueryRequest orm = (OrmQueryRequest) qr;
return cqueryEngine.buildQuery(orm);
}
@@ -719,15 +719,15 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public T executeCall(Callable c) {
- return executeCall(null, c);
+ public T executeCall(Callable callable) {
+ return executeCall(null, callable);
}
@Override
- public T executeCall(@Nullable TxScope scope, Callable c) {
+ public T executeCall(@Nullable TxScope scope, Callable callable) {
ScopedTransaction scopeTrans = transactionManager.beginScopedTransaction(scope);
try {
- return c.call();
+ return callable.call();
} catch (Error e) {
throw scopeTrans.caughtError(e);
} catch (Exception e) {
@@ -738,15 +738,15 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public void execute(Runnable r) {
- execute(null, r);
+ public void execute(Runnable runnable) {
+ execute(null, runnable);
}
@Override
- public void execute(@Nullable TxScope scope, Runnable r) {
+ public void execute(@Nullable TxScope scope, Runnable runnable) {
ScopedTransaction t = transactionManager.beginScopedTransaction(scope);
try {
- r.run();
+ runnable.run();
} catch (Error e) {
throw t.caughtError(e);
} catch (Exception e) {
@@ -1038,28 +1038,28 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Find a bean using its unique id.
*/
@Override
- public T find(Class beanType, Object id, @Nullable Transaction t) {
+ public T find(Class beanType, Object id, @Nullable Transaction transaction) {
Objects.requireNonNull(id);
Query query = createQuery(beanType).setId(id);
- return findId(query, t);
+ return findId(query, transaction);
}
- SpiOrmQueryRequest createQueryRequest(Type type, Query query, @Nullable Transaction t) {
- SpiOrmQueryRequest request = buildQueryRequest(type, query, t);
+ SpiOrmQueryRequest createQueryRequest(Type type, Query query, @Nullable Transaction transaction) {
+ SpiOrmQueryRequest request = buildQueryRequest(type, query, transaction);
request.prepareQuery();
return request;
}
- SpiOrmQueryRequest buildQueryRequest(Type type, Query query, @Nullable Transaction t) {
+ SpiOrmQueryRequest buildQueryRequest(Type type, Query query, @Nullable Transaction transaction) {
SpiQuery spiQuery = (SpiQuery) query;
spiQuery.setType(type);
spiQuery.checkNamedParameters();
- return buildQueryRequest(spiQuery, t);
+ return buildQueryRequest(spiQuery, transaction);
}
- private SpiOrmQueryRequest buildQueryRequest(SpiQuery query, @Nullable Transaction t) {
- if (t == null) {
- t = currentServerTransaction();
+ private SpiOrmQueryRequest buildQueryRequest(SpiQuery query, @Nullable Transaction transaction) {
+ if (transaction == null) {
+ transaction = currentServerTransaction();
}
query.setDefaultRawSqlIfRequired();
if (query.isAutoTunable() && !autoTuneService.tuneQuery(query)) {
@@ -1076,7 +1076,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
if (query.getParentNode() == null) {
query.setOrigin(createCallOrigin());
}
- return new OrmQueryRequest<>(this, queryEngine, query, (SpiTransaction) t);
+ return new OrmQueryRequest<>(this, queryEngine, query, (SpiTransaction) transaction);
}
/**
@@ -1131,18 +1131,18 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Nullable
@SuppressWarnings("unchecked")
- private T findId(Query query, @Nullable Transaction t) {
+ private T findId(Query query, @Nullable Transaction transaction) {
SpiQuery spiQuery = (SpiQuery) query;
spiQuery.setType(Type.BEAN);
if (SpiQuery.Mode.NORMAL == spiQuery.getMode() && !spiQuery.isForceHitDatabase()) {
// See if we can skip doing the fetch completely by getting the bean from the
// persistence context or the bean cache
- T bean = findIdCheckPersistenceContextAndCache(t, spiQuery, spiQuery.getId());
+ T bean = findIdCheckPersistenceContextAndCache(transaction, spiQuery, spiQuery.getId());
if (bean != null) {
return bean;
}
}
- SpiOrmQueryRequest request = buildQueryRequest(spiQuery, t);
+ SpiOrmQueryRequest request = buildQueryRequest(spiQuery, transaction);
request.prepareQuery();
if (request.isUseDocStore()) {
return docStore().find(request);
@@ -1189,8 +1189,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
- public Set findSet(Query query, Transaction t) {
- SpiOrmQueryRequest request = createQueryRequest(Type.SET, query, t);
+ public Set findSet(Query query, Transaction transaction) {
+ SpiOrmQueryRequest request = createQueryRequest(Type.SET, query, transaction);
Object result = request.getFromQueryCache();
if (result != null) {
return (Set) result;
@@ -1205,10 +1205,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
- public Map findMap(Query query, @Nullable Transaction t) {
- SpiOrmQueryRequest request = createQueryRequest(Type.MAP, query, t);
+ public Map findMap(Query query, @Nullable Transaction transaction) {
+ SpiOrmQueryRequest request = createQueryRequest(Type.MAP, query, transaction);
request.resetBeanCacheAutoMode(false);
- if ((t == null || !t.isSkipCache()) && request.getFromBeanCache()) {
+ if ((transaction == null || !transaction.isSkipCache()) && request.getFromBeanCache()) {
// hit bean cache and got all results from cache
return request.beanCacheHitsAsMap();
}
@@ -1226,8 +1226,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
@SuppressWarnings("unchecked")
- public List findSingleAttributeList(Query query, Transaction t) {
- SpiOrmQueryRequest request = createQueryRequest(Type.ATTRIBUTE, query, t);
+ public List findSingleAttributeList(Query query, Transaction transaction) {
+ SpiOrmQueryRequest request = createQueryRequest(Type.ATTRIBUTE, query, transaction);
Object result = request.getFromQueryCache();
if (result != null) {
return (List) result;
@@ -1241,17 +1241,17 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public int findCount(Query query, @Nullable Transaction t) {
+ public int findCount(Query query, @Nullable Transaction transaction) {
SpiQuery spiQuery = ((SpiQuery) query);
if (!spiQuery.isDistinct()) {
spiQuery = spiQuery.copy();
}
- return findCountWithCopy(spiQuery, t);
+ return findCountWithCopy(spiQuery, transaction);
}
@Override
- public int findCountWithCopy(Query query, @Nullable Transaction t) {
- SpiOrmQueryRequest request = createQueryRequest(Type.COUNT, query, t);
+ public int findCountWithCopy(Query query, @Nullable Transaction transaction) {
+ SpiOrmQueryRequest request = createQueryRequest(Type.COUNT, query, transaction);
Integer result = request.getFromQueryCache();
if (result != null) {
return result;
@@ -1288,14 +1288,14 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
- public List findIds(Query query, Transaction t) {
- return findIdsWithCopy(((SpiQuery) query).copy(), t);
+ public