diff --git a/README.md b/README.md index c00cb73e5..694c73f96 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ [![datasource EA](https://github.com/ebean-orm/ebean-datasource/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean-datasource/actions/workflows/jdk-ea.yml) [![migration EA](https://github.com/ebean-orm/ebean-migration/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean-migration/actions/workflows/jdk-ea.yml) [![test-docker EA](https://github.com/ebean-orm/ebean-test-docker/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean-test-docker/actions/workflows/jdk-ea.yml) +[![ebean-agent EA](https://github.com/ebean-orm/ebean-agent/actions/workflows/jdk-ea.yml/badge.svg)](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