diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..0c09fbd01
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,36 @@
+
+name: Build
+
+on: [push, pull_request]
+
+jobs:
+ build:
+
+ runs-on: ${{ matrix.os }}
+ permissions:
+ contents: read
+ packages: write
+ strategy:
+ fail-fast: false
+ matrix:
+ java_version: [8]
+ os: [ubuntu-latest]
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up Java
+ uses: actions/setup-java@v2
+ with:
+ java-version: ${{ matrix.java_version }}
+ distribution: 'adopt'
+ - name: Maven cache
+ uses: actions/cache@v2
+ env:
+ cache-name: maven-cache
+ with:
+ path:
+ ~/.m2
+ key: build-${{ env.cache-name }}
+ - name: Build with Maven
+ run: mvn package
+
diff --git a/README.md b/README.md
index b707f9a92..b92e5f720 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[](https://travis-ci.org/ebean-orm/ebean)
+[](https://github.com/ebean-orm/ebean/actions/workflows/build.yml)
[](https://maven-badges.herokuapp.com/maven-central/io.ebean/ebean)
# Sponsors
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index e62657572..5e0b9430a 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean api
@@ -49,7 +49,7 @@
io.ebean
ebean-annotation
- 7.4-SNAPSHOT
+ 7.3
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 4e681b92a..71f390c01 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
@@ -26,7 +26,7 @@
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index fb5ea29ea..34f8c9564 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean bom
@@ -71,88 +71,88 @@
io.ebean
ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-core-type
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-ddl-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-externalmapping-xml
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-autotune
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-querybean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
querybean-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
io.ebean
kotlin-querybean-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
io.ebean
ebean-test
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
io.ebean
ebean-postgis
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-redis
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index 35296dca7..09009283c 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean-core-type
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index ee80bef5f..ccef24355 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean-core
@@ -41,19 +41,19 @@
io.ebean
ebean-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-core-type
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
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 d10d92ab2..3ede05de1 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
@@ -275,12 +275,18 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
return null;
}
- private void put(Object id, Object b) {
+ private void put(Object id, Object bean) {
+ Object existing;
if (useReferences) {
weakCount++;
- map.put(id, new BeanRef(this, id, b, queue));
+ existing = map.put(id, new BeanRef(this, id, bean, queue));
} else {
- map.put(id, b);
+ existing = map.put(id, bean);
+ }
+ if (existing instanceof BeanRef) {
+ // when a BeanRef is replaced, its expunge() must NOT remove an entry
+ ((BeanRef) existing).setReplaced();
+ weakCount--;
}
}
@@ -330,6 +336,7 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
private final ClassContext classContext;
private final Object key;
+ private boolean replaced;
private BeanRef(ClassContext classContext, Object key, Object referent, ReferenceQueue super Object> q) {
super(referent, q);
@@ -337,8 +344,14 @@ public final class DefaultPersistenceContext implements SpiPersistenceContext {
this.key = key;
}
+ private void setReplaced() {
+ replaced = true;
+ }
+
private void expunge() {
- classContext.remove(key);
+ if (!replaced) {
+ classContext.remove(key);
+ }
}
}
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index 8e1acc59e..b2479c256 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean ddl generation
@@ -28,14 +28,14 @@
io.ebean
ebean-core-type
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index eeed011c7..16adb312f 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean external mapping api
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 57144e7f9..2bab5aa0b 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
@@ -33,7 +33,7 @@
io.ebean
ebean-externalmapping-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
@@ -59,14 +59,14 @@
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
io.ebean
ebean-ddl-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index c185d6a16..74dad99da 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean postgis
@@ -23,7 +23,7 @@
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
@@ -74,7 +74,7 @@
io.ebean
ebean-test
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index 4874ab549..bc07795b5 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean querybean
@@ -17,7 +17,7 @@
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
@@ -56,21 +56,21 @@
io.ebean
ebean-ddl-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
io.ebean
querybean-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
io.ebean
ebean-test
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index c2156066b..9956949b3 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean-redis
@@ -22,35 +22,35 @@
io.ebean
ebean-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
io.ebean
ebean-querybean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
io.ebean
querybean-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
io.ebean
ebean-test
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 712755eca..6a2a5679f 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean test
@@ -29,14 +29,14 @@
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
provided
io.ebean
ebean-ddl-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
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 86e0425a6..82788d8a0 100644
--- a/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
+++ b/ebean-test/src/test/java/org/tests/basic/TestPersistenceContext.java
@@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.*;
class TestPersistenceContext extends BaseTestCase {
-
@Test
void testReload() {
ResetBasicData.reset();
@@ -34,7 +33,7 @@ class TestPersistenceContext extends BaseTestCase {
assertThat(notes.get(0).getTitle()).isEqualTo("FooBar");
}
}
-
+
@Test
void test() {
ResetBasicData.reset();
@@ -191,4 +190,30 @@ class TestPersistenceContext extends BaseTestCase {
assertThat(pc.toString()).contains("Customer=size:200 (0 weak)");
}
}
+
+ @Disabled // run manually
+ @Test
+ void testPcScopes_with_findEachFindList() {
+ 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);
+ }
+
+ for (int i = 0; i < 1000; i++) {
+ try (Transaction txn = DB.beginTransaction()) {
+ List customers = new ArrayList<>();
+ DB.find(Customer.class).select("id").findEach(customers::add);
+ SpiPersistenceContext pc = ((SpiTransaction) txn).getPersistenceContext();
+ assertThat(pc.toString()).contains("Customer=size:5000 (5000 weak)");
+ customers.clear();
+ customers = DB.find(Customer.class).select("id").findList();
+
+ assertThat(pc.toString()).contains("Customer=size:5000"); // We expect ALWAYS 5000 entries in the PC
+ }
+ }
+ }
}
diff --git a/ebean-test/src/test/java/org/tests/basic/type/TestExtraScalarTypes.java b/ebean-test/src/test/java/org/tests/basic/type/TestExtraScalarTypes.java
index 133adada4..d5ee6435a 100644
--- a/ebean-test/src/test/java/org/tests/basic/type/TestExtraScalarTypes.java
+++ b/ebean-test/src/test/java/org/tests/basic/type/TestExtraScalarTypes.java
@@ -10,16 +10,16 @@ import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-public class TestExtraScalarTypes extends BaseTestCase {
+class TestExtraScalarTypes extends BaseTestCase {
@Test
- public void test() {
+ void test() {
- Locale locale = Locale.getDefault();
- Currency currency = Currency.getInstance(locale);
+ Locale locale = Locale.ENGLISH;
+ Currency currency = Currency.getInstance(Locale.US);
TimeZone tz = TimeZone.getDefault();
ESomeType e = new ESomeType();
@@ -29,20 +29,20 @@ public class TestExtraScalarTypes extends BaseTestCase {
DB.save(e);
- ESomeType e2 = DB.find(ESomeType.class).setAutoTune(false).setId(e.getId()).findOne();
+ ESomeType e2 = DB.find(ESomeType.class).setId(e.getId()).findOne();
assertNotNull(e2.getCurrency());
assertNotNull(e2.getLocale());
assertNotNull(e2.getTimeZone());
List list = DB.find(ESomeType.class)
- .setAutoTune(false).where()
+ .where()
.eq("locale", locale)
.eq("timeZone", tz.getID())
.eq("currency", currency)
.findList();
- assertTrue(!list.isEmpty());
+ assertThat(list).isNotEmpty();
}
}
diff --git a/ebean/pom.xml b/ebean/pom.xml
index b92ba41a1..398c3a3a3 100644
--- a/ebean/pom.xml
+++ b/ebean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
ebean composite
@@ -22,20 +22,20 @@
io.ebean
ebean-api
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
io.ebean
ebean-querybean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index 95e4b2221..b2e022c98 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
kotlin querybean generator
@@ -29,7 +29,7 @@
io.ebean
ebean-querybean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
@@ -43,7 +43,7 @@
io.ebean
ebean-core
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
@@ -64,7 +64,7 @@
io.ebean
ebean-ddl-generator
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
test
diff --git a/pom.xml b/pom.xml
index c391e227a..5cf92e7fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
io.ebean
ebean-parent
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-FOC1-SNAPSHOT
pom
ebean parent
@@ -45,8 +45,8 @@
12.12.1
4.2
7.3
- 12.12.3-FOC1-SNAPSHOT
- 12.12.3-FOC1-SNAPSHOT
+ 12.13.0-FOC1-SNAPSHOT
+ 12.13.0-FOC1-SNAPSHOT
diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml
index 8c3b20f14..51de4c806 100644
--- a/querybean-generator/pom.xml
+++ b/querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 12.12.4-FOC1-SNAPSHOT
+ 12.13.1-SNAPSHOT
querybean generator
diff --git a/tests/test-java16/pom.xml b/tests/test-java16/pom.xml
index fe18418ab..4a416d12e 100644
--- a/tests/test-java16/pom.xml
+++ b/tests/test-java16/pom.xml
@@ -20,7 +20,7 @@
io.ebean
ebean
- 12.12.3-SNAPSHOT
+ 12.13.0-SNAPSHOT
@@ -32,7 +32,7 @@
io.ebean
ebean-test
- 12.12.3-SNAPSHOT
+ 12.13.0-SNAPSHOT
test
@@ -58,7 +58,7 @@
io.ebean
querybean-generator
- 12.12.3-SNAPSHOT
+ 12.13.0-SNAPSHOT
diff --git a/tests/test-kotlin/pom.xml b/tests/test-kotlin/pom.xml
index 828aaf996..1321332b8 100644
--- a/tests/test-kotlin/pom.xml
+++ b/tests/test-kotlin/pom.xml
@@ -18,7 +18,7 @@
11
11
- 12.12.1
+ 12.13.0
1.5.31
2.12.1
true
@@ -35,14 +35,14 @@
io.ebean
ebean-test
- 12.12.3-SNAPSHOT
+ 12.13.0-SNAPSHOT
test
io.ebean
ebean-core
- 12.12.3-SNAPSHOT
+ 12.13.0-SNAPSHOT
test