diff --git a/README.md b/README.md
index c00cb73e5..694c73f96 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@
[](https://github.com/ebean-orm/ebean-datasource/actions/workflows/jdk-ea.yml)
[](https://github.com/ebean-orm/ebean-migration/actions/workflows/jdk-ea.yml)
[](https://github.com/ebean-orm/ebean-test-docker/actions/workflows/jdk-ea.yml)
+[](https://github.com/ebean-orm/ebean-agent/actions/workflows/jdk-ea.yml)
# Sponsors
diff --git a/composites/ebean-clickhouse/pom.xml b/composites/ebean-clickhouse/pom.xml
index be8425d21..168c64b5d 100644
--- a/composites/ebean-clickhouse/pom.xml
+++ b/composites/ebean-clickhouse/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-clickhouse
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-clickhouse
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-cockroach/pom.xml b/composites/ebean-cockroach/pom.xml
index b9010808b..0b11f8e63 100644
--- a/composites/ebean-cockroach/pom.xml
+++ b/composites/ebean-cockroach/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-cockroach
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-postgres
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-db2/pom.xml b/composites/ebean-db2/pom.xml
index 0376076a1..5af1fa1ef 100644
--- a/composites/ebean-db2/pom.xml
+++ b/composites/ebean-db2/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-db2
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-db2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-h2/pom.xml b/composites/ebean-h2/pom.xml
index ada240d15..e27f722c1 100644
--- a/composites/ebean-h2/pom.xml
+++ b/composites/ebean-h2/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-h2
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-h2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-hana/pom.xml b/composites/ebean-hana/pom.xml
index dcd45e1bc..8e18af012 100644
--- a/composites/ebean-hana/pom.xml
+++ b/composites/ebean-hana/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-hana
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-hana
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-mariadb/pom.xml b/composites/ebean-mariadb/pom.xml
index 7f8b54fe8..311af73ee 100644
--- a/composites/ebean-mariadb/pom.xml
+++ b/composites/ebean-mariadb/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-mariadb
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-mariadb
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-mysql/pom.xml b/composites/ebean-mysql/pom.xml
index 65502248a..883e05f73 100644
--- a/composites/ebean-mysql/pom.xml
+++ b/composites/ebean-mysql/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-mysql
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-mysql
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-nuodb/pom.xml b/composites/ebean-nuodb/pom.xml
index 2659acfd2..565aac29c 100644
--- a/composites/ebean-nuodb/pom.xml
+++ b/composites/ebean-nuodb/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-nuodb
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-nuodb
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-oracle/pom.xml b/composites/ebean-oracle/pom.xml
index 18bb095a2..159917357 100644
--- a/composites/ebean-oracle/pom.xml
+++ b/composites/ebean-oracle/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-oracle
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-oracle
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-postgres/pom.xml b/composites/ebean-postgres/pom.xml
index 913007347..313d9fe07 100644
--- a/composites/ebean-postgres/pom.xml
+++ b/composites/ebean-postgres/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-postgres
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-postgres
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-sqlite/pom.xml b/composites/ebean-sqlite/pom.xml
index 96d0143a2..f89ebc5f1 100644
--- a/composites/ebean-sqlite/pom.xml
+++ b/composites/ebean-sqlite/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-sqlite
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-sqlite
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-sqlserver/pom.xml b/composites/ebean-sqlserver/pom.xml
index f10e21134..ddfd35458 100644
--- a/composites/ebean-sqlserver/pom.xml
+++ b/composites/ebean-sqlserver/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-sqlserver
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-sqlserver
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean-yugabyte/pom.xml b/composites/ebean-yugabyte/pom.xml
index 083dbd94e..8b1a9b582 100644
--- a/composites/ebean-yugabyte/pom.xml
+++ b/composites/ebean-yugabyte/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-yugabyte
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-postgres
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/ebean/pom.xml b/composites/ebean/pom.xml
index a8e00d344..48e5146f8 100644
--- a/composites/ebean/pom.xml
+++ b/composites/ebean/pom.xml
@@ -4,7 +4,7 @@
composites
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean (all platforms)
@@ -16,13 +16,13 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -35,13 +35,13 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-all
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/composites/pom.xml b/composites/pom.xml
index 96b149bf8..8cf659c0c 100644
--- a/composites/pom.xml
+++ b/composites/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
composites
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index f005f26e3..280698ef9 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean api
@@ -49,7 +49,7 @@
io.ebean
ebean-annotation
- 7.8
+ 8.0
diff --git a/ebean-api/src/main/java/io/ebean/BeanState.java b/ebean-api/src/main/java/io/ebean/BeanState.java
index 912d737fa..64c726a5b 100644
--- a/ebean-api/src/main/java/io/ebean/BeanState.java
+++ b/ebean-api/src/main/java/io/ebean/BeanState.java
@@ -74,40 +74,16 @@ public interface BeanState {
*/
Set loadedProps();
- /**
- * Deprecated migrate to loadedProps().
- */
- @Deprecated
- default Set getLoadedProps() {
- return loadedProps();
- }
-
/**
* Return the set of changed properties.
*/
Set changedProps();
- /**
- * Deprecated migrate to changedProps().
- */
- @Deprecated
- default Set getChangedProps() {
- return changedProps();
- }
-
/**
* Return a map of the updated properties and their new and old values.
*/
Map dirtyValues();
- /**
- * Deprecated migrate to dirtyValues().
- */
- @Deprecated
- default Map getDirtyValues() {
- return dirtyValues();
- }
-
/**
* Return true if the bean is readOnly.
*
@@ -139,24 +115,9 @@ public interface BeanState {
*/
Map loadErrors();
- /**
- * Deprecated migrate to loadErrors().
- */
- @Deprecated
- default Map getLoadErrors() {
- return loadErrors();
- }
-
/**
* Return the sort order value for an order column.
*/
int sortOrder();
- /**
- * Deprecated migrate to sortOrder().
- */
- @Deprecated
- default int getSortOrder() {
- return sortOrder();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/DB.java b/ebean-api/src/main/java/io/ebean/DB.java
index b5438eb08..0b7d3fa38 100644
--- a/ebean-api/src/main/java/io/ebean/DB.java
+++ b/ebean-api/src/main/java/io/ebean/DB.java
@@ -22,10 +22,9 @@ import java.util.concurrent.Callable;
* DB additionally provides a convenient way to use the 'default' Database.
*
*
Default database
- *
* One of the Database instances can be registered as the "default database"
* and can be obtained using DB.getDefault()
- *
+ *
* {@code
*
* Database database = DB.getDefault();
@@ -36,7 +35,7 @@ import java.util.concurrent.Callable;
*
* Multiple database instances can be registered with DB and we can obtain them
* using DB.byName()
- *
+ *
* {@code
*
* Database hrDatabase = DB.byName("hr");
@@ -47,7 +46,6 @@ import java.util.concurrent.Callable;
*
* DB has methods like {@link #find(Class)} and {@link #save(Object)} which are
* just convenience for using the default database.
- *
*
* {@code
*
@@ -117,39 +115,26 @@ public final class DB {
* build the WHERE and HAVING clauses. Alternatively you can use the
* ExpressionFactory directly to create expressions to add to the query where
* clause.
- *
*
* Alternatively you can use the {@link Expr} as a shortcut to the
* ExpressionFactory of the 'Default' database.
- *
*
* You generally need to the an ExpressionFactory (or {@link Expr}) to build
* an expression that uses OR like Expression e = Expr.or(..., ...);
- *
*/
public static ExpressionFactory expressionFactory() {
return getDefault().expressionFactory();
}
- /**
- * Deprecated migrate to expressionFactory().
- */
- @Deprecated
- public static ExpressionFactory getExpressionFactory() {
- return expressionFactory();
- }
-
/**
* Return the next identity value for a given bean type.
*
* This will only work when a IdGenerator is on this bean type such as a DB
* sequence or UUID.
- *
*
* For DB's supporting getGeneratedKeys and sequences such as Oracle10 you do
* not need to use this method generally. It is made available for more
* complex cases where it is useful to get an ID prior to some processing.
- *
*/
public static Object nextId(Class> beanType) {
return getDefault().nextId(beanType);
@@ -159,17 +144,14 @@ public final class DB {
* Start a transaction with 'REQUIRED' semantics.
*
* With REQUIRED semantics if an active transaction already exists that transaction will be used.
- *
*
* The transaction is stored in a ThreadLocal variable and typically you only
* need to use the returned Transaction IF you wish to do things like
* use batch mode, change the transaction isolation level, use savepoints or
* log comments to the transaction log.
- *
*
- * Example of using a transaction to span multiple calls to find(), save()
- * etc.
- *
+ * Example of using a transaction to span multiple calls to find(), save() etc.
+ *
* {@code
*
* try (Transaction transaction = DB.beginTransaction()) {
@@ -187,7 +169,6 @@ public final class DB {
* With Database we can pass the transaction to the various find(), save() and execute()
* methods. This gives us the ability to create the transactions externally from Ebean
* and use the transaction explicitly via the various methods available on Database.
- *
*/
public static Transaction beginTransaction() {
return getDefault().beginTransaction();
@@ -199,7 +180,6 @@ public final class DB {
* You will want to do this if you want multiple Transactions in a single
* thread or generally use transactions outside of the TransactionThreadLocal
* management.
- *
*/
public static Transaction createTransaction() {
return getDefault().createTransaction();
@@ -219,7 +199,6 @@ public final class DB {
*
* Note that this provides an try finally alternative to using {@link #executeCall(TxScope, Callable)} or
* {@link #execute(TxScope, Runnable)}.
- *
*
*
REQUIRES_NEW example:
* {@code
@@ -278,7 +257,7 @@ public final class DB {
/**
* Register a TransactionCallback on the currently active transaction.
- *
+ *
* If there is no currently active transaction then a PersistenceException is thrown.
*
* @param transactionCallback the transaction callback to be registered with the current transaction
@@ -307,14 +286,12 @@ public final class DB {
* rollback the transaction.
*
* It is preferable to use try with resources rather than this.
- *
*
* Useful to put in a finally block to ensure the transaction is ended, rather
* than a rollbackTransaction() in each catch block.
- *
*
* Code example:
- *
+ *
* {@code
* DB.beginTransaction();
* try {
@@ -345,7 +322,6 @@ public final class DB {
*
* When null is passed in for b, then the 'OldValues' of a is used for the
* difference comparison.
- *
*/
public static Map diff(Object a, Object b) {
return getDefault().diff(a, b);
@@ -356,18 +332,15 @@ public final class DB {
*
* If there is no current transaction one will be created and committed for
* you automatically.
- *
*
* Save can cascade along relationships. For this to happen you need to
* specify a cascade of CascadeType.ALL or CascadeType.PERSIST on the
* OneToMany, OneToOne or ManyToMany annotation.
- *
*
* When a save cascades via a OneToMany or ManyToMany Ebean will automatically
* set the 'parent' object to the 'detail' object. In the example below in
* saving the order and cascade saving the order details the 'parent' order
* will be set against each order detail when it is saved.
- *
*/
public static void save(Object bean) throws OptimisticLockException {
getDefault().save(bean);
@@ -418,11 +391,9 @@ public final class DB {
* Stateless updates: Note that the bean does not have to be previously fetched to call
* update().You can create a new instance and set some of its properties programmatically for via
* JSON/XML marshalling etc. This is described as a 'stateless update'.
- *
*
* Optimistic Locking: Note that if the version property is not set when update() is
* called then no optimistic locking is performed (internally ConcurrencyMode.NONE is used).
- *
*
*
{@code
*
@@ -539,20 +510,16 @@ public final class DB {
* Delete the bean.
*
* This will return true if the bean was deleted successfully or JDBC batch is being used.
- *
*
* If there is no current transaction one will be created and committed for
* you automatically.
- *
*
* If the bean is configured with @SoftDelete then this will perform a soft
* delete rather than a hard/permanent delete.
- *
*
* If the Bean does not have a version property (or loaded version property) and
* the bean does not exist then this returns false indicating that nothing was
* deleted. Note that, if JDBC batch mode is used then this always returns true.
- *
*/
public static boolean delete(Object bean) throws OptimisticLockException {
return getDefault().delete(bean);
@@ -612,7 +579,6 @@ public final class DB {
*
* Note that this resets OneToMany and ManyToMany properties so that if they
* are accessed a lazy load will refresh the many property.
- *
*/
public static void refresh(Object bean) {
getDefault().refresh(bean);
@@ -620,6 +586,7 @@ public final class DB {
/**
* Refresh a 'many' property of a bean.
+ *
* {@code
*
* Order order = ...;
@@ -640,7 +607,7 @@ public final class DB {
* Get a reference object.
*
* This is sometimes described as a proxy (with lazy loading).
- *
+ *
* {@code
*
* Product product = DB.getReference(Product.class, 1);
@@ -661,14 +628,6 @@ public final class DB {
return getDefault().reference(beanType, id);
}
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- public static T getReference(Class beanType, Object id) {
- return reference(beanType, id);
- }
-
/**
* Sort the list using the sortByClause which can contain a comma delimited
* list of property names and keywords asc, desc, nullsHigh and nullsLow.
@@ -684,7 +643,7 @@ public final class DB {
*
* Note that the sorting uses a Comparator and Collections.sort(); and does
* not invoke a DB query.
- *
+ *
* {@code
*
* // find orders and their customers
@@ -719,9 +678,8 @@ public final class DB {
*
* }
*
- * If you want more control over the query then you can use createQuery() and
- * Query.findOne();
- *
+ * If you want more control over the query then you can use createQuery() and Query.findOne();
+ *
* {@code
*
* // ... additionally fetching customer, customer shipping address,
@@ -761,40 +719,25 @@ public final class DB {
}
/**
- * Look to execute a native sql query that does not returns beans but instead
- * returns SqlRow or direct access to ResultSet (see {@link SqlQuery#findList(RowMapper)}.
- *
+ * Look to execute a native sql query that does not return beans but instead
+ * returns SqlRow or uses {@link RowMapper}.
*
* Refer to {@link DtoQuery} for native sql queries returning DTO beans.
- *
*
* Refer to {@link #findNative(Class, String)} for native sql queries returning entity beans.
- *
*/
public static SqlQuery sqlQuery(String sql) {
return getDefault().sqlQuery(sql);
}
- /**
- * Deprecated - migrate to sqlQuery().
- *
- * This is an alias for {@link #sqlQuery(String)}.
- */
- @Deprecated
- public static SqlQuery createSqlQuery(String sql) {
- return sqlQuery(sql);
- }
-
/**
* Look to execute a native sql insert update or delete statement.
*
* Use this to execute a Insert Update or Delete statement. The statement will
* be native to the database and contain database table and column names.
- *
*
*
* See {@link SqlUpdate} for example usage.
- *
*
* @return The SqlUpdate instance to set parameters and execute
*/
@@ -802,16 +745,6 @@ public final class DB {
return getDefault().sqlUpdate(sql);
}
- /**
- * Deprecated - migrate to sqlUpdate().
- *
- * This is an alias for {@link #sqlUpdate(String)}.
- */
- @Deprecated
- public static SqlUpdate createSqlUpdate(String sql) {
- return sqlUpdate(sql);
- }
-
/**
* Create a CallableSql to execute a given stored procedure.
*
@@ -828,10 +761,9 @@ public final class DB {
*
* The orm update differs from the sql update in that it you can use the bean
* name and bean property names rather than table and column names.
- *
*
* An example:
- *
+ *
* {@code
*
* // The bean name and properties - "topic","postCount" and "id"
@@ -864,7 +796,6 @@ public final class DB {
* Create a named query.
*
* For RawSql the named query is expected to be in ebean.xml.
- *
*
* @param beanType The type of entity bean
* @param namedQuery The name of the query
@@ -880,15 +811,12 @@ public final class DB {
*
* You can use the methods on the Query object to specify fetch paths,
* predicates, order by, limits etc.
- *
*
* You then use findList(), findSet(), findMap() and findOne() to execute
* the query and return the collection or bean.
- *
*
* Note that a query executed by {@link Query#findList()} etc will execute against
* the same database from which is was created.
- *
*
* @param beanType the class of entity to be fetched
* @return A ORM Query for this beanType
@@ -940,7 +868,6 @@ public final class DB {
* This is actually the same as {@link #createQuery(Class)}. The reason it
* exists is that people used to JPA will probably be looking for a
* createQuery method (the same as entityManager).
- *
*
* @param beanType the type of entity bean to find
* @return A ORM Query object for this beanType
@@ -953,7 +880,7 @@ public final class DB {
* Create a query using native SQL.
*
* The native SQL can contain named parameters or positioned parameters.
- *
+ *
* {@code
*
* String sql = "select c.id, c.name from customer c where c.name like ? order by c.name";
@@ -978,7 +905,6 @@ public final class DB {
*
* DTO beans are just normal bean like classes with public constructor(s) and setters.
* They do not need to be registered with Ebean before use.
- *
*
* @param dtoType The type of the DTO bean the rows will be mapped into.
* @param sql The SQL query to execute.
@@ -1015,10 +941,8 @@ public final class DB {
* going back to the database.
*
* This produces and returns a new list with the sort and filters applied.
- *
*
* Refer to {@link Filter} for an example of its use.
- *
*/
public static Filter filter(Class beanType) {
return getDefault().filter(beanType);
@@ -1029,7 +953,7 @@ public final class DB {
*
* The scope can control the transaction type, isolation and rollback
* semantics.
- *
+ *
* {@code
*
* // set specific transactional scope settings
@@ -1053,7 +977,7 @@ public final class DB {
*
* The default scope runs with REQUIRED and by default will rollback on any
* exception (checked or runtime).
- *
+ *
* {@code
*
* DB.execute(() -> {
@@ -1078,7 +1002,7 @@ public final class DB {
*
* The scope can control the transaction type, isolation and rollback
* semantics.
- *
+ *
* {@code
*
* // set specific transactional scope settings
@@ -1102,11 +1026,10 @@ public final class DB {
*
* The default scope runs with REQUIRED and by default will rollback on any
* exception (checked or runtime).
- *
*
* This is basically the same as TxRunnable except that it returns an Object
* (and you specify the return type via generics).
- *
+ *
* {@code
*
* DB.executeCall(() -> {
@@ -1135,23 +1058,19 @@ public final class DB {
*
* If you use DB.execute(UpdateSql) then the table modification information
* is automatically deduced and you do not need to call this method yourself.
- *
*
* This information is used to invalidate objects out of the cache and
* potentially text indexes. This information is also automatically broadcast
* across the cluster.
- *
*
* If there is a transaction then this information is placed into the current
* transactions event information. When the transaction is committed this
* information is registered (with the transaction manager). If this
* transaction is rolled back then none of the transaction event information
* registers including the information you put in via this method.
- *
*
* If there is NO current transaction when you call this method then this
* information is registered immediately (with the transaction manager).
- *
*
* @param tableName the name of the table that was modified
* @param inserts true if rows where inserted into the table
@@ -1166,20 +1085,11 @@ public final class DB {
* Return the BeanState for a given entity bean.
*
* This will return null if the bean is not an enhanced entity bean.
- *
*/
public static BeanState beanState(Object bean) {
return getDefault().beanState(bean);
}
- /**
- * Deprecated migrate to beanState().
- */
- @Deprecated
- public static BeanState getBeanState(Object bean) {
- return beanState(bean);
- }
-
/**
* Return the value of the Id property for a given bean.
*/
@@ -1187,14 +1097,6 @@ public final class DB {
return getDefault().beanId(bean);
}
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- public static Object getBeanId(Object bean) {
- return beanId(bean);
- }
-
/**
* Load and lock the bean using {@code select for update}.
*
@@ -1210,14 +1112,6 @@ public final class DB {
getDefault().lock(bean);
}
- /**
- * Deprecated migrate to cacheManager().
- */
- @Deprecated
- public static ServerCacheManager getServerCacheManager() {
- return getDefault().cacheManager();
- }
-
/**
* Return the manager of the level 2 cache ("L2" cache).
*/
@@ -1233,14 +1127,6 @@ public final class DB {
return getDefault().backgroundExecutor();
}
- /**
- * Deprecated migrate to backgroundExecutor().
- */
- @Deprecated
- public static BackgroundExecutor getBackgroundExecutor() {
- return backgroundExecutor();
- }
-
/**
* Return the JsonContext for reading/writing JSON.
*/
diff --git a/ebean-api/src/main/java/io/ebean/Database.java b/ebean-api/src/main/java/io/ebean/Database.java
index 15446e999..c98f885e4 100644
--- a/ebean-api/src/main/java/io/ebean/Database.java
+++ b/ebean-api/src/main/java/io/ebean/Database.java
@@ -123,81 +123,33 @@ public interface Database {
*/
AutoTune autoTune();
- /**
- * Deprecated migrate to autoTune().
- */
- @Deprecated
- default AutoTune getAutoTune() {
- return autoTune();
- }
-
/**
* Return the associated DataSource for this Database instance.
*/
DataSource dataSource();
- /**
- * Deprecated migrate to dataSource().
- */
- @Deprecated
- default DataSource getDataSource() {
- return dataSource();
- }
-
/**
* Return the associated read only DataSource for this Database instance (can be null).
*/
DataSource readOnlyDataSource();
- /**
- * Deprecated migrate to readOnlyDataSource().
- */
- @Deprecated
- default DataSource getReadOnlyDataSource() {
- return readOnlyDataSource();
- }
-
/**
* Return the name. This is used with {@link DB#byName(String)} to get a
* Database that was registered with the DB singleton.
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return the ExpressionFactory for this database.
*/
ExpressionFactory expressionFactory();
- /**
- * Deprecated migrate to expressionFactory().
- */
- @Deprecated
- default ExpressionFactory getExpressionFactory() {
- return expressionFactory();
- }
-
/**
* Return the MetaInfoManager which is used to get meta data from the Database
* such as query execution statistics.
*/
MetaInfoManager metaInfo();
- /**
- * Deprecated migrate to metaInfo().
- */
- @Deprecated
- default MetaInfoManager getMetaInfoManager() {
- return metaInfo();
- }
-
/**
* Return the platform used for this database instance.
*
@@ -217,27 +169,11 @@ public interface Database {
*/
Platform platform();
- /**
- * Deprecated migrate to platform().
- */
- @Deprecated
- default Platform getPlatform() {
- return platform();
- }
-
/**
* Return the extended API intended for use by plugins.
*/
SpiServer pluginApi();
- /**
- * Deprecated migrate to pluginApi().
- */
- @Deprecated
- default SpiServer getPluginApi() {
- return pluginApi();
- }
-
/**
* Return the BeanState for a given entity bean.
*
@@ -246,27 +182,11 @@ public interface Database {
*/
BeanState beanState(Object bean);
- /**
- * Deprecated migrate to beanState().
- */
- @Deprecated
- default BeanState getBeanState(Object bean) {
- return beanState(bean);
- }
-
/**
* Return the value of the Id property for a given bean.
*/
Object beanId(Object bean);
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- default Object getBeanId(Object bean) {
- return beanId(bean);
- }
-
/**
* Set the Id value onto the bean converting the type of the id value if necessary.
*
@@ -279,14 +199,6 @@ public interface Database {
*/
Object beanId(Object bean, Object id);
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- default Object setBeanId(Object bean, Object id) {
- return beanId(bean, id);
- }
-
/**
* Return a map of the differences between two objects of the same type.
*
@@ -588,14 +500,6 @@ public interface Database {
*/
SqlQuery sqlQuery(String sql);
- /**
- * Deprecated - migrate to sqlQuery().
- *
- * This is an alias for {@link #sqlQuery(String)}.
- */
- @Deprecated
- SqlQuery createSqlQuery(String sql);
-
/**
* Look to execute a native sql insert update or delete statement.
*
@@ -611,14 +515,6 @@ public interface Database {
*/
SqlUpdate sqlUpdate(String sql);
- /**
- * Deprecated - migrate to sqlUpdate().
- *
- * This is an alias for {@link #sqlUpdate(String)}.
- */
- @Deprecated
- SqlUpdate createSqlUpdate(String sql);
-
/**
* Create a CallableSql to execute a given stored procedure.
*/
@@ -952,14 +848,6 @@ public interface Database {
*/
T reference(Class beanType, Object id);
- /**
- * Deprecated migrate to reference().
- */
- @Deprecated
- default T getReference(Class beanType, Object id) {
- return reference(beanType, id);
- }
-
/**
* Return the extended API for Database.
*
@@ -1528,28 +1416,12 @@ public interface Database {
*/
ServerCacheManager cacheManager();
- /**
- * Deprecated migrate to cacheManager().
- */
- @Deprecated
- default ServerCacheManager getServerCacheManager() {
- return cacheManager();
- }
-
/**
* Return the BackgroundExecutor service for asynchronous processing of
* queries.
*/
BackgroundExecutor backgroundExecutor();
- /**
- * Deprecated migrate to backgroundExecutor().
- */
- @Deprecated
- default BackgroundExecutor getBackgroundExecutor() {
- return backgroundExecutor();
- }
-
/**
* Return the JsonContext for reading/writing JSON.
*
diff --git a/ebean-api/src/main/java/io/ebean/DatabaseFactory.java b/ebean-api/src/main/java/io/ebean/DatabaseFactory.java
index 588f48c24..9696954f7 100644
--- a/ebean-api/src/main/java/io/ebean/DatabaseFactory.java
+++ b/ebean-api/src/main/java/io/ebean/DatabaseFactory.java
@@ -26,7 +26,7 @@ import java.util.concurrent.locks.ReentrantLock;
* methods on the DB singleton such as {@link DB#find(Class)} are just a
* convenient way of using the 'default/primary' Database.
*/
-public class DatabaseFactory {
+public final class DatabaseFactory {
private static final ReentrantLock lock = new ReentrantLock();
private static SpiContainer container;
diff --git a/ebean-api/src/main/java/io/ebean/DbPrimary.java b/ebean-api/src/main/java/io/ebean/DbPrimary.java
index ffec8b114..156038f8e 100644
--- a/ebean-api/src/main/java/io/ebean/DbPrimary.java
+++ b/ebean-api/src/main/java/io/ebean/DbPrimary.java
@@ -10,7 +10,7 @@ import java.util.concurrent.locks.ReentrantLock;
*
* Intended for internal use as part of bootup, construction, registration of the default database.
*/
-class DbPrimary {
+final class DbPrimary {
private static final ReentrantLock lock = new ReentrantLock();
private static String defaultServerName;
diff --git a/ebean-api/src/main/java/io/ebean/EbeanVersion.java b/ebean-api/src/main/java/io/ebean/EbeanVersion.java
index 6a764d911..c4e63efff 100644
--- a/ebean-api/src/main/java/io/ebean/EbeanVersion.java
+++ b/ebean-api/src/main/java/io/ebean/EbeanVersion.java
@@ -12,7 +12,7 @@ import java.util.Properties;
*
* @author Roland Praml, FOCONIS AG
*/
-public class EbeanVersion {
+public final class EbeanVersion {
private static final Logger log = LoggerFactory.getLogger("io.ebean");
diff --git a/ebean-api/src/main/java/io/ebean/Expr.java b/ebean-api/src/main/java/io/ebean/Expr.java
index 1316f9873..525bc3272 100644
--- a/ebean-api/src/main/java/io/ebean/Expr.java
+++ b/ebean-api/src/main/java/io/ebean/Expr.java
@@ -25,7 +25,7 @@ import java.util.Map;
*
* @see Query#where()
*/
-public class Expr {
+public final class Expr {
private Expr() {
}
diff --git a/ebean-api/src/main/java/io/ebean/ExtendedServer.java b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
index 1bb21a721..0088e9c2b 100644
--- a/ebean-api/src/main/java/io/ebean/ExtendedServer.java
+++ b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
@@ -112,19 +112,6 @@ public interface ExtendedServer {
*/
Stream findStream(Query query, Transaction transaction);
- /**
- * Deprecated - migrate to findStream().
- *
- * Execute the query returning the result as a Stream.
- *
- * Note that this can support very large queries iterating any number of results.
- * To do so internally it can use multiple persistence contexts.
- *
- * Note that the stream needs to be closed so use with try with resources.
- */
- @Deprecated
- Stream findLargeStream(Query query, Transaction transaction);
-
/**
* Execute the query visiting the each bean one at a time.
*
diff --git a/ebean-api/src/main/java/io/ebean/FetchConfig.java b/ebean-api/src/main/java/io/ebean/FetchConfig.java
index e2d4fbe35..cfb14a235 100644
--- a/ebean-api/src/main/java/io/ebean/FetchConfig.java
+++ b/ebean-api/src/main/java/io/ebean/FetchConfig.java
@@ -31,7 +31,7 @@ import java.io.Serializable;
* @author mario
* @author rbygrave
*/
-public class FetchConfig implements Serializable {
+public final class FetchConfig implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/ebean-api/src/main/java/io/ebean/Query.java b/ebean-api/src/main/java/io/ebean/Query.java
index 4ddfc9af5..0bc8939f3 100644
--- a/ebean-api/src/main/java/io/ebean/Query.java
+++ b/ebean-api/src/main/java/io/ebean/Query.java
@@ -750,29 +750,6 @@ public interface Query extends CancelableQuery {
*/
Stream findStream();
- /**
- * Deprecated - migrate to findStream.
- *
- * Execute the query returning the result as a Stream.
- *
- * Note that this uses multiple persistence contexts such that we can use
- * it with a large number of results.
- *
- * {@code
- *
- * // use try with resources to ensure Stream is closed
- *
- * try (Stream stream = query.findLargeStream()) {
- * stream
- * .map(...)
- * .collect(...);
- * }
- *
- * }
- */
- @Deprecated
- Stream findLargeStream();
-
/**
* Execute the query processing the beans one at a time.
*
diff --git a/ebean-api/src/main/java/io/ebean/SqlQuery.java b/ebean-api/src/main/java/io/ebean/SqlQuery.java
index 5ab123743..797e41381 100644
--- a/ebean-api/src/main/java/io/ebean/SqlQuery.java
+++ b/ebean-api/src/main/java/io/ebean/SqlQuery.java
@@ -74,18 +74,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
@Nullable
SqlRow findOne();
- /**
- * Deprecated migrate to use {@link #mapTo(RowMapper)}
- */
- @Deprecated
- T findOne(RowMapper mapper);
-
- /**
- * Deprecated migrate to use {@link #mapTo(RowMapper)}
- */
- @Deprecated
- List findList(RowMapper mapper);
-
/**
* Execute the query reading each row from ResultSet using the RowConsumer.
*
@@ -121,50 +109,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
*/
Optional findOneOrEmpty();
- /**
- * Deprecated - migrate to .mapToScalar(attributeType).findOne().
- * {@code
- *
- * .mapToScalar(BigDecimal.class)
- * .findOne();
- * }
- */
- @Deprecated
- T findSingleAttribute(Class attributeType);
-
- /**
- * Deprecated - migrate to .mapToScalar(BigDecimal.class).findOne().
- * {@code
- *
- * .mapToScalar(BigDecimal.class)
- * .findOne();
- * }
- */
- @Deprecated
- BigDecimal findSingleDecimal();
-
- /**
- * Deprecated - migrate to .mapToScalar(Long.class).findOne().
- * {@code
- *
- * .mapToScalar(Long.class)
- * .findOne();
- * }
- */
- @Deprecated
- Long findSingleLong();
-
- /**
- * Deprecated - migrate to .mapToScalar(Long.class).findList().
- * {@code
- *
- * .mapToScalar(Long.class)
- * .findList();
- * }
- */
- @Deprecated
- List findSingleAttributeList(Class attributeType);
-
/**
* Set one of more positioned parameters.
*
@@ -194,12 +138,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
*/
SqlQuery setParameters(Object... values);
- /**
- * Deprecated migrate to setParameters(Object... values)
- */
- @Deprecated
- SqlQuery setParams(Object... values);
-
/**
* Set the next bind parameter by position.
*
{@code
diff --git a/ebean-api/src/main/java/io/ebean/SqlUpdate.java b/ebean-api/src/main/java/io/ebean/SqlUpdate.java
index 9ce704922..33eedf3b2 100644
--- a/ebean-api/src/main/java/io/ebean/SqlUpdate.java
+++ b/ebean-api/src/main/java/io/ebean/SqlUpdate.java
@@ -287,12 +287,6 @@ public interface SqlUpdate {
*/
SqlUpdate setParameters(Object... values);
- /**
- * Deprecated migrate to setParameters(Object... values).
- */
- @Deprecated
- SqlUpdate setParams(Object... values);
-
/**
* Set the next bind parameter by position.
*
@@ -300,12 +294,6 @@ public interface SqlUpdate {
*/
SqlUpdate setParameter(Object value);
- /**
- * Deprecated migrate to setParameter(value).
- */
- @Deprecated
- SqlUpdate setNextParameter(Object value);
-
/**
* Set a parameter via its index position.
*/
diff --git a/ebean-api/src/main/java/io/ebean/XServiceProvider.java b/ebean-api/src/main/java/io/ebean/XServiceProvider.java
index 7f7ce9cc6..9d362571c 100644
--- a/ebean-api/src/main/java/io/ebean/XServiceProvider.java
+++ b/ebean-api/src/main/java/io/ebean/XServiceProvider.java
@@ -11,7 +11,7 @@ import java.util.ServiceLoader;
/**
* Lookup internal services.
*/
-class XServiceProvider {
+final class XServiceProvider {
private static SpiRawSqlService rawSqlService = initRawSql();
diff --git a/ebean-api/src/main/java/io/ebean/bean/BeanCollection.java b/ebean-api/src/main/java/io/ebean/bean/BeanCollection.java
index 6271d4051..96a37bb4a 100644
--- a/ebean-api/src/main/java/io/ebean/bean/BeanCollection.java
+++ b/ebean-api/src/main/java/io/ebean/bean/BeanCollection.java
@@ -18,7 +18,7 @@ import java.util.Set;
* java.util.Collection . The reason being that java.util.Map is not a
* Collection. I realise this makes this name confusing so I apologise for that.
*/
-public interface BeanCollection extends Serializable {
+public interface BeanCollection extends Serializable, ToStringAware {
enum ModifyListenMode {
/**
diff --git a/ebean-api/src/main/java/io/ebean/bean/EntityBean.java b/ebean-api/src/main/java/io/ebean/bean/EntityBean.java
index 86c62364e..53bfc9ba4 100644
--- a/ebean-api/src/main/java/io/ebean/bean/EntityBean.java
+++ b/ebean-api/src/main/java/io/ebean/bean/EntityBean.java
@@ -11,7 +11,7 @@ import java.io.Serializable;
* general application consumption.
*
*/
-public interface EntityBean extends Serializable {
+public interface EntityBean extends Serializable, ToStringAware {
/**
* Return all the property names in defined order.
@@ -116,4 +116,8 @@ public interface EntityBean extends Serializable {
throw new NotEnhancedException();
}
+ @Override
+ default void toString(ToStringBuilder builder) {
+ throw new NotEnhancedException();
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/bean/ToStringAware.java b/ebean-api/src/main/java/io/ebean/bean/ToStringAware.java
new file mode 100644
index 000000000..bb86d9629
--- /dev/null
+++ b/ebean-api/src/main/java/io/ebean/bean/ToStringAware.java
@@ -0,0 +1,12 @@
+package io.ebean.bean;
+
+/**
+ * A type that can participate in building toString content with ToStringBuilder.
+ */
+public interface ToStringAware {
+
+ /**
+ * Append to the ToStringBuilder.
+ */
+ void toString(ToStringBuilder builder);
+}
diff --git a/ebean-api/src/main/java/io/ebean/bean/ToStringBuilder.java b/ebean-api/src/main/java/io/ebean/bean/ToStringBuilder.java
new file mode 100644
index 000000000..1dd87495a
--- /dev/null
+++ b/ebean-api/src/main/java/io/ebean/bean/ToStringBuilder.java
@@ -0,0 +1,163 @@
+package io.ebean.bean;
+
+import java.util.Collection;
+import java.util.IdentityHashMap;
+
+/**
+ * Helps build toString content taking into account recursion.
+ *
+ * That is, it detects and handles the case where there are relationships that recurse
+ * and would otherwise become an infinite loop (e.g. bidirectional parent child).
+ */
+public final class ToStringBuilder {
+
+ /**
+ * The max number of objects that we allow before stopping content being appended.
+ */
+ private static final int MAX = 100;
+
+ /**
+ * Max length of content in string form added for any given value.
+ */
+ private static final int TRIM_LENGTH = 500;
+
+ /**
+ * The max total content after which we stop content being appended.
+ */
+ private static final int MAX_TOTAL_CONTENT = 2000;
+
+ private final IdentityHashMap id = new IdentityHashMap<>();
+ private final StringBuilder sb = new StringBuilder(50);
+ private boolean first = true;
+ private int counter;
+
+ @Override
+ public String toString() {
+ return sb.toString();
+ }
+
+ /**
+ * Set of an object being added.
+ */
+ public void start(Object bean) {
+ if (counter == 0) {
+ id.putIfAbsent(bean, 0);
+ }
+ if (counter <= MAX) {
+ sb.append(bean.getClass().getSimpleName()).append("@").append(counter).append("(");
+ }
+ }
+
+ /**
+ * Add a property as name value pair.
+ */
+ public void add(String name, Object value) {
+ if (value != null && counter <= MAX) {
+ if (value instanceof BeanCollection) {
+ if (((BeanCollection>)value).isReference()) {
+ // suppress unloaded bean collections
+ return;
+ }
+ }
+ key(name);
+ value(value);
+ }
+ }
+
+ /**
+ * Add raw content.
+ */
+ public void addRaw(String content) {
+ sb.append(content);
+ }
+
+ /**
+ * End of an object.
+ */
+ public void end() {
+ if (counter <= MAX) {
+ sb.append(")");
+ }
+ }
+
+ private void key(String name) {
+ if (counter > MAX) {
+ return;
+ }
+ if (first) {
+ first = false;
+ } else {
+ sb.append(", ");
+ }
+ sb.append(name).append(":");
+ }
+
+ private void value(Object value) {
+ if (counter > MAX) {
+ return;
+ }
+ if (value instanceof ToStringAware) {
+ if (value instanceof BeanCollection) {
+ ((ToStringAware) value).toString(this);
+ } else if (push(value)) {
+ ((ToStringAware) value).toString(this);
+ }
+ } else if (value instanceof Collection) {
+ addCollection((Collection>) value);
+ } else {
+ String content = String.valueOf(value);
+ if (content.length() > TRIM_LENGTH) {
+ content = content.substring(0, TRIM_LENGTH) + " ";
+ }
+ sb.append(content);
+ if (sb.length() >= MAX_TOTAL_CONTENT) {
+ sb.append(" ...");
+ counter += MAX;
+ }
+ }
+ }
+
+ /**
+ * Add a collection of values.
+ */
+ public void addCollection(Collection> c) {
+ if (c == null || c.isEmpty()) {
+ sb.append("[]");
+ return;
+ }
+ boolean firstElement = true;
+ sb.append("[");
+ for (Object o : c) {
+ if (firstElement) {
+ firstElement = false;
+ } else {
+ sb.append(", ");
+ }
+ value(o);
+ if (counter > MAX) {
+ return;
+ }
+ }
+ sb.append("]");
+ }
+
+ private boolean push(Object bean) {
+ if (counter > MAX) {
+ return false;
+ }
+ if (counter == MAX) {
+ sb.append(" ...");
+ counter++;
+ return false;
+ }
+ Integer idx = id.putIfAbsent(bean, counter++);
+ if (idx != null) {
+ --counter;
+ sb.append(bean.getClass().getSimpleName()).append("@").append(idx);
+ return false;
+ }
+ first = true;
+ return true;
+ }
+
+}
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCache.java b/ebean-api/src/main/java/io/ebean/cache/ServerCache.java
index 1476e567d..28ff22780 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCache.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCache.java
@@ -1,5 +1,6 @@
package io.ebean.cache;
+import io.avaje.lang.Nullable;
import io.ebean.meta.MetricVisitor;
import java.util.LinkedHashMap;
@@ -68,40 +69,39 @@ public interface ServerCache {
/**
* Return the number of entries in the cache.
*/
- int size();
+ default int size() {
+ return 0;
+ }
/**
* Return the hit ratio the cache is currently getting.
*/
default int hitRatio() {
- return getHitRatio();
+ return 0;
}
- /**
- * Deprecated migrate to hitRatio().
- */
- @Deprecated
- int getHitRatio();
-
/**
* Return statistics for the cache.
*
* @param reset if true the statistics are reset.
*/
+ @Nullable
default ServerCacheStatistics statistics(boolean reset) {
- return getStatistics(reset);
+ return null;
}
- /**
- * Deprecated migrate to statistics().
- */
- @Deprecated
- ServerCacheStatistics getStatistics(boolean reset);
-
/**
* Visit the metrics for the cache.
*/
default void visit(MetricVisitor visitor) {
// do nothing by default
}
+
+ /**
+ * Unwrap the underlying ServerCache.
+ */
+ @SuppressWarnings("unchecked")
+ default T unwrap(Class cls) {
+ return (T) this;
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java b/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java
index f5e429299..80ffe471a 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java
@@ -13,6 +13,7 @@ public class ServerCacheConfig {
private final ServerCacheOptions cacheOptions;
private final CurrentTenantProvider tenantProvider;
private final QueryCacheEntryValidate queryCacheEntryValidate;
+ private final TenantAwareKey tenantAwareKey;
public ServerCacheConfig(ServerCacheType type, String cacheKey, String shortName, ServerCacheOptions cacheOptions, CurrentTenantProvider tenantProvider, QueryCacheEntryValidate queryCacheEntryValidate) {
this.type = type;
@@ -21,6 +22,14 @@ public class ServerCacheConfig {
this.cacheOptions = cacheOptions;
this.tenantProvider = tenantProvider;
this.queryCacheEntryValidate = queryCacheEntryValidate;
+ this.tenantAwareKey = (tenantProvider == null) ? null : new TenantAwareKey(tenantProvider);
+ }
+
+ /**
+ * Return the ServerCache taking into account if multi-tenant is used.
+ */
+ public ServerCache tenantAware(ServerCache cache) {
+ return tenantAwareKey == null ? cache : new TenantAwareCache(cache, tenantAwareKey);
}
/**
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java b/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java
index 67156a642..0168a4d58 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java
@@ -23,14 +23,6 @@ public interface ServerCacheManager {
*/
boolean localL2Caching();
- /**
- * Deprecated migrate to localL2Caching().
- */
- @Deprecated
- default boolean isLocalL2Caching() {
- return localL2Caching();
- }
-
/**
* Return all the cache regions.
*/
@@ -46,77 +38,36 @@ public interface ServerCacheManager {
*/
void enabledRegions(String regions);
- /**
- * Deprecated migrate to enabledRegions().
- */
- @Deprecated
- default void setEnabledRegions(String regions) {
- enabledRegions(regions);
- }
-
/**
* Enable or disable all the cache regions.
*/
void allRegionsEnabled(boolean enabled);
- /**
- * Deprecated migrate to allRegionsEnabled().
- */
- @Deprecated
- default void setAllRegionsEnabled(boolean enabled) {
- allRegionsEnabled(enabled);
- }
-
/**
* Return the cache region by name. Typically, to enable or disable the region.
*/
ServerCacheRegion region(String name);
- @Deprecated
- default ServerCacheRegion getRegion(String name) {
- return region(name);
- }
-
/**
* Return the cache for mapping natural keys to id values.
*/
ServerCache naturalKeyCache(Class> beanType);
- @Deprecated
- default ServerCache getNaturalKeyCache(Class> beanType) {
- return naturalKeyCache(beanType);
- }
-
/**
* Return the cache for beans of a particular type.
*/
ServerCache beanCache(Class> beanType);
- @Deprecated
- default ServerCache getBeanCache(Class> beanType) {
- return beanCache(beanType);
- }
-
/**
* Return the cache for associated many properties of a bean type.
*/
ServerCache collectionIdsCache(Class> beanType, String propertyName);
- @Deprecated
- default ServerCache getCollectionIdsCache(Class> beanType, String propertyName) {
- return collectionIdsCache(beanType, propertyName);
- }
-
/**
* Return the cache for query results of a particular type of bean.
*/
ServerCache queryCache(Class> beanType);
- @Deprecated
- default ServerCache getQueryCache(Class> beanType) {
- return queryCache(beanType);
- }
-
/**
* This clears both the bean and query cache for a given type.
*/
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java b/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java
index c798b5a35..5cfd3c595 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java
@@ -10,14 +10,6 @@ public interface ServerCacheRegion {
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return true if the cache region is enabled.
*/
diff --git a/ebean-api/src/main/java/io/ebean/cache/TenantAwareCache.java b/ebean-api/src/main/java/io/ebean/cache/TenantAwareCache.java
new file mode 100644
index 000000000..42e22a950
--- /dev/null
+++ b/ebean-api/src/main/java/io/ebean/cache/TenantAwareCache.java
@@ -0,0 +1,104 @@
+package io.ebean.cache;
+
+import io.ebean.meta.MetricVisitor;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * A ServerCache proxy that is tenant aware.
+ */
+public final class TenantAwareCache implements ServerCache {
+
+ private final ServerCache delegate;
+ private final TenantAwareKey tenantAwareKey;
+
+ /**
+ * Create given the TenantAwareKey and delegate cache to proxy to.
+ *
+ * @param delegate The cache to proxy to
+ * @param tenantAwareKey Provides tenant aware keys to use in the cache
+ */
+ public TenantAwareCache(ServerCache delegate, TenantAwareKey tenantAwareKey) {
+ this.delegate = delegate;
+ this.tenantAwareKey = tenantAwareKey;
+ }
+
+ /**
+ * Return the underlying ServerCache that is being delegated to.
+ */
+ @Override
+ public T unwrap(Class cls) {
+ return (T)delegate;
+ }
+
+ @Override
+ public void visit(MetricVisitor visitor) {
+ delegate.visit(visitor);
+ }
+
+ private Object key(Object key) {
+ return tenantAwareKey.key(key);
+ }
+
+ @Override
+ public Object get(Object id) {
+ return delegate.get(key(id));
+ }
+
+ @Override
+ public void put(Object id, Object value) {
+ delegate.put(key(id), value);
+ }
+
+ @Override
+ public void remove(Object id) {
+ delegate.remove(key(id));
+ }
+
+ @Override
+ public void clear() {
+ delegate.clear();
+ }
+
+ @Override
+ public int size() {
+ return delegate.size();
+ }
+
+ @Override
+ public int hitRatio() {
+ return delegate.hitRatio();
+ }
+
+ @Override
+ public ServerCacheStatistics statistics(boolean reset) {
+ return delegate.statistics(reset);
+ }
+
+ @Override
+ public Map getAll(Set keys) {
+ Map keyMapping = new HashMap<>(keys.size());
+ keys.forEach(k -> keyMapping.put(key(k), k));
+ Map tmp = delegate.getAll(keyMapping.keySet());
+ Map ret = new HashMap<>(keys.size());
+ // unwrap tenant info here
+ tmp.forEach((k,v)-> ret.put(((TenantAwareKey.CacheKey) k).key, v));
+ return ret;
+ }
+
+ @Override
+ public void putAll(Map keyValues) {
+ Map tmp = new HashMap<>();
+ keyValues.forEach((k, v) -> tmp.put(key(k), v));
+ delegate.putAll(tmp);
+ }
+
+ @Override
+ public void removeAll(Set keys) {
+ delegate.removeAll(keys.stream().map(this::key).collect(Collectors.toSet()));
+ }
+
+}
diff --git a/ebean-api/src/main/java/io/ebean/common/BeanList.java b/ebean-api/src/main/java/io/ebean/common/BeanList.java
index ba0adca99..0a04eb472 100644
--- a/ebean-api/src/main/java/io/ebean/common/BeanList.java
+++ b/ebean-api/src/main/java/io/ebean/common/BeanList.java
@@ -1,9 +1,6 @@
package io.ebean.common;
-import io.ebean.bean.BeanCollection;
-import io.ebean.bean.BeanCollectionAdd;
-import io.ebean.bean.BeanCollectionLoader;
-import io.ebean.bean.EntityBean;
+import io.ebean.bean.*;
import java.io.Serializable;
import java.util.ArrayList;
@@ -47,6 +44,11 @@ public final class BeanList extends AbstractBeanCollection implements List
super(loader, ownerBean, propertyName);
}
+ @Override
+ public void toString(ToStringBuilder builder) {
+ builder.addCollection(list);
+ }
+
@Override
public void reset(EntityBean ownerBean, String propertyName) {
this.ownerBean = ownerBean;
@@ -191,18 +193,11 @@ public final class BeanList extends AbstractBeanCollection implements List
@Override
public String toString() {
- StringBuilder sb = new StringBuilder(50);
- sb.append("BeanList ");
- if (isReadOnly()) {
- sb.append("readOnly ");
- }
if (list == null) {
- sb.append("deferred ");
+ return "BeanList";
} else {
- sb.append("size[").append(list.size()).append("] ");
- sb.append("list").append(list);
+ return list.toString();
}
- return sb.toString();
}
/**
diff --git a/ebean-api/src/main/java/io/ebean/common/BeanMap.java b/ebean-api/src/main/java/io/ebean/common/BeanMap.java
index 643febc14..454642d55 100644
--- a/ebean-api/src/main/java/io/ebean/common/BeanMap.java
+++ b/ebean-api/src/main/java/io/ebean/common/BeanMap.java
@@ -3,6 +3,7 @@ package io.ebean.common;
import io.ebean.bean.BeanCollection;
import io.ebean.bean.BeanCollectionLoader;
import io.ebean.bean.EntityBean;
+import io.ebean.bean.ToStringBuilder;
import java.util.Collection;
import java.util.Collections;
@@ -40,6 +41,19 @@ public final class BeanMap extends AbstractBeanCollection implements Ma
super(ebeanServer, ownerBean, propertyName);
}
+ @Override
+ public void toString(ToStringBuilder builder) {
+ if (map == null || map.isEmpty()) {
+ builder.addRaw("{}");
+ } else {
+ builder.addRaw("{");
+ for (Entry entry : map.entrySet()) {
+ builder.add(String.valueOf(entry.getKey()), entry.getValue());
+ }
+ builder.addRaw("}");
+ }
+ }
+
@Override
public void reset(EntityBean ownerBean, String propertyName) {
this.ownerBean = ownerBean;
@@ -183,27 +197,20 @@ public final class BeanMap extends AbstractBeanCollection implements Ma
@Override
public String toString() {
- StringBuilder sb = new StringBuilder(50);
- sb.append("BeanMap ");
- if (isReadOnly()) {
- sb.append("readOnly ");
- }
if (map == null) {
- sb.append("deferred ");
+ return "BeanMap";
} else {
- sb.append("size[").append(map.size()).append("]");
- sb.append(" map").append(map);
+ return map.toString();
}
- return sb.toString();
}
/**
- * Equal if obj is a Map and equal in a Map sense.
+ * Equal if object is a Map and equal in a Map sense.
*/
@Override
- public boolean equals(Object obj) {
+ public boolean equals(Object object) {
init();
- return map.equals(obj);
+ return map.equals(object);
}
@Override
diff --git a/ebean-api/src/main/java/io/ebean/common/BeanSet.java b/ebean-api/src/main/java/io/ebean/common/BeanSet.java
index 0c6f0c508..683b2c1f9 100644
--- a/ebean-api/src/main/java/io/ebean/common/BeanSet.java
+++ b/ebean-api/src/main/java/io/ebean/common/BeanSet.java
@@ -1,9 +1,6 @@
package io.ebean.common;
-import io.ebean.bean.BeanCollection;
-import io.ebean.bean.BeanCollectionAdd;
-import io.ebean.bean.BeanCollectionLoader;
-import io.ebean.bean.EntityBean;
+import io.ebean.bean.*;
import java.io.Serializable;
import java.util.Collection;
@@ -41,6 +38,11 @@ public final class BeanSet extends AbstractBeanCollection implements Set extends AbstractBeanCollection implements Set";
} else {
- sb.append("size[").append(set.size()).append("]");
- sb.append(" set").append(set);
+ return set.toString();
}
- return sb.toString();
}
/**
diff --git a/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java b/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java
index 13f0a1ed2..09cd6fa73 100644
--- a/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java
+++ b/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java
@@ -25,14 +25,6 @@ public class QueryPlanCapture {
return database;
}
- /**
- * Deprecated migrate to database().
- */
- @Deprecated
- public Database getDatabase() {
- return database;
- }
-
/**
* Return the captured query plans.
*/
@@ -40,11 +32,4 @@ public class QueryPlanCapture {
return plans;
}
- /**
- * Deprecated migrate to plans().
- */
- @Deprecated
- public List getPlans() {
- return plans;
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
index cdaa2d7fa..da6a5dacc 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
@@ -10,11 +10,4 @@ public interface MetaCountMetric extends MetaMetric {
*/
long count();
- /**
- * Migrate to count()
- */
- @Deprecated
- default long getCount() {
- return count();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
index 671dc05c1..14a6566bb 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
@@ -10,11 +10,4 @@ public interface MetaMetric {
*/
String name();
- /**
- * Migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
index 1c9b5fe12..6d8cd8a07 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
@@ -10,40 +10,16 @@ public interface MetaQueryMetric extends MetaTimedMetric {
*/
Class> type();
- /**
- * Migrate to type().
- */
- @Deprecated
- default Class> getType() {
- return type();
- }
-
/**
* The label for the query (can be null).
*/
String label();
- /**
- * Migrate to label().
- */
- @Deprecated
- default String getLabel() {
- return label();
- }
-
/**
* The actual SQL of the query.
*/
String sql();
- /**
- * Migrate to sql().
- */
- @Deprecated
- default String getSql() {
- return sql();
- }
-
/**
* Return the hash of the plan.
*/
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
index f95f3248d..4d5d91ec6 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
@@ -11,67 +11,26 @@ public interface MetaTimedMetric extends MetaMetric {
*/
String location();
- /**
- * Migrate to location()
- */
- @Deprecated
- default String getLocation() {
- return location();
- }
-
/**
* Return the total count.
*/
long count();
- /**
- * Migrate to count()
- */
- @Deprecated
- default long getCount() {
- return count();
- }
-
/**
* Return the total execution time in micros.
*/
long total();
- /**
- * Migrate to total()
- */
- @Deprecated
- default long getTotal() {
- return total();
- }
-
/**
* Return the max execution time in micros.
*/
long max();
- /**
- * Migrate to max()
- */
- @Deprecated
- default long getMax() {
- return max();
- }
-
/**
* Return the mean execution time in micros.
*/
long mean();
-
- /**
- * Migrate to mean()
- */
- @Deprecated
- default long getMean() {
- return mean();
- }
-
/**
* Return true if this is the first metrics collection for this query.
*
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
index b8a50d85d..f9ca58c33 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
@@ -12,37 +12,14 @@ public interface ServerMetrics {
*/
List timedMetrics();
- /**
- * Migrate to timedMetrics().
- */
- @Deprecated
- default List getTimedMetrics() {
- return timedMetrics();
- }
-
/**
* Return the query metrics.
*/
List queryMetrics();
- /**
- * Migrate to queryMetrics().
- */
- @Deprecated
- default List getQueryMetrics() {
- return queryMetrics();
- }
-
/**
* Return the Counter metrics.
*/
List countMetrics();
- /**
- * Migrate to countMetrics().
- */
- @Deprecated
- default List getCountMetrics() {
- return countMetrics();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
index 7e42302c8..b2d43f470 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
@@ -19,6 +19,7 @@ public interface ServerMetricsAsJson {
/**
* Set the sort property - see SortMetric
+ *
* @see SortMetric
*/
ServerMetricsAsJson withSort(Comparator sortBy);
@@ -35,9 +36,9 @@ public interface ServerMetricsAsJson {
*/
ServerMetricsAsJson withHeader(boolean withHeader);
- /**
- * Collect and write metrics as JSON to the given buffer.
- */
+ /**
+ * Collect and write metrics as JSON to the given buffer.
+ */
void write(Appendable buffer);
/**
diff --git a/ebean-api/src/main/java/io/ebean/meta/SortMetric.java b/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
index 30104f1ff..5a20ee7c9 100644
--- a/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
@@ -5,7 +5,7 @@ import java.util.Comparator;
/**
* Comparator for timed metrics sorted by name and then count.
*/
-public class SortMetric {
+public final class SortMetric {
public static final Comparator COUNT_NAME = new CountName();
diff --git a/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java b/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java
index 89603ee56..25ab9716e 100644
--- a/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java
+++ b/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java
@@ -6,7 +6,7 @@ import java.util.ServiceLoader;
/**
* Lookup MetricFactory service.
*/
-class MetricServiceProvider {
+final class MetricServiceProvider {
private static final MetricFactory metricFactory = init();
diff --git a/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java b/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java
index 07a9ca6d2..24999ce0e 100644
--- a/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java
+++ b/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java
@@ -12,14 +12,6 @@ public interface QueryPlanMetric {
*/
TimedMetric metric();
- /**
- * Deprecated migrate to metric().
- */
- @Deprecated
- default TimedMetric getMetric() {
- return metric();
- }
-
/**
* Visit the underlying metric.
*/
diff --git a/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java b/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java
index 77a8f72d9..55e7c146b 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java
@@ -16,28 +16,12 @@ public interface BeanDocType {
/**
* Return the doc store index type for this bean type.
*/
- default String indexType() {
- return getIndexType();
- }
-
- /**
- * Deprecated migrate to indexType().
- */
- @Deprecated
- String getIndexType();
+ String indexType();
/**
* Return the doc store index name for this bean type.
*/
- default String indexName() {
- return getIndexName();
- }
-
- /**
- * Deprecated migrate to indexName().
- */
- @Deprecated
- String getIndexName();
+ String indexName();
/**
* Apply the appropriate fetch path to the query such that the query returns beans matching
@@ -48,29 +32,13 @@ public interface BeanDocType {
/**
* Return the FetchPath for the embedded document.
*/
- default FetchPath embedded(String path) {
- return getEmbedded(path);
- }
-
- /**
- * Deprecated migrate to embedded().
- */
- @Deprecated
- FetchPath getEmbedded(String path);
+ FetchPath embedded(String path);
/**
* For embedded 'many' properties we need a FetchPath relative to the root which is used to
* build and replace the embedded list.
*/
- default FetchPath embeddedManyRoot(String path) {
- return getEmbeddedManyRoot(path);
- }
-
- /**
- * Deprecated migrate to embeddedManyRoot().
- */
- @Deprecated
- FetchPath getEmbeddedManyRoot(String path);
+ FetchPath embeddedManyRoot(String path);
/**
* Return a 'raw' property mapped for the given property.
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 e7f324a56..762f077f4 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
@@ -22,53 +22,21 @@ public interface BeanType {
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return the full name of the bean type.
*/
String fullName();
- /**
- * Deprecated migrate to fullName().
- */
- @Deprecated
- default String getFullName() {
- return fullName();
- }
-
/**
* Return the class type this BeanDescriptor describes.
*/
Class type();
- /**
- * Deprecated migrate to type().
- */
- @Deprecated
- default Class getBeanType() {
- return type();
- }
-
/**
* Return the type bean for an OneToMany or ManyToOne or ManyToMany property.
*/
BeanType> beanTypeAtPath(String propertyName);
- /**
- * Deprecated migrate to beanTypeAtPath().
- */
- @Deprecated
- default BeanType> getBeanTypeAtPath(String propertyName) {
- return beanTypeAtPath(propertyName);
- }
-
/**
* Return all the properties for this bean type.
*/
@@ -79,53 +47,21 @@ public interface BeanType {
*/
Property idProperty();
- /**
- * Deprecated migrate to idProperty().
- */
- @Deprecated
- default Property getIdProperty() {
- return idProperty();
- }
-
/**
* Return the when modified property if there is one defined.
*/
Property whenModifiedProperty();
- /**
- * Deprecated migrate to idProperty().
- */
- @Deprecated
- default Property getWhenModifiedProperty() {
- return whenModifiedProperty();
- }
-
/**
* Return the when created property if there is one defined.
*/
Property whenCreatedProperty();
- /**
- * Deprecated migrate to idProperty().
- */
- @Deprecated
- default Property getWhenCreatedProperty() {
- return whenCreatedProperty();
- }
-
/**
* Return the Property to read values from a bean.
*/
Property property(String propertyName);
- /**
- * Deprecated migrate to property().
- */
- @Deprecated
- default Property getProperty(String propertyName) {
- return property(propertyName);
- }
-
/**
* Return the ExpressionPath for a given property path.
*
@@ -134,14 +70,6 @@ public interface BeanType {
*/
ExpressionPath expressionPath(String path);
- /**
- * Deprecated migrate to expressionPath().
- */
- @Deprecated
- default ExpressionPath getExpressionPath(String path) {
- return expressionPath(path);
- }
-
/**
* Return true if the property is a valid known property or path for the given bean type.
*/
@@ -177,14 +105,6 @@ public interface BeanType {
*/
String baseTable();
- /**
- * Deprecated migrate to baseTable().
- */
- @Deprecated
- default String getBaseTable() {
- return baseTable();
- }
-
/**
* Create a new instance of the bean.
*/
@@ -195,98 +115,36 @@ public interface BeanType {
*/
Object id(Object bean);
- /**
- * Deprecated migrate to id()
- */
- @Deprecated
- default Object beanId(Object bean) {
- return id(bean);
- }
-
- /**
- * Deprecated migrate to id()
- */
- @Deprecated
- Object getBeanId(T bean);
-
/**
* Set the id value to the bean.
*/
void setId(T bean, Object idValue);
- /**
- * Deprecated migrate to setId()
- */
- @Deprecated
- default void setBeanId(T bean, Object idValue) {
- setId(bean, idValue);
- }
-
/**
* Return the bean persist controller.
*/
BeanPersistController persistController();
- /**
- * Deprecated migrate to persistController()
- */
- @Deprecated
- default BeanPersistController getPersistController() {
- return persistController();
- }
-
/**
* Return the bean persist listener.
*/
BeanPersistListener persistListener();
- /**
- * Deprecated migrate to persistListener()
- */
- @Deprecated
- default BeanPersistListener getPersistListener() {
- return persistListener();
- }
-
/**
* Return the beanFinder. Usually null unless overriding the finder.
*/
BeanFindController findController();
- /**
- * Deprecated migrate to findController()
- */
- @Deprecated
- default BeanFindController getFindController() {
- return findController();
- }
-
/**
* Return the BeanQueryAdapter or null if none is defined.
*/
BeanQueryAdapter queryAdapter();
- /**
- * Deprecated migrate to queryAdapter()
- */
- @Deprecated
- default BeanQueryAdapter getQueryAdapter() {
- return queryAdapter();
- }
-
/**
* Return the identity generation type.
*/
IdType idType();
- /**
- * Deprecated migrate to idType()
- */
- @Deprecated
- default IdType getIdType() {
- return idType();
- }
-
/**
* Return true if this bean type has doc store backing.
*/
@@ -301,27 +159,11 @@ public interface BeanType {
*/
DocMapping docMapping();
- /**
- * Deprecated migrate to docMapping()
- */
- @Deprecated
- default DocMapping getDocMapping() {
- return docMapping();
- }
-
/**
* Return the doc store queueId for this bean type.
*/
String docStoreQueueId();
- /**
- * Deprecated migrate to docStoreQueueId()
- */
- @Deprecated
- default String getDocStoreQueueId() {
- return docStoreQueueId();
- }
-
/**
* Return the doc store support for this bean type.\
*/
@@ -353,27 +195,11 @@ public interface BeanType {
*/
List> inheritanceChildren();
- /**
- * Deprecated migrate to inheritanceChildren()
- */
- @Deprecated
- default List> getInheritanceChildren() {
- return inheritanceChildren();
- }
-
/**
* Returns the parent in inheritance hierarchy
*/
BeanType> inheritanceParent();
- /**
- * Deprecated migrate to inheritanceParent()
- */
- @Deprecated
- default BeanType> getInheritanceParent() {
- return inheritanceParent();
- }
-
/**
* Visit all children recursively
*/
@@ -384,14 +210,6 @@ public interface BeanType {
*/
String discColumn();
- /**
- * Deprecated migrate to discColumn()
- */
- @Deprecated
- default String getDiscColumn() {
- return discColumn();
- }
-
/**
* Create a bean given the discriminator value.
*/
diff --git a/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java b/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java
index b7675f87b..29a5abdab 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java
@@ -39,14 +39,6 @@ public interface ExpressionPath {
*/
StringParser stringParser();
- /**
- * Deprecated migrate to stringParser().
- */
- @Deprecated
- default StringParser getStringParser() {
- return stringParser();
- }
-
/**
* For DateTime capable scalar types convert the long systemTimeMillis into
* an appropriate java time (Date,Timestamp,Time,Calendar, JODA type etc).
@@ -64,14 +56,6 @@ public interface ExpressionPath {
*/
int jdbcType();
- /**
- * Deprecated migrate to jdbcType().
- */
- @Deprecated
- default int getJdbcType() {
- return jdbcType();
- }
-
/**
* Return true if this is an ManyToOne or OneToOne associated bean property.
*/
@@ -85,50 +69,19 @@ public interface ExpressionPath {
*/
String assocIdExpression(String propName, String bindOperator);
- /**
- * Deprecated migrate to assocIdExpression().
- */
- @Deprecated
- default String getAssocIdExpression(String propName, String bindOperator) {
- return assocIdExpression(propName, bindOperator);
- }
-
/**
* Return the Id values for the given bean value.
*/
Object[] assocIdValues(EntityBean bean);
- /**
- * Deprecated migrate to assocIdValues().
- */
- @Deprecated
- default Object[] getAssocIdValues(EntityBean bean) {
- return assocIdValues(bean);
- }
-
/**
* Return the underlying bean property.
*/
Property property();
- /**
- * Deprecated migrate to property().
- */
- @Deprecated
- default Property getProperty() {
- return property();
- }
-
/**
* The ElPrefix plus name.
*/
String elName();
- /**
- * Deprecated migrate to elName().
- */
- @Deprecated
- default String getElName() {
- return elName();
- }
}
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 d37fa2959..81a1fc115 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/Property.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/Property.java
@@ -10,40 +10,16 @@ public interface Property {
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return the type of the property.
*/
Class> type();
- /**
- * Deprecated migrate to type().
- */
- @Deprecated
- default Class> getPropertyType() {
- return type();
- }
-
/**
* Return the value of the property on the given bean.
*/
Object value(Object bean);
- /**
- * Deprecated migrate to value().
- */
- @Deprecated
- default Object getVal(Object bean) {
- return value(bean);
- }
-
/**
* Return true if this is a OneToMany or ManyToMany property.
*/
diff --git a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java
index 709019158..580a00b9e 100644
--- a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java
+++ b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java
@@ -10,7 +10,7 @@ import java.util.Set;
/**
* Annotation utility methods to find annotations.
*/
-public class AnnotationUtil {
+public final class AnnotationUtil {
/**
* Determine if the supplied {@link Annotation} is defined in the core JDK {@code java.lang.annotation} package.
diff --git a/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java b/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java
index c58c78200..f32cddf8b 100644
--- a/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java
+++ b/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java
@@ -1,6 +1,6 @@
package io.ebean.util;
-public class CamelCaseHelper {
+public final class CamelCaseHelper {
/**
* To underscore from camel case using digits compressed true and force upper case false.
diff --git a/ebean-api/src/main/java/io/ebean/util/IOUtils.java b/ebean-api/src/main/java/io/ebean/util/IOUtils.java
index e4f437e10..2dd54e73a 100644
--- a/ebean-api/src/main/java/io/ebean/util/IOUtils.java
+++ b/ebean-api/src/main/java/io/ebean/util/IOUtils.java
@@ -16,7 +16,7 @@ import java.nio.charset.StandardCharsets;
* Utilities for IO. It uses UTF-8 as encoding when reading/writing and uses
* buffered IO for better performance.
*/
-public class IOUtils {
+public final class IOUtils {
/**
* Read from stream as UTF-8.
diff --git a/ebean-api/src/main/java/io/ebean/util/JdbcClose.java b/ebean-api/src/main/java/io/ebean/util/JdbcClose.java
index e78be2376..a1d04536e 100644
--- a/ebean-api/src/main/java/io/ebean/util/JdbcClose.java
+++ b/ebean-api/src/main/java/io/ebean/util/JdbcClose.java
@@ -11,7 +11,7 @@ import java.sql.Statement;
/**
* Utility for closing raw Jdbc resources.
*/
-public class JdbcClose {
+public final class JdbcClose {
private static final Logger log = LoggerFactory.getLogger("io.ebean");
diff --git a/ebean-api/src/main/java/io/ebean/util/SplitName.java b/ebean-api/src/main/java/io/ebean/util/SplitName.java
index 3e1e9951e..3a6cd4f2f 100644
--- a/ebean-api/src/main/java/io/ebean/util/SplitName.java
+++ b/ebean-api/src/main/java/io/ebean/util/SplitName.java
@@ -3,7 +3,7 @@ package io.ebean.util;
/**
* Helper for dot notation property paths.
*/
-public class SplitName {
+public final class SplitName {
private static final char PERIOD = '.';
diff --git a/ebean-api/src/main/java/io/ebean/util/StringHelper.java b/ebean-api/src/main/java/io/ebean/util/StringHelper.java
index b35deb36e..4268288f6 100644
--- a/ebean-api/src/main/java/io/ebean/util/StringHelper.java
+++ b/ebean-api/src/main/java/io/ebean/util/StringHelper.java
@@ -7,7 +7,7 @@ import java.util.regex.Pattern;
/**
* Utility String class that supports String manipulation functions.
*/
-public class StringHelper {
+public final class StringHelper {
private static final Pattern SPLIT_NAMES = Pattern.compile("[\\s,;]+");
diff --git a/ebean-api/src/test/java/io/ebean/bean/ToStringBuilderTest.java b/ebean-api/src/test/java/io/ebean/bean/ToStringBuilderTest.java
new file mode 100644
index 000000000..99f125ee5
--- /dev/null
+++ b/ebean-api/src/test/java/io/ebean/bean/ToStringBuilderTest.java
@@ -0,0 +1,223 @@
+package io.ebean.bean;
+
+import io.ebean.common.BeanList;
+import io.ebean.common.BeanMap;
+import io.ebean.common.BeanSet;
+import org.junit.jupiter.api.Test;
+
+import java.util.*;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class ToStringBuilderTest {
+
+ @Test
+ void basic() {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.start(new Object());
+ builder.end();
+ assertThat(builder.toString()).isEqualTo("Object@0()");
+ }
+
+ @Test
+ void fields() {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.start(new Object());
+ builder.add("a", 1);
+ builder.add("b", "B");
+ builder.end();
+ assertThat(builder.toString()).isEqualTo("Object@0(a:1, b:B)");
+ }
+
+ @Test
+ void max100Beans_expect_noMoreContentAfterMax100() {
+
+ String loop100 = addLoopForMaxBeans(100);
+ String loop101 = addLoopForMaxBeans(101);
+ String loop900 = addLoopForMaxBeans(900);
+
+ assertThat(loop100).isEqualTo(loop101);
+ assertThat(loop101).isEqualTo(loop900);
+ }
+
+ private String addLoopForMaxBeans(int loopMax) {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.start(new Object());
+ for (int i = 0; i <= loopMax; i++) {
+ addForMax(builder, i);
+ }
+ builder.end();
+ return builder.toString();
+ }
+
+ private void addForMax(ToStringBuilder builder, int i) {
+ builder.add("c", new B(i));
+ }
+
+ @Test
+ void maxContent_expect_noMoreContentAfterMax2000() {
+ String loop23 = addContentLoop(23);
+ String loop24 = addContentLoop(24);
+ String loop25 = addContentLoop(25);
+
+ assertThat(loop23).isEqualTo(loop24);
+ assertThat(loop23).isEqualTo(loop25);
+ }
+
+ private String addContentLoop(int loopMax) {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.start(new Object());
+ for (int i = 0; i <= loopMax; i++) {
+ addForMaxContent(builder, i);
+ }
+ builder.end();
+ return builder.toString();
+ }
+
+ private void addForMaxContent(ToStringBuilder builder, int i) {
+ builder.add("someContentThatAddsUp", new Recurse(i, "SomeContentThatAddsUp_SomeContentThatAddsUp!!"));
+ }
+
+ @Test
+ void add_referenceBeanCollection_expect_nothingAdded() {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.add("ref", new BeanList<>(null));
+ assertThat(builder.toString()).isEqualTo("");
+ }
+
+ @Test
+ void addCollection_some() {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.addCollection( new BeanList<>(List.of("A","B")));
+ assertThat(builder.toString()).isEqualTo("[A, B]");
+ }
+
+ @Test
+ void addCollection_null() {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.addCollection(null);
+ assertThat(builder.toString()).isEqualTo("[]");
+ }
+
+ @Test
+ void addCollection_empty() {
+ ToStringBuilder builder = new ToStringBuilder();
+ builder.addCollection(Collections.emptyList());
+ assertThat(builder.toString()).isEqualTo("[]");
+ }
+
+ @Test
+ void flatBean() {
+ Recurse instance0 = new Recurse(42, "java");
+ assertThat(instance0.toString()).isEqualTo("Recurse@0(id:42, nm:java)");
+ }
+
+ @Test
+ void recursive_expect_reference() {
+ Recurse instance0 = new Recurse(42, "java");
+ instance0.other = instance0;
+
+ assertThat(instance0.toString()).isEqualTo("Recurse@0(id:42, nm:java, other:Recurse@0)");
+ }
+
+ @Test
+ void notRecursive() {
+ Recurse instance0 = new Recurse(42, "java");
+ instance0.other = new Recurse(43, "jvm");
+ assertThat(instance0.toString()).isEqualTo("Recurse@0(id:42, nm:java, other:Recurse@1(id:43, nm:jvm))");
+ }
+
+ @Test
+ void beanList_null_empty() {
+ assertThat(toStringFor(new BeanList(null))).isEqualTo("[]");
+ assertThat(toStringFor(new BeanList(Collections.emptyList()))).isEqualTo("[]");
+ }
+
+ @Test
+ void beanSet_null_empty() {
+ assertThat(toStringFor(new BeanSet(null))).isEqualTo("[]");
+ assertThat(toStringFor(new BeanSet(Collections.emptySet()))).isEqualTo("[]");
+ }
+
+ @Test
+ void beanMap_null_empty() {
+ assertThat(toStringFor(new BeanMap(null))).isEqualTo("{}");
+ assertThat(toStringFor(new BeanMap(Collections.emptyMap()))).isEqualTo("{}");
+ }
+
+ @Test
+ void beanList_some() {
+ BeanList list = new BeanList<>(List.of(new Recurse(1, "a"), new Recurse(2, "b")));
+ assertThat(toStringFor(list)).isEqualTo("[Recurse@1(id:1, nm:a), Recurse@2(id:2, nm:b)]");
+ }
+
+ @Test
+ void beanSet_some() {
+ BeanSet list = new BeanSet<>(new LinkedHashSet<>(List.of(new Recurse(1, "a"), new Recurse(2, "b"))));
+ assertThat(toStringFor(list)).isEqualTo("[Recurse@1(id:1, nm:a), Recurse@2(id:2, nm:b)]");
+ }
+
+ @Test
+ void beanMap_some() {
+ Map under = new LinkedHashMap<>();
+ under.put("a", new Recurse(1, "a"));
+ under.put("b", new Recurse(2, "b"));
+ BeanMap list = new BeanMap<>(under);
+ assertThat(toStringFor(list)).isEqualTo("{a:Recurse@1(id:1, nm:a), b:Recurse@2(id:2, nm:b)}");
+ }
+
+ private String toStringFor(ToStringAware aware) {
+ ToStringBuilder builder = new ToStringBuilder();
+ aware.toString(builder);
+ return builder.toString();
+ }
+
+ static final class Recurse implements ToStringAware {
+
+ final int id;
+ final String nm;
+ Recurse other;
+
+ Recurse(int id, String nm) {
+ this.id = id;
+ this.nm = nm;
+ }
+
+ public String toString() {
+ ToStringBuilder builder = new ToStringBuilder();
+ toString(builder);
+ return builder.toString();
+ }
+
+ @Override
+ public void toString(ToStringBuilder builder) {
+ builder.start(this);
+ builder.add("id", id);
+ builder.add("nm", nm);
+ builder.add("other", other);
+ builder.end();
+ }
+ }
+
+ static final class B implements ToStringAware {
+
+ final int id;
+
+ B(int id) {
+ this.id = id;
+ }
+
+ public String toString() {
+ ToStringBuilder builder = new ToStringBuilder();
+ toString(builder);
+ return builder.toString();
+ }
+
+ @Override
+ public void toString(ToStringBuilder builder) {
+ builder.start(this);
+ builder.add("b", id);
+ builder.end();
+ }
+ }
+}
diff --git a/ebean-api/src/test/java/io/ebean/cache/TenantAwareCacheTest.java b/ebean-api/src/test/java/io/ebean/cache/TenantAwareCacheTest.java
new file mode 100644
index 000000000..4bffa2d00
--- /dev/null
+++ b/ebean-api/src/test/java/io/ebean/cache/TenantAwareCacheTest.java
@@ -0,0 +1,113 @@
+package io.ebean.cache;
+
+import io.ebean.cache.TenantAwareKey.CacheKey;
+import io.ebean.config.CurrentTenantProvider;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class TenantAwareCacheTest {
+
+ ServerCache serverCache;
+ TenantAwareCache cache;
+
+ TenantAwareCacheTest() {
+ TenantAwareKey key = new TenantAwareKey(new TenantProv());
+ this.serverCache = new Cache();
+ this.cache = new TenantAwareCache(serverCache, key);
+ }
+
+ @Test
+ void put_get_remove() {
+ cache.put("A", "a");
+ Object val = cache.get("A");
+ assertThat(val).isEqualTo("a");
+
+ CacheKey cacheKey = new CacheKey("A", 42);
+ Object val2 = serverCache.get(cacheKey);
+ assertThat(val2).isEqualTo("a");
+
+ cache.put("B", "bb");
+ assertThat(cache.size()).isEqualTo(2);
+ cache.remove("A");
+ assertThat(cache.get("A")).isNull();
+ assertThat(cache.size()).isEqualTo(1);
+
+ cache.clear();
+ assertThat(cache.size()).isEqualTo(0);
+ assertThat(cache.get("B")).isNull();
+ }
+
+ @Test
+ void putAll_getAll_removeAll() {
+ Map map = new HashMap<>();
+ map.put("A", "a");
+ map.put("B", "b");
+ map.put("C", "c");
+
+ cache.putAll(map);
+ assertThat(cache.size()).isEqualTo(3);
+ assertThat(cache.get("A")).isEqualTo("a");
+ assertThat(serverCache.get(new CacheKey("A", 42))).isEqualTo("a");
+
+
+ Map result = cache.getAll(Set.of("A", "B", "C", "D"));
+ assertThat(result).hasSize(3);
+ assertThat(result).containsOnlyKeys("A", "B", "C");
+ assertThat(result.values()).containsOnly("a", "b", "c");
+
+ cache.removeAll(Set.of("A", "C", "D"));
+ assertThat(cache.size()).isEqualTo(1);
+
+ assertThat(cache.get("B")).isEqualTo("b");
+ assertThat(serverCache.get(new CacheKey("B", 42))).isEqualTo("b");
+
+ cache.remove("B");
+ assertThat(cache.size()).isEqualTo(0);
+ }
+
+
+ static class TenantProv implements CurrentTenantProvider {
+
+ @Override
+ public Object currentId() {
+ return 42;
+ }
+ }
+
+ static class Cache implements ServerCache {
+
+ Map map = new ConcurrentHashMap<>();
+
+ @Override
+ public Object get(Object id) {
+ return map.get(id);
+ }
+
+ @Override
+ public void put(Object id, Object value) {
+ map.put(id, value);
+ }
+
+ @Override
+ public void remove(Object id) {
+ map.remove(id);
+ }
+
+ @Override
+ public void clear() {
+ map.clear();
+ }
+
+ @Override
+ public int size() {
+ return map.size();
+ }
+
+ }
+}
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/DatabaseConfigTest.java b/ebean-api/src/test/java/io/ebean/config/DatabaseConfigTest.java
similarity index 96%
rename from ebean-test/src/test/java/io/ebean/xtest/config/DatabaseConfigTest.java
rename to ebean-api/src/test/java/io/ebean/config/DatabaseConfigTest.java
index 3568595b0..6b17cdc84 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/DatabaseConfigTest.java
+++ b/ebean-api/src/test/java/io/ebean/config/DatabaseConfigTest.java
@@ -1,4 +1,4 @@
-package io.ebean.xtest.config;
+package io.ebean.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.ebean.annotation.MutationDetection;
@@ -17,11 +17,10 @@ import java.util.Properties;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
-public class DatabaseConfigTest {
+class DatabaseConfigTest {
@Test
- public void testLoadFromEbeanProperties() {
-
+ void testLoadFromEbeanProperties() {
DatabaseConfig config = new DatabaseConfig();
config.loadFromProperties();
@@ -30,8 +29,7 @@ public class DatabaseConfigTest {
}
@Test
- public void evalPropertiesInput() {
-
+ void evalPropertiesInput() {
String home = System.getProperty("user.home");
String fileSeparator = System.getProperty("file.separator");
@@ -46,8 +44,7 @@ public class DatabaseConfigTest {
}
@Test
- public void testLoadWithProperties() {
-
+ void testLoadWithProperties() {
DatabaseConfig config = new DatabaseConfig();
config.setPersistBatch(PersistBatch.NONE);
config.setPersistBatchOnCascade(PersistBatch.NONE);
@@ -154,8 +151,7 @@ public class DatabaseConfigTest {
}
@Test
- public void test_defaults() {
-
+ void test_defaults() {
DatabaseConfig config = new DatabaseConfig();
assertTrue(config.isIdGeneratorAutomatic());
assertTrue(config.isDefaultServer());
@@ -186,8 +182,7 @@ public class DatabaseConfigTest {
}
@Test
- public void test_putServiceObject() {
-
+ void test_putServiceObject() {
ObjectMapper objectMapper = new ObjectMapper();
DatabaseConfig config = new DatabaseConfig();
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 5add7162d..b19e9e84b 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -26,7 +26,7 @@
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
@@ -55,7 +55,7 @@
io.ebean
ebean-platform-h2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -70,7 +70,7 @@
true
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.0
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index 8399a76bb..4e1d40ef0 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean bom
@@ -71,88 +71,88 @@
io.ebean
ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core-type
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-ddl-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-externalmapping-xml
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-autotune
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
querybean-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
io.ebean
kotlin-querybean-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
io.ebean
ebean-test
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-postgis
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-redis
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index 5d5e93049..bfc7a9b9a 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-core-type
@@ -16,7 +16,7 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index 081898f78..5b8f5aba8 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-core
@@ -41,19 +41,19 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core-type
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-externalmapping-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -144,21 +144,21 @@
io.ebean
ebean-platform-h2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-platform-postgres
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-platform-sqlserver
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java
index 298b856df..31fa0e19b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java
@@ -2,14 +2,7 @@ package io.ebeaninternal.server.cache;
import io.ebeaninternal.server.deploy.BeanDescriptor;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
/**
* List of changes to be applied to L2 cache.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
index 6d632acc3..ad3faa749 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
@@ -3,12 +3,7 @@ package io.ebeaninternal.server.cache;
import io.ebean.annotation.Cache;
import io.ebean.annotation.CacheBeanTuning;
import io.ebean.annotation.CacheQueryTuning;
-import io.ebean.cache.QueryCacheEntryValidate;
-import io.ebean.cache.ServerCache;
-import io.ebean.cache.ServerCacheConfig;
-import io.ebean.cache.ServerCacheFactory;
-import io.ebean.cache.ServerCacheOptions;
-import io.ebean.cache.ServerCacheType;
+import io.ebean.cache.*;
import io.ebean.config.CurrentTenantProvider;
import io.ebean.meta.MetricVisitor;
import io.ebean.util.AnnotationUtil;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
index ebd086117..ae3a297b3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
@@ -3,7 +3,6 @@ package io.ebeaninternal.server.cache;
import io.ebean.BackgroundExecutor;
import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheStatistics;
-import io.ebean.cache.TenantAwareKey;
import io.ebean.meta.MetricVisitor;
import io.ebean.metric.CountMetric;
import io.ebean.metric.MetricFactory;
@@ -12,11 +11,7 @@ import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.lang.ref.SoftReference;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.TimeUnit;
/**
@@ -52,14 +47,12 @@ public class DefaultServerCache implements ServerCache {
private final int trimFrequency;
private final int maxIdleSecs;
private final int maxSecsToLive;
- private final TenantAwareKey tenantAwareKey;
public DefaultServerCache(DefaultServerCacheConfig config) {
this.name = config.getName();
this.shortName = config.getShortName();
this.map = config.getMap();
this.maxSize = config.getMaxSize();
- this.tenantAwareKey = new TenantAwareKey(config.getTenantProvider());
this.maxIdleSecs = config.getMaxIdleSecs();
this.maxSecsToLive = config.getMaxSecsToLive();
this.trimFrequency = config.determineTrimFrequency();
@@ -92,7 +85,7 @@ public class DefaultServerCache implements ServerCache {
}
@Override
- public ServerCacheStatistics getStatistics(boolean reset) {
+ public ServerCacheStatistics statistics(boolean reset) {
ServerCacheStatistics cacheStats = new ServerCacheStatistics();
cacheStats.setCacheName(name);
cacheStats.setMaxSize(maxSize);
@@ -121,7 +114,7 @@ public class DefaultServerCache implements ServerCache {
}
@Override
- public int getHitRatio() {
+ public int hitRatio() {
long mc = missCount.get(false);
long hc = hitCount.get(false);
long totalCount = hc + mc;
@@ -152,19 +145,12 @@ public class DefaultServerCache implements ServerCache {
map.clear();
}
- /**
- * Return the tenant aware key.
- */
- protected Object key(Object id) {
- return tenantAwareKey.key(id);
- }
-
/**
* Return a value from the cache.
*/
@Override
- public Object get(Object id) {
- CacheEntry entry = getCacheEntry(id);
+ public Object get(Object key) {
+ CacheEntry entry = getCacheEntry(key);
if (entry == null) {
missCount.increment();
return null;
@@ -184,8 +170,8 @@ public class DefaultServerCache implements ServerCache {
/**
* Get the cache entry - override for query cache to validate dependent tables.
*/
- protected CacheEntry getCacheEntry(Object id) {
- final SoftReference ref = map.get(key(id));
+ protected CacheEntry getCacheEntry(Object key) {
+ final SoftReference ref = map.get(key);
return ref != null ? ref.get() : null;
}
@@ -198,8 +184,7 @@ public class DefaultServerCache implements ServerCache {
* Put a value into the cache.
*/
@Override
- public void put(Object id, Object value) {
- Object key = key(id);
+ public void put(Object key, Object value) {
map.put(key, new SoftReference<>(new CacheEntry(key, value)));
putCount.increment();
}
@@ -208,8 +193,8 @@ public class DefaultServerCache implements ServerCache {
* Remove an entry from the cache.
*/
@Override
- public void remove(Object id) {
- SoftReference entry = map.remove(key(id));
+ public void remove(Object key) {
+ SoftReference entry = map.remove(key);
if (entry != null && entry.get() != null) {
removeCount.increment();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java
index 2c329a62a..2e5c5dbcd 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java
@@ -3,7 +3,6 @@ package io.ebeaninternal.server.cache;
import io.ebean.cache.QueryCacheEntryValidate;
import io.ebean.cache.ServerCacheConfig;
import io.ebean.cache.ServerCacheOptions;
-import io.ebean.config.CurrentTenantProvider;
import io.ebeaninternal.server.cache.DefaultServerCache.CacheEntry;
import java.lang.ref.SoftReference;
@@ -34,10 +33,6 @@ public final class DefaultServerCacheConfig {
this.maxSize = options.getMaxSize();
}
- public CurrentTenantProvider getTenantProvider() {
- return config.getTenantProvider();
- }
-
public QueryCacheEntryValidate getQueryCacheEntryValidate() {
return config.getQueryCacheEntryValidate();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java
index eab615ed1..a847aa8e1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java
@@ -1,11 +1,7 @@
package io.ebeaninternal.server.cache;
import io.ebean.BackgroundExecutor;
-import io.ebean.cache.ServerCache;
-import io.ebean.cache.ServerCacheConfig;
-import io.ebean.cache.ServerCacheFactory;
-import io.ebean.cache.ServerCacheNotification;
-import io.ebean.cache.ServerCacheNotify;
+import io.ebean.cache.*;
/**
@@ -41,7 +37,7 @@ final class DefaultServerCacheFactory implements ServerCacheFactory {
if (executor != null) {
cache.periodicTrim(executor);
}
- return cache;
+ return config.tenantAware(cache);
}
@Override
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
index d3a652437..00f551da8 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
@@ -10,11 +10,7 @@ import io.ebeaninternal.server.deploy.DCacheRegion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* Manages the bean and query caches.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java
index 4f437eafc..942ffbb82 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java
@@ -27,8 +27,7 @@ public class DefaultServerQueryCache extends DefaultServerCache {
}
@Override
- protected CacheEntry getCacheEntry(Object id) {
- Object key = key(id);
+ protected CacheEntry getCacheEntry(Object key) {
final SoftReference ref = map.get(key);
CacheEntry entry = ref != null ? ref.get() : null;
if (entry == null) {
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 2f51eeffd..5fa876883 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
@@ -978,21 +978,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return new DefaultRelationalQuery(this, sql.trim());
}
- @Override
- public SqlQuery createSqlQuery(String sql) {
- return sqlQuery(sql);
- }
-
@Override
public SqlUpdate sqlUpdate(String sql) {
return new DefaultSqlUpdate(this, sql.trim());
}
- @Override
- public SqlUpdate createSqlUpdate(String sql) {
- return sqlUpdate(sql);
- }
-
@Override
public CallableSql createCallableSql(String sql) {
return new DefaultCallableSql(this, sql.trim());
@@ -1376,11 +1366,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Override
- public Stream findLargeStream(Query query, Transaction transaction) {
- return findStream(query, transaction);
- }
-
@Override
public Stream findStream(Query query, Transaction transaction) {
return toStream(findIterate(query, transaction));
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
index 756c5665f..d9023b356 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
@@ -261,16 +261,6 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
return this;
}
- @Override
- public SqlUpdate setParams(Object... values) {
- return setParameters(values);
- }
-
- @Override
- public SqlUpdate setNextParameter(Object value) {
- return setParameter(value);
- }
-
@Override
public SqlUpdate setParameters(Object... values) {
for (Object value : values) {
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 8eb2c552c..6951438cf 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
@@ -2114,10 +2114,10 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
return getId((EntityBean) bean);
}
- @Override
- public Object getBeanId(T bean) {
- return getId((EntityBean) bean);
- }
+// @Override
+// public Object beanId(T bean) {
+// return getId((EntityBean) bean);
+// }
/**
* Return the Id value for the bean with embeddedId beans converted into maps.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
index 33d1bf266..655f4c101 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
@@ -219,9 +219,7 @@ public class DeployBeanProperty {
return (AnnotationUtil.has(field, WhenCreated.class)
|| AnnotationUtil.has(field, WhenModified.class)
|| AnnotationUtil.has(field, WhoModified.class)
- || AnnotationUtil.has(field, WhoCreated.class)
- || AnnotationUtil.has(field, UpdatedTimestamp.class)
- || AnnotationUtil.has(field, CreatedTimestamp.class));
+ || AnnotationUtil.has(field, WhoCreated.class));
}
public String getFullBeanName() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
index 571e1d3ca..f93fbf028 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
@@ -1,38 +1,7 @@
package io.ebeaninternal.server.deploy.parse;
-import io.ebean.annotation.Aggregation;
-import io.ebean.annotation.CreatedTimestamp;
-import io.ebean.annotation.DbArray;
-import io.ebean.annotation.DbComment;
-import io.ebean.annotation.DbDefault;
-import io.ebean.annotation.DbJson;
-import io.ebean.annotation.DbJsonB;
-import io.ebean.annotation.DbMap;
-import io.ebean.annotation.DbMigration;
-import io.ebean.annotation.DocCode;
-import io.ebean.annotation.DocEmbedded;
-import io.ebean.annotation.DocProperty;
-import io.ebean.annotation.DocSortable;
-import io.ebean.annotation.Draft;
-import io.ebean.annotation.DraftDirty;
-import io.ebean.annotation.DraftOnly;
-import io.ebean.annotation.DraftReset;
-import io.ebean.annotation.Encrypted;
-import io.ebean.annotation.Expose;
-import io.ebean.annotation.Formula;
-import io.ebean.annotation.HistoryExclude;
-import io.ebean.annotation.Identity;
import io.ebean.annotation.Index;
-import io.ebean.annotation.JsonIgnore;
-import io.ebean.annotation.Length;
-import io.ebean.annotation.SoftDelete;
-import io.ebean.annotation.TenantId;
-import io.ebean.annotation.UnmappedJson;
-import io.ebean.annotation.UpdatedTimestamp;
-import io.ebean.annotation.WhenCreated;
-import io.ebean.annotation.WhenModified;
-import io.ebean.annotation.WhoCreated;
-import io.ebean.annotation.WhoModified;
+import io.ebean.annotation.*;
import io.ebean.config.EncryptDeploy;
import io.ebean.config.EncryptDeploy.Mode;
import io.ebean.config.dbplatform.DbEncrypt;
@@ -51,24 +20,7 @@ import io.ebeaninternal.server.type.ScalarTypeBytesBase;
import io.ebeaninternal.server.type.ScalarTypeBytesEncrypted;
import io.ebeaninternal.server.type.ScalarTypeEncryptedWrapper;
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.PersistenceException;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.persistence.Version;
+import javax.persistence.*;
import java.sql.Types;
import java.util.Set;
import java.util.UUID;
@@ -339,10 +291,10 @@ final class AnnotationFields extends AnnotationParser {
}
private void initWhen(DeployBeanProperty prop) {
- if (has(prop, WhenCreated.class) || has(prop, CreatedTimestamp.class)) {
+ if (has(prop, WhenCreated.class)) {
generatedPropFactory.setInsertTimestamp(prop);
}
- if (has(prop, WhenModified.class) || has(prop, UpdatedTimestamp.class)) {
+ if (has(prop, WhenModified.class)) {
generatedPropFactory.setUpdateTimestamp(prop);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
index ba74a5e65..962c6ce22 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
@@ -48,7 +48,6 @@ final class DCountMetric implements CountMetric {
@Override
public void visit(MetricVisitor visitor) {
-
long val = visitor.reset() ? count.sumThenReset() : count.sum();
if (val > 0) {
visitor.visitCount(new DCountMetricStats(name, val));
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 8011cc1b5..da8caf0b1 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
@@ -251,11 +251,6 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Override
- public Stream findLargeStream() {
- throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
- }
-
@Override
public void findEach(Consumer consumer) {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
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 307b2713c..6aa0f9a6a 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
@@ -1456,11 +1456,6 @@ public final class DefaultOrmQuery extends AbstractQuery implements SpiQuery<
return server.findStream(this, transaction);
}
- @Override
- public Stream findLargeStream() {
- return server.findLargeStream(this, transaction);
- }
-
@Override
public List> findVersions() {
this.temporalMode = TemporalMode.VERSIONS;
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 cc2594b8d..a68bb5d2a 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
@@ -10,7 +10,6 @@ import io.ebeaninternal.api.BindParams;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.api.SpiSqlQuery;
-import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
@@ -56,36 +55,6 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return server.findList(this, null);
}
- @Override
- public BigDecimal findSingleDecimal() {
- return server.findSingleAttribute(this, BigDecimal.class);
- }
-
- @Override
- public Long findSingleLong() {
- return server.findSingleAttribute(this, Long.class);
- }
-
- @Override
- public T findSingleAttribute(Class cls) {
- return server.findSingleAttribute(this, cls);
- }
-
- @Override
- public List findSingleAttributeList(Class cls) {
- return server.findSingleAttributeList(this, cls);
- }
-
- @Override
- public T findOne(RowMapper mapper) {
- return server.findOneMapper(this, mapper);
- }
-
- @Override
- public List findList(RowMapper mapper) {
- return server.findListMapper(this, mapper);
- }
-
@Override
public void findEachRow(RowConsumer consumer) {
server.findEachRow(this, consumer);
@@ -101,12 +70,6 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return Optional.ofNullable(findOne());
}
- @Override
- @Deprecated
- public DefaultRelationalQuery setParams(Object... values) {
- return setParameters(values);
- }
-
@Override
public DefaultRelationalQuery setParameters(Object... values) {
bindParams.setNextParameters(values);
@@ -237,6 +200,14 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return new Mapper(mapper);
}
+ private T findSingleAttribute(Class cls) {
+ return server.findSingleAttribute(this, cls);
+ }
+
+ private List findSingleAttributeList(Class cls) {
+ return server.findSingleAttributeList(this, cls);
+ }
+
private class Scalar implements SqlQuery.TypeQuery {
private final Class type;
diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java b/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java
index 5c0dd02be..c3a8cd6e7 100644
--- a/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java
+++ b/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java
@@ -54,14 +54,13 @@ public interface DocStoreBeanAdapter extends BeanDocType {
/**
* Return the index type for this bean type.
*/
- @Override
- String getIndexType();
+ String indexType();
/**
* Return the index name for this bean type.
*/
@Override
- String getIndexName();
+ String indexName();
/**
* Process a delete by id of a given document.
diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java b/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java
index 4cd2b692f..626daf1b4 100644
--- a/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java
+++ b/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java
@@ -102,7 +102,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
private boolean registerPaths;
public DocStoreBeanBaseAdapter(BeanDescriptor desc, DeployBeanDescriptor deploy) {
-
this.desc = desc;
this.server = desc.ebeanServer();
this.mapped = deploy.isDocStoreMapped();
@@ -123,7 +122,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
@Override
public DocumentMapping createDocMapping() {
-
if (documentMapping != null) {
return documentMapping;
}
@@ -143,12 +141,12 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
}
@Override
- public String getIndexType() {
+ public String indexType() {
return indexType;
}
@Override
- public String getIndexName() {
+ public String indexName() {
return indexName;
}
@@ -159,7 +157,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
@Override
public String rawProperty(String property) {
-
String rawProperty = sortableMap.get(property);
return rawProperty == null ? property : rawProperty;
}
@@ -192,7 +189,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
*/
@Override
public void registerInvalidationPath(String queueId, String path, Set properties) {
-
if (!mapped) {
if (update == DocStoreMode.IGNORE) {
// bean type not mapped but is included as nested document
@@ -207,7 +203,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
* Return the DsInvalidationListener based on the properties, path.
*/
protected DocStoreEmbeddedInvalidation getEmbeddedInvalidation(String queueId, String path, Set properties) {
-
if (properties.contains("*")) {
return new DocStoreEmbeddedInvalidation(queueId, path);
} else {
@@ -245,19 +240,15 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
* This can add derived/embedded/nested parts to the document.
*/
protected DocStructure derivePathProperties(PathProperties pathProps) {
-
boolean includeByDefault = (pathProps == null);
if (pathProps == null) {
pathProps = new PathProperties();
}
-
return getDocStructure(pathProps, includeByDefault);
}
protected DocStructure getDocStructure(PathProperties pathProps, final boolean includeByDefault) {
-
final DocStructure docStructure = new DocStructure(pathProps);
-
BeanProperty[] properties = desc.propertiesNonTransient();
for (BeanProperty property : properties) {
property.docStoreInclude(includeByDefault, docStructure);
@@ -271,17 +262,16 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
}
});
}
-
return docStructure;
}
@Override
- public FetchPath getEmbedded(String path) {
+ public FetchPath embedded(String path) {
return docStructure.getEmbedded(path);
}
@Override
- public FetchPath getEmbeddedManyRoot(String path) {
+ public FetchPath embeddedManyRoot(String path) {
return docStructure.getEmbeddedManyRoot(path);
}
@@ -297,7 +287,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
@Override
public DocStoreMode getMode(PersistRequest.Type persistType, DocStoreMode txnMode) {
-
if (txnMode == null) {
return getMode(persistType);
} else if (txnMode == DocStoreMode.IGNORE) {
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java
index 3a61f60ee..565d41d76 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.cache;
+import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheFactory;
import io.ebean.cache.ServerCacheOptions;
import io.ebean.cache.ServerCacheType;
@@ -12,7 +13,7 @@ import org.tests.model.basic.Customer;
import static org.assertj.core.api.Assertions.assertThat;
-public class DefaultCacheHolderTest {
+class DefaultCacheHolderTest {
private final ThreadLocal tenantId = new ThreadLocal<>();
@@ -25,42 +26,30 @@ public class DefaultCacheHolderTest {
.with(cacheFactory, new TableModState());
}
-
@Test
- public void getCache_normal() {
-
+ void getCache_normal() {
DefaultCacheHolder holder = new DefaultCacheHolder(options());
- DefaultServerCache cache = cache(holder, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
- assertThat(cache.getShortName()).isEqualTo("Customer_B");
-
- DefaultServerCache cache1 = cache(holder, Customer.class);
+ ServerCache cache = cache(holder, Customer.class);
+ ServerCache cache1 = cache(holder, Customer.class);
assertThat(cache1).isSameAs(cache);
- DefaultServerCache cache2 = cache(holder, Contact.class);
+ ServerCache cache2 = cache(holder, Contact.class);
assertThat(cache1).isNotSameAs(cache2);
- assertThat(cache2.getName()).isEqualTo("org.tests.model.basic.Contact_B");
- assertThat(cache2.getShortName()).isEqualTo("Contact_B");
-
}
- private DefaultServerCache cache(DefaultCacheHolder holder, Class> type) {
- return (DefaultServerCache) holder.getCache(type, ServerCacheType.BEAN);
+ private ServerCache cache(DefaultCacheHolder holder, Class> type) {
+ return holder.getCache(type, ServerCacheType.BEAN);
}
@Test
- public void getCache_multiTenant() throws Exception {
-
+ void getCache_multiTenant() throws Exception {
CacheManagerOptions builder = options().with(tenantId::get);
DefaultCacheHolder holder = new DefaultCacheHolder(builder);
tenantId.set("ten_1");
- DefaultServerCache cache = cache(holder, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
- assertThat(cache.getShortName()).isEqualTo("Customer_B");
-
+ ServerCache cache = cache(holder, Customer.class);
cache.put("1", "value-for-tenant1");
cache.put("2", "an other value-for-tenant1");
@@ -109,10 +98,9 @@ public class DefaultCacheHolderTest {
}
@Test
- public void clearAll() {
-
+ void clearAll() {
DefaultCacheHolder holder = new DefaultCacheHolder(options());
- DefaultServerCache cache = cache(holder, Customer.class);
+ ServerCache cache = cache(holder, Customer.class);
cache.put("foo", "foo");
assertThat(cache.size()).isEqualTo(1);
holder.clearAll();
@@ -121,12 +109,11 @@ public class DefaultCacheHolderTest {
}
@Test
- public void clearAll_multiTenant() {
-
+ void clearAll_multiTenant() {
CacheManagerOptions options = options().with(tenantId::get);
DefaultCacheHolder holder = new DefaultCacheHolder(options);
- DefaultServerCache cache = cache(holder, Customer.class);
+ ServerCache cache = cache(holder, Customer.class);
cache.put("foo", "foo");
assertThat(cache.size()).isEqualTo(1);
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java
index b689d9e50..8d9a3b51c 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.cache;
+import io.ebean.cache.ServerCache;
import io.ebean.config.ContainerConfig;
import io.ebean.config.CurrentTenantProvider;
import io.ebean.config.DatabaseConfig;
@@ -11,7 +12,7 @@ import org.tests.model.basic.Customer;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class DefaultServerCacheManagerTest {
+class DefaultServerCacheManagerTest {
private final ThreadLocal tenantId = new ThreadLocal<>();
@@ -29,7 +30,7 @@ public class DefaultServerCacheManagerTest {
private final DefaultServerCacheManager multiTenantManager;
- public DefaultServerCacheManagerTest(){
+ DefaultServerCacheManagerTest(){
CacheManagerOptions builder = new CacheManagerOptions(clusterManager, new DatabaseConfig(), true);
builder.with(new TdTenPro());
this.multiTenantManager = new DefaultServerCacheManager(builder);
@@ -37,86 +38,79 @@ public class DefaultServerCacheManagerTest {
@Test
- public void getCache_normal() {
+ void getCache_normal() {
+ ServerCache cache = cache(manager, Customer.class);
+ DefaultServerCache dsc = cache.unwrap(DefaultServerCache.class);
+ assertThat(dsc.getName()).isEqualTo("org.tests.model.basic.Customer_B");
+ assertThat(dsc.getShortName()).isEqualTo("Customer_B");
- DefaultServerCache cache = cache(manager, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
- assertThat(cache.getShortName()).isEqualTo("Customer_B");
-
- DefaultServerCache cache1 = cache(manager, Customer.class);
+ ServerCache cache1 = cache(manager, Customer.class);
assertThat(cache1).isSameAs(cache);
- DefaultServerCache cache2 = cache(manager, Contact.class);
+ ServerCache cache2 = cache(manager, Contact.class);
assertThat(cache1).isNotSameAs(cache2);
- assertThat(cache2.getName()).isEqualTo("org.tests.model.basic.Contact_B");
- assertThat(cache2.getShortName()).isEqualTo("Contact_B");
+ DefaultServerCache dsc2 = cache2.unwrap(DefaultServerCache.class);
+ assertThat(dsc2.getName()).isEqualTo("org.tests.model.basic.Contact_B");
+ assertThat(dsc2.getShortName()).isEqualTo("Contact_B");
- DefaultServerCache natKeyCache = (DefaultServerCache) manager.getNaturalKeyCache(Customer.class);
- assertThat(natKeyCache.getName()).isEqualTo("org.tests.model.basic.Customer_N");
- assertThat(natKeyCache.getShortName()).isEqualTo("Customer_N");
+ ServerCache natKeyCache = manager.getNaturalKeyCache(Customer.class);
+ DefaultServerCache dscNatKey = natKeyCache.unwrap(DefaultServerCache.class);
+ assertThat(dscNatKey.getName()).isEqualTo("org.tests.model.basic.Customer_N");
+ assertThat(dscNatKey.getShortName()).isEqualTo("Customer_N");
- DefaultServerCache queryCache = (DefaultServerCache) manager.getQueryCache(Customer.class);
- assertThat(queryCache.getName()).isEqualTo("org.tests.model.basic.Customer_Q");
- assertThat(queryCache.getShortName()).isEqualTo("Customer_Q");
+ ServerCache queryCache = manager.getQueryCache(Customer.class);
+ DefaultServerCache dscQueryCache = queryCache.unwrap(DefaultServerCache.class);
+ assertThat(dscQueryCache.getName()).isEqualTo("org.tests.model.basic.Customer_Q");
+ assertThat(dscQueryCache.getShortName()).isEqualTo("Customer_Q");
- DefaultServerCache collCache = (DefaultServerCache) manager.getCollectionIdsCache(Customer.class, "contacts");
- assertThat(collCache.getName()).isEqualTo("org.tests.model.basic.Customer.contacts_C");
- assertThat(collCache.getShortName()).isEqualTo("Customer.contacts_C");
+ ServerCache collCache = manager.getCollectionIdsCache(Customer.class, "contacts");
+ DefaultServerCache dscCollCache = collCache.unwrap(DefaultServerCache.class);
+ assertThat(dscCollCache.getName()).isEqualTo("org.tests.model.basic.Customer.contacts_C");
+ assertThat(dscCollCache.getShortName()).isEqualTo("Customer.contacts_C");
- cache.clearCount.reset();
- collCache.clearCount.reset();
- queryCache.clearCount.reset();
- natKeyCache.clearCount.reset();
+ cache.statistics(true);
+ collCache.statistics(true);
+ queryCache.statistics(true);
+ natKeyCache.statistics(true);
manager.clear(Customer.class);
- assertThat(cache.clearCount.get(true)).isEqualTo(1);
- assertThat(natKeyCache.clearCount.get(true)).isEqualTo(1);
- assertThat(queryCache.clearCount.get(true)).isEqualTo(1);
- assertThat(collCache.clearCount.get(true)).isEqualTo(1);
+ assertThat(cache.statistics(true).getClearCount()).isEqualTo(1);
+ assertThat(natKeyCache.statistics(true).getClearCount()).isEqualTo(1);
+ assertThat(queryCache.statistics(true).getClearCount()).isEqualTo(1);
+ assertThat(collCache.statistics(true).getClearCount()).isEqualTo(1);
}
- private DefaultServerCache cache(DefaultServerCacheManager manager, Class> beanType) {
- return (DefaultServerCache) manager.getBeanCache(beanType);
+ private ServerCache cache(DefaultServerCacheManager manager, Class> beanType) {
+ return manager.getBeanCache(beanType);
}
@Test
- public void getCache_multiTenant() {
-
+ void getCache_multiTenant() {
tenantId.set("ten1");
- DefaultServerCache cache = cache(multiTenantManager, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
+ ServerCache cache = cache(multiTenantManager, Customer.class);
cache.put("1", "tenant1");
tenantId.set("ten2");
-
assertThat(cache.get("1")).isNull();
tenantId.set("ten1");
-
- assertThat(cache.get("1")).isNotNull();
-
+ assertThat(cache.get("1")).isEqualTo("tenant1");
}
@Test
- public void getCache_singleTenant() {
-
+ void getCache_singleTenant() {
+ ServerCache cache = cache(manager, Customer.class);
tenantId.set("ten1");
- DefaultServerCache cache = cache(manager, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
-
cache.put("1", "tenant1");
tenantId.set("ten2");
-
assertThat(cache.get("1")).isEqualTo("tenant1");
-
}
@Test
- public void isLocalL2Caching() {
-
+ void isLocalL2Caching() {
assertTrue(manager.isLocalL2Caching());
assertTrue(multiTenantManager.isLocalL2Caching());
}
diff --git a/ebean-core/src/test/java/org/tests/model/basic/Contact.java b/ebean-core/src/test/java/org/tests/model/basic/Contact.java
index 883d27d5c..a4d670071 100644
--- a/ebean-core/src/test/java/org/tests/model/basic/Contact.java
+++ b/ebean-core/src/test/java/org/tests/model/basic/Contact.java
@@ -40,7 +40,7 @@ public class Contact {
@OneToMany(cascade = CascadeType.ALL)
List notes;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-core/src/test/java/org/tests/model/basic/Product.java b/ebean-core/src/test/java/org/tests/model/basic/Product.java
index 60f73475c..b0fde6d07 100644
--- a/ebean-core/src/test/java/org/tests/model/basic/Product.java
+++ b/ebean-core/src/test/java/org/tests/model/basic/Product.java
@@ -33,7 +33,7 @@ public class Product implements Serializable {
String name;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index d08a16c96..b9931c137 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean ddl generation
@@ -28,14 +28,14 @@
io.ebean
ebean-core-type
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
@@ -58,7 +58,7 @@
io.ebean
ebean-platform-all
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index abb0e5883..144f066e7 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean external mapping api
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 81c527570..1722c1d61 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -28,7 +28,7 @@
io.ebean
ebean-externalmapping-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -61,21 +61,21 @@
io.ebean
ebean-platform-h2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-ddl-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -98,7 +98,7 @@
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.0
diff --git a/ebean-kotlin/pom.xml b/ebean-kotlin/pom.xml
index c9d627818..6d43e8cda 100644
--- a/ebean-kotlin/pom.xml
+++ b/ebean-kotlin/pom.xml
@@ -5,7 +5,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
4.0.0
@@ -29,7 +29,7 @@
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
@@ -51,7 +51,7 @@
io.ebean
ebean-test
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -93,7 +93,7 @@
true
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.0
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index ecf70dd2d..b5c399b83 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean postgis
@@ -22,14 +22,14 @@
io.ebean
ebean-platform-postgres
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
@@ -73,7 +73,7 @@
io.ebean
ebean-test
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -104,7 +104,7 @@
true
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.0
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index fe94c6491..bfdb92ad7 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean querybean
@@ -17,7 +17,7 @@
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
@@ -63,21 +63,21 @@
io.ebean
ebean-ddl-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
querybean-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-test
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -107,7 +107,7 @@
true
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.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 ed3c35350..566ce3f27 100644
--- a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
+++ b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
@@ -1646,14 +1646,6 @@ public abstract class TQRootBean {
return query.findStream();
}
- /**
- * Deprecated - migrate to findStream().
- */
- @Deprecated
- public Stream findLargeStream() {
- return query.findLargeStream();
- }
-
/**
* Execute the query returning the set of objects.
*
diff --git a/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java b/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java
index 00922b438..7cb4c630f 100644
--- a/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java
+++ b/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java
@@ -270,6 +270,12 @@ public class QCustomerTest {
assertThat(foo).hasSize(1);
}
+
+ Customer customer = DB.find(Customer.class, cust.getId());
+ assert customer != null;
+ String customerToString = customer.toString();
+ assertThat(customerToString).contains("Customer@0(id:");
+ assertThat(customerToString).contains(", status:GOOD, inactive:false, name:usingConnection, version:1, whenCreated:");
}
@Test
@@ -387,24 +393,6 @@ public class QCustomerTest {
assertThat(sb.toString()).isEqualTo("stream1|stream2");
}
- @Test
- public void testFindLargeStream() {
- insertCustomer("largeStream1");
- insertCustomer("largeStream2");
- insertCustomer("largeStream3");
-
- StringJoiner sb = new StringJoiner("|");
- try (Stream stream = new QCustomer()
- .name.startsWith("largeStream")
- .id.asc()
- .findLargeStream()) {
-
- stream.forEach(it -> sb.add(it.getName()));
- }
-
- assertThat(sb.toString()).isEqualTo("largeStream1|largeStream2|largeStream3");
- }
-
@Test
public void testFilterMany() {
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 60eaf2414..32036c8bc 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-redis
@@ -16,41 +16,41 @@
redis.clients
jedis
- 4.2.0
+ 4.2.1
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
querybean-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
io.ebean
ebean-test
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -80,7 +80,7 @@
true
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.0
diff --git a/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java b/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java
index 819d0f3f1..648d0bc3a 100644
--- a/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java
+++ b/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java
@@ -141,18 +141,4 @@ public final class DuelCache implements ServerCache, NearCacheInvalidate {
return remote.getMissCount();
}
- @Override
- public int size() {
- return 0;
- }
-
- @Override
- public int getHitRatio() {
- return 0;
- }
-
- @Override
- public ServerCacheStatistics getStatistics(boolean reset) {
- return null;
- }
}
diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java
index a9ce387f1..83633aaeb 100644
--- a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java
+++ b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java
@@ -277,17 +277,7 @@ final class RedisCache implements ServerCache {
}
@Override
- public int size() {
- return 0;
- }
-
- @Override
- public int getHitRatio() {
- return 0;
- }
-
- @Override
- public ServerCacheStatistics getStatistics(boolean reset) {
+ public ServerCacheStatistics statistics(boolean reset) {
ServerCacheStatistics cacheStats = new ServerCacheStatistics();
cacheStats.setCacheName(cacheKey);
cacheStats.setHitCount(hitCount.get(reset));
diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java b/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java
index cbd562855..3b08ef21f 100644
--- a/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java
+++ b/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java
@@ -139,7 +139,7 @@ final class RedisCacheFactory implements ServerCacheFactory {
RedisCache redisCache = createRedisCache(config);
boolean nearCache = config.getCacheOptions().isNearCache();
if (!nearCache) {
- return redisCache;
+ return config.tenantAware(redisCache);
}
String cacheKey = config.getCacheKey();
@@ -147,7 +147,7 @@ final class RedisCacheFactory implements ServerCacheFactory {
near.periodicTrim(executor);
DuelCache duelCache = new DuelCache(near, redisCache, cacheKey, nearCacheNotify);
nearCacheMap.put(cacheKey, duelCache);
- return duelCache;
+ return config.tenantAware(duelCache);
}
private RedisCache createRedisCache(ServerCacheConfig config) {
@@ -173,7 +173,7 @@ final class RedisCacheFactory implements ServerCacheFactory {
cache.periodicTrim(executor);
queryCaches.put(config.getCacheKey(), cache);
}
- return cache;
+ return config.tenantAware(cache);
} finally {
lock.unlock();
}
diff --git a/ebean-redis/src/test/java/org/integration/ClusterTest.java b/ebean-redis/src/test/java/org/integration/ClusterTest.java
index 16b193dee..f52466c0b 100644
--- a/ebean-redis/src/test/java/org/integration/ClusterTest.java
+++ b/ebean-redis/src/test/java/org/integration/ClusterTest.java
@@ -40,14 +40,14 @@ public class ClusterTest {
foo.save();
DB.cacheManager().clearAll();
- DB.getDefault().metaInfo().resetAllMetrics();
+ db.metaInfo().resetAllMetrics();
other.metaInfo().resetAllMetrics();
Person fooA = DB.find(Person.class, foo.getId());
allowAsyncMessaging(); // allow time for background cache load
Person fooB = other.find(Person.class, foo.getId());
- DuelCache dualCacheA = (DuelCache) DB.cacheManager().beanCache(Person.class);
+ DuelCache dualCacheA = db.cacheManager().beanCache(Person.class).unwrap(DuelCache.class);
assertCounts(dualCacheA, 0, 1, 0, 1);
fooA = DB.find(Person.class, foo.getId());
assertCounts(dualCacheA, 1, 1, 0, 1);
@@ -55,7 +55,7 @@ public class ClusterTest {
fooA = DB.find(Person.class, foo.getId());
assertCounts(dualCacheA, 2, 1, 0, 1);
fooB = other.find(Person.class, foo.getId());
- DuelCache dualCacheB = (DuelCache) other.cacheManager().beanCache(Person.class);
+ DuelCache dualCacheB = other.cacheManager().beanCache(Person.class).unwrap(DuelCache.class);
assertCounts(dualCacheB, 2, 1, 1, 0);
}
@@ -73,7 +73,7 @@ public class ClusterTest {
other.cacheManager().clearAll();
other.metaInfo().resetAllMetrics();
- DuelCache dualCache = (DuelCache) other.cacheManager().beanCache(Person.class);
+ DuelCache dualCache = other.cacheManager().beanCache(Person.class).unwrap(DuelCache.class);
Person foo0 = other.find(Person.class, 1);
assertCounts(dualCache, 0, 1, 0, 1);
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 780723955..1ca3e3e77 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean test
@@ -29,20 +29,20 @@
io.ebean
ebean-platform-h2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
provided
io.ebean
ebean-ddl-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
@@ -62,7 +62,7 @@
io.ebean
ebean-test-docker
- 4.5
+ ${ebean-test-docker.version}
@@ -106,7 +106,7 @@
io.ebean
ebean-platform-all
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -266,7 +266,7 @@
true
- io.ebean.tile:enhancement:13.0.1-RC1
+ io.ebean.tile:enhancement:13.3.0
diff --git a/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java b/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java
index afd83b4d0..c751732cf 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java
@@ -29,16 +29,17 @@ public class AutoConfigureForTesting implements AutoConfigure {
@Override
public void preConfigure(DatabaseConfig config) {
-
+ if (!config.isDefaultServer()) {
+ log.info("skip automatic testing config on non-default server name:{} register:{}", config.getName(), config.isRegister());
+ return;
+ }
Properties properties = config.getProperties();
if (isExtraServer(config, properties)) {
setupExtraDataSourceIfNecessary(config);
return;
}
-
String testPlatform = properties.getProperty("ebean.test.platform");
- log.debug("automatic testing config - with ebean.test.platform:{} environment db:{} name:{}", testPlatform, environmentDb, config.getName());
-
+ log.debug("automatic testing config - with ebean.test.platform:{} name:{} environmentDb:{}", testPlatform, config.getName(), environmentDb);
if (RunOnceMarker.isRun()) {
setupPlatform(environmentDb, config);
}
@@ -46,8 +47,10 @@ public class AutoConfigureForTesting implements AutoConfigure {
@Override
public void postConfigure(DatabaseConfig config) {
+ if (!config.isDefaultServer()) {
+ return;
+ }
setupProviders(config);
-
if (org.h2.engine.Constants.VERSION_MAJOR == 1) {
// This code may be removed later, when droppinv H2 1.xxx compatibility
System.err.println("Running tests in H2 1.xxx compatibility mode");
diff --git a/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java b/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java
index 880946f7f..2c1aeb245 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java
@@ -68,6 +68,8 @@ public abstract class BaseTestCase {
DB_CLOCK_DELTA = 100;
}
try {
+ String propsFile = System.getProperty("props.file");
+ System.out.println("BaseTestCase: -Dprops.file=" + propsFile); // help debug CI
// First try, if we get the default server. If this fails, all tests will fail.
DB.getDefault();
} catch (Throwable e) {
diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java
index de0e61945..909ddcbb3 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java
@@ -495,21 +495,11 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
return null;
}
- @Override
- public SqlQuery createSqlQuery(String sql) {
- return sqlQuery(sql);
- }
-
@Override
public SqlUpdate sqlUpdate(String sql) {
return null;
}
- @Override
- public SqlUpdate createSqlUpdate(String sql) {
- return sqlUpdate(sql);
- }
-
@Override
public CallableSql createCallableSql(String callableSql) {
return null;
@@ -653,11 +643,6 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
return null;
}
- @Override
- public Stream findLargeStream(Query query, Transaction transaction) {
- return null;
- }
-
@Override
public void findEach(Query query, Consumer consumer, Transaction transaction) {
}
diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java
index f1b06631d..08f2bea9e 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java
@@ -177,21 +177,11 @@ public class TDSpiServer implements SpiServer {
return null;
}
- @Override
- public SqlQuery createSqlQuery(String sql) {
- return null;
- }
-
@Override
public SqlUpdate sqlUpdate(String sql) {
return null;
}
- @Override
- public SqlUpdate createSqlUpdate(String sql) {
- return null;
- }
-
@Override
public CallableSql createCallableSql(String callableSql) {
return null;
diff --git a/ebean-test/src/test/java/org/tests/model/EGenProps.java b/ebean-test/src/test/java/org/tests/model/EGenProps.java
index f5dcadd43..623b131f9 100644
--- a/ebean-test/src/test/java/org/tests/model/EGenProps.java
+++ b/ebean-test/src/test/java/org/tests/model/EGenProps.java
@@ -1,7 +1,5 @@
package org.tests.model;
-import io.ebean.annotation.CreatedTimestamp;
-import io.ebean.annotation.UpdatedTimestamp;
import io.ebean.annotation.WhenCreated;
import io.ebean.annotation.WhenModified;
@@ -31,40 +29,40 @@ public class EGenProps {
@WhenModified
Timestamp whenModified;
- @CreatedTimestamp
+ @WhenCreated
Timestamp tsCreated;
- @UpdatedTimestamp
+ @WhenModified
Timestamp tsUpdated;
- @CreatedTimestamp
+ @WhenCreated
LocalDateTime ldtCreated;
- @UpdatedTimestamp
+ @WhenModified
LocalDateTime ldtUpdated;
- @CreatedTimestamp
+ @WhenCreated
OffsetDateTime odtCreated;
- @UpdatedTimestamp
+ @WhenModified
OffsetDateTime odtUpdated;
- @CreatedTimestamp
+ @WhenCreated
ZonedDateTime zdtCreated;
- @UpdatedTimestamp
+ @WhenModified
ZonedDateTime zdtUpdated;
- @CreatedTimestamp
+ @WhenCreated
Instant instantCreated;
- @UpdatedTimestamp
+ @WhenModified
Instant instantUpdated;
- @CreatedTimestamp
+ @WhenCreated
long longCreated;
- @UpdatedTimestamp
+ @WhenModified
long longUpdated;
public Long getId() {
diff --git a/ebean-test/src/test/java/org/tests/model/basic/Contact.java b/ebean-test/src/test/java/org/tests/model/basic/Contact.java
index 883d27d5c..a4d670071 100644
--- a/ebean-test/src/test/java/org/tests/model/basic/Contact.java
+++ b/ebean-test/src/test/java/org/tests/model/basic/Contact.java
@@ -40,7 +40,7 @@ public class Contact {
@OneToMany(cascade = CascadeType.ALL)
List notes;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-test/src/test/java/org/tests/model/basic/Product.java b/ebean-test/src/test/java/org/tests/model/basic/Product.java
index 60f73475c..b0fde6d07 100644
--- a/ebean-test/src/test/java/org/tests/model/basic/Product.java
+++ b/ebean-test/src/test/java/org/tests/model/basic/Product.java
@@ -33,7 +33,7 @@ public class Product implements Serializable {
String name;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java b/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java
index 6e73f72c4..c08edb848 100644
--- a/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java
+++ b/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java
@@ -117,9 +117,9 @@ public class TestNatKeyCacheWithForeignKey extends BaseTestCase {
@Test
public void findSimple() {
-
setupData();
clearAllL2Cache();
+ appStats();
OCachedApp app0 = findAppByName("app0");
assertThat(app0).isNotNull();
diff --git a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicMap.java b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicMap.java
index 0bf01e2e2..0e5b01853 100644
--- a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicMap.java
+++ b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicMap.java
@@ -192,6 +192,6 @@ public class TestElementCollectionBasicMap extends BaseTestCase {
final EcmPerson fromJson = DB.json().toBean(EcmPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
- assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanMap size[2] map{home=021 1234, work=021 4321}");
+ assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("{home=021 1234, work=021 4321}");
}
}
diff --git a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicSet.java b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicSet.java
index 36bb4c28f..8860f6958 100644
--- a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicSet.java
+++ b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionBasicSet.java
@@ -183,6 +183,6 @@ class TestElementCollectionBasicSet extends BaseTestCase {
final EcsPerson fromJson = DB.json().toBean(EcsPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
- assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanSet size[2] set[021 1234, 021 4321]");
+ assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("[021 1234, 021 4321]");
}
}
diff --git a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedList.java b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedList.java
index 508c84156..a3ec36ab7 100644
--- a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedList.java
+++ b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedList.java
@@ -190,6 +190,6 @@ public class TestElementCollectionEmbeddedList extends BaseTestCase {
final EcblPerson fromJson = DB.json().toBean(EcblPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona64021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
- assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanList size[2] list[64-021-1234, 64-021-4321]");
+ assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("[64-021-1234, 64-021-4321]");
}
}
diff --git a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedMap.java b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedMap.java
index 0c9ab75a0..bc3cacff1 100644
--- a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedMap.java
+++ b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEmbeddedMap.java
@@ -181,6 +181,6 @@ public class TestElementCollectionEmbeddedMap extends BaseTestCase {
final EcbmPerson fromJson = DB.json().toBean(EcbmPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Fiona64021");
assertThat(fromJson.getPhoneNumbers()).hasSize(2);
- assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("BeanMap size[2] map{home=64-021-1234, work=64-021-4321}");
+ assertThat(fromJson.getPhoneNumbers().toString()).isEqualTo("{home=64-021-1234, work=64-021-4321}");
}
}
diff --git a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEnumSet.java b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEnumSet.java
index 27d856347..9482671f1 100644
--- a/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEnumSet.java
+++ b/ebean-test/src/test/java/org/tests/model/elementcollection/TestElementCollectionEnumSet.java
@@ -45,6 +45,6 @@ public class TestElementCollectionEnumSet extends BaseTestCase {
final EcEnumPerson fromJson = DB.json().toBean(EcEnumPerson.class, asJson);
assertThat(fromJson.getName()).isEqualTo("Enum Person");
assertThat(fromJson.getTags()).hasSize(2);
- assertThat(fromJson.getTags().toString()).isEqualTo("BeanSet size[2] set[BLUE, RED]");
+ assertThat(fromJson.getTags().toString()).isEqualTo("[BLUE, RED]");
}
}
diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java b/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java
index b53276d40..894141654 100644
--- a/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java
+++ b/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java
@@ -37,27 +37,6 @@ public class TestQueryFindStream extends BaseTestCase {
}
}
- @Test
- public void findLargeStream_basic() {
- ResetBasicData.reset();
- try (Stream stream = DB.find(Customer.class)
- .findLargeStream()) {
-
- // bad example, don't use a stream like this when we can
- // use findSingleAttributeList() instead
- final List namesStream = stream
- .map(Customer::getName)
- .collect(toList());
-
- final List namesQuery = DB.find(Customer.class)
- .select("name")
- .findSingleAttributeList();
-
- assertThat(namesStream).hasSize(namesQuery.size());
- assertThat(namesStream).containsAll(namesQuery);
- }
- }
-
@Test
public void manualTest_findSteam_when_closeWithResources() {
// confirm manually the stream is closed via try with resources block
diff --git a/ebean-test/src/test/resources/logback-test.xml b/ebean-test/src/test/resources/logback-test.xml
index bfe4a1ede..3f022e12c 100644
--- a/ebean-test/src/test/resources/logback-test.xml
+++ b/ebean-test/src/test/resources/logback-test.xml
@@ -72,11 +72,12 @@
-
-
+
+
+
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index 72895aa1f..3d2d7e1fe 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parent
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
kotlin querybean generator
@@ -29,7 +29,7 @@
io.ebean
ebean-querybean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -43,7 +43,7 @@
io.ebean
ebean-core
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
@@ -64,7 +64,7 @@
io.ebean
ebean-ddl-generator
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
test
diff --git a/platforms/all/pom.xml b/platforms/all/pom.xml
index a912ee1db..72f0b03bc 100644
--- a/platforms/all/pom.xml
+++ b/platforms/all/pom.xml
@@ -4,7 +4,7 @@
platforms
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-platform-all
@@ -14,67 +14,67 @@
io.ebean
ebean-platform-h2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-clickhouse
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-db2
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-hana
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-hsqldb
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-mysql
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-mariadb
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-nuodb
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-oracle
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-postgres
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-sqlanywhere
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-sqlite
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
io.ebean
ebean-platform-sqlserver
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml
index 66c43d6d9..ca1b257a6 100644
--- a/platforms/clickhouse/pom.xml
+++ b/platforms/clickhouse/pom.xml
@@ -4,7 +4,7 @@
platforms
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-platform-clickhouse
@@ -14,7 +14,7 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/platforms/db2/pom.xml b/platforms/db2/pom.xml
index ff58d272f..c7cbca8d9 100644
--- a/platforms/db2/pom.xml
+++ b/platforms/db2/pom.xml
@@ -4,7 +4,7 @@
platforms
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-platform-db2
@@ -14,7 +14,7 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
diff --git a/platforms/h2/pom.xml b/platforms/h2/pom.xml
index 0f88b983d..2173463f7 100644
--- a/platforms/h2/pom.xml
+++ b/platforms/h2/pom.xml
@@ -4,7 +4,7 @@
platforms
io.ebean
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT
ebean-platform-h2
@@ -14,7 +14,7 @@
io.ebean
ebean-api
- 13.0.1-SNAPSHOT
+ 13.3.0-SNAPSHOT