diff --git a/ebean-api/src/main/java/io/ebean/Ebean.java b/ebean-api/src/main/java/io/ebean/Ebean.java
deleted file mode 100644
index f58c9dac0..000000000
--- a/ebean-api/src/main/java/io/ebean/Ebean.java
+++ /dev/null
@@ -1,1226 +0,0 @@
-package io.ebean;
-
-import io.avaje.lang.Nullable;
-import io.ebean.annotation.TxIsolation;
-import io.ebean.cache.ServerCacheManager;
-import io.ebean.plugin.Property;
-import io.ebean.text.csv.CsvReader;
-import io.ebean.text.json.JsonContext;
-
-import javax.persistence.OptimisticLockException;
-import javax.persistence.PersistenceException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Callable;
-
-/**
- * Deprecated - please migrate to use io.ebean.DB.
- *
- * Ebean is a registry of {@link Database} by name. Ebean has now been renamed to {@link DB}. - *
- * Ebean is effectively this is an alias for {@link DB} which is the new and improved name for Ebean. - *
- * The preference is to use DB and Database rather than Ebean and EbeanServer. - */ -@Deprecated -public final class Ebean { - - private static final DbContext context = DbContext.getInstance(); - - private Ebean() { - } - - /** - * Get the Database for a given DataSource. If name is null this will - * return the 'default' EbeanServer. - *
- * This is provided to access EbeanServer for databases other than the - * 'default' database. EbeanServer also provides more control over - * transactions and the ability to use transactions created externally to - * Ebean. - *
- *{@code
- * // use the "hr" database
- * EbeanServer hrDatabase = Ebean.getServer("hr");
- *
- * Person person = hrDatabase.find(Person.class, 10);
- * }
- *
- * @param name the name of the server, can use null for the 'default server'
- */
- public static EbeanServer getServer(String name) {
- return (EbeanServer)context.get(name);
- }
-
- /**
- * Returns the default EbeanServer.
- *
- * This is equivalent to Ebean.getServer(null);
- *
- * The ExpressionFactory is used internally by the query and ExpressionList to - * 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' EbeanServer. - *
- *- * 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 getExpressionFactory() { - return getDefault().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); - } - - /** - * 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. - *
- *{@code
- *
- * // start a transaction (stored in a ThreadLocal)
- * Ebean.beginTransaction();
- * try {
- * Order order = Ebean.find(Order.class,10); ...
- *
- * Ebean.save(order);
- *
- * Ebean.commitTransaction();
- *
- * } finally {
- * // rollback if we didn't commit
- * // i.e. an exception occurred before commitTransaction().
- * Ebean.endTransaction();
- * }
- *
- * }
- * - * If you want to externalise the transaction management then you should be - * able to do this via EbeanServer. Specifically with EbeanServer you can pass - * the transaction to the various find() and save() execute() methods. This - * gives you the ability to create the transactions yourself externally from - * Ebean and pass those transactions through to the various methods available - * on EbeanServer. - *
- */ - public static Transaction beginTransaction() { - return getDefault().beginTransaction(); - } - - /** - * Start a transaction additionally specifying the isolation level. - * - * @param isolation the Transaction isolation level - */ - public static Transaction beginTransaction(TxIsolation isolation) { - return getDefault().beginTransaction(isolation); - } - - /** - * Start a transaction typically specifying REQUIRES_NEW or REQUIRED semantics. - *- * Note that this provides an try finally alternative to using {@link #executeCall(TxScope, Callable)} or - * {@link #execute(TxScope, Runnable)}. - *
- *- *
{@code
- * // Start a new transaction. If there is a current transaction
- * // suspend it until this transaction ends
- * Transaction txn = Ebean.beginTransaction(TxScope.requiresNew());
- * try {
- *
- * ...
- *
- * // commit the transaction
- * txn.commit();
- *
- * } finally {
- * // end this transaction which:
- * // A) will rollback transaction if it has not been committed already
- * // B) will restore a previously suspended transaction
- * txn.end();
- * }
- *
- * }
- * {@code
- *
- * // start a new transaction if there is not a current transaction
- * Transaction txn = Ebean.beginTransaction(TxScope.required());
- * try {
- *
- * ...
- *
- * // commit the transaction if it was created or
- * // do nothing if there was already a current transaction
- * txn.commit();
- *
- * } finally {
- * // end this transaction which will rollback the transaction
- * // if it was created for this try finally scope and has not
- * // already been committed
- * txn.end();
- * }
- *
- * }
- */
- public static Transaction beginTransaction(TxScope scope) {
- return getDefault().beginTransaction(scope);
- }
-
- /**
- * Returns the current transaction or null if there is no current transaction
- * in scope.
- */
- public static Transaction currentTransaction() {
- return getDefault().currentTransaction();
- }
-
- /**
- * The batch will be flushing automatically but you can use this to explicitly
- * flush the batch if you like.
- * - * Flushing occurs automatically when: - *
- *- * Useful to put in a finally block to ensure the transaction is ended, rather - * than a rollbackTransaction() in each catch block. - *
- *- * Code example: - *
- *{@code
- * Ebean.beginTransaction();
- * try {
- * // do some fetching and or persisting
- *
- * // commit at the end
- * Ebean.commitTransaction();
- *
- * } finally {
- * // if commit didn't occur then rollback the transaction
- * Ebean.endTransaction();
- * }
- * }
- */
- public static void endTransaction() {
- getDefault().endTransaction();
- }
-
- /**
- * Mark the current transaction as rollback only.
- */
- public static void setRollbackOnly() {
- getDefault().currentTransaction().setRollbackOnly();
- }
-
- /**
- * Return a map of the differences between two objects of the same type.
- * - * When null is passed in for b, then the 'OldValues' of a is used for the - * difference comparison. - *
- */ - public static Map- * 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. - *
- *- * In this example below the details property has a CascadeType.ALL set so - * saving an order will also save all its details. - *
- *{@code
- * public class Order { ...
- *
- * @OneToMany(cascade=CascadeType.ALL, mappedBy="order")
- * List details;
- * ...
- * }
- * }
- * - * 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); - } - - /** - * Insert the bean. This is useful when you set the Id property on a bean and - * want to explicitly insert it. - */ - public static void insert(Object bean) { - getDefault().insert(bean); - } - - /** - * Insert a collection of beans. - */ - public static void insertAll(Collection> beans) { - getDefault().insertAll(beans); - } - - /** - * Marks the entity bean as dirty. - *- * This is used so that when a bean that is otherwise unmodified is updated with the version - * property updated. - *
- * An unmodified bean that is saved or updated is normally skipped and this marks the bean as - * dirty so that it is not skipped. - *
{@code
- *
- * Customer customer = Ebean.find(Customer, id);
- *
- * // mark the bean as dirty so that a save() or update() will
- * // increment the version property
- * Ebean.markAsDirty(customer);
- * Ebean.save(customer);
- *
- * }
- */
- public static void markAsDirty(Object bean) throws OptimisticLockException {
- getDefault().markAsDirty(bean);
- }
-
- /**
- * Saves the bean using an update. If you know you are updating a bean then it is preferrable to
- * use this update() method rather than save().
- * - * 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
- *
- * // A 'stateless update' example
- * Customer customer = new Customer();
- * customer.setId(7);
- * customer.setName("ModifiedNameNoOCC");
- *
- * DB.update(customer);
- *
- * }
- */
- public static void update(Object bean) throws OptimisticLockException {
- getDefault().update(bean);
- }
-
- /**
- * Update the beans in the collection.
- */
- public static void updateAll(Collection> beans) throws OptimisticLockException {
- getDefault().updateAll(beans);
- }
-
- /**
- * Merge the bean using the default merge options.
- *
- * @param bean The bean to merge
- */
- public static void merge(Object bean) {
- getDefault().merge(bean);
- }
-
- /**
- * Merge the bean using the given merge options.
- *
- * @param bean The bean to merge
- * @param options The options to control the merge
- */
- public static void merge(Object bean, MergeOptions options) {
- getDefault().merge(bean, options);
- }
-
- /**
- * Save all the beans from a Collection.
- */
- public static int saveAll(Collection> beans) throws OptimisticLockException {
- return getDefault().saveAll(beans);
- }
-
- /**
- * This method checks the uniqueness of a bean. I.e. if the save will work. It will return the
- * properties that violates an unique / primary key. This may be done in an UI save action to
- * validate if the user has entered correct values.
- * - * Note: This method queries the DB for uniqueness of all indices, so do not use it in a batch update. - *
- * Note: This checks only the root bean! - *
- *
{@code
- *
- * // there is a unique constraint on title
- *
- * Document doc = new Document();
- * doc.setTitle("One flew over the cuckoo's nest");
- * doc.setBody("clashes with doc1");
- *
- * Set properties = server().checkUniqueness(doc);
- *
- * if (properties.isEmpty()) {
- * // it is unique ... carry on
- *
- * } else {
- * // build a user friendly message
- * // to return message back to user
- *
- * String uniqueProperties = properties.toString();
- *
- * StringBuilder msg = new StringBuilder();
- *
- * properties.forEach((it)-> {
- * Object propertyValue = it.getVal(doc);
- * String propertyName = it.getName();
- * msg.append(" property["+propertyName+"] value["+propertyValue+"]");
- * });
- *
- * // uniqueProperties > [title]
- * // custom msg > property[title] value[One flew over the cuckoo's nest]
- *
- * }
- *
- * }
- *
- * @param bean The entity bean to check uniqueness on
- * @return a set of Properties if constraint validation was detected or empty list.
- */
- public static Set- * 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); - } - - /** - * Delete the bean in permanent fashion (will not use soft delete). - */ - public static boolean deletePermanent(Object bean) throws OptimisticLockException { - return getDefault().deletePermanent(bean); - } - - /** - * Delete the bean given its type and id. - */ - public static int delete(Class> beanType, Object id) { - return getDefault().delete(beanType, id); - } - - /** - * Delete permanent the bean given its type and id. - */ - public static int deletePermanent(Class> beanType, Object id) { - return getDefault().deletePermanent(beanType, id); - } - - /** - * Delete several beans given their type and id values. - */ - public static int deleteAll(Class> beanType, Collection> ids) { - return getDefault().deleteAll(beanType, ids); - } - - /** - * Delete permanent several beans given their type and id values. - */ - public static int deleteAllPermanent(Class> beanType, Collection> ids) { - return getDefault().deleteAllPermanent(beanType, ids); - } - - /** - * Delete all the beans in the Collection. - */ - public static int deleteAll(Collection> beans) throws OptimisticLockException { - return getDefault().deleteAll(beans); - } - - /** - * Delete permanent all the beans in the Collection (will not use soft delete). - */ - public static int deleteAllPermanent(Collection> beans) throws OptimisticLockException { - return getDefault().deleteAllPermanent(beans); - } - - /** - * Refresh the values of a bean. - *- * 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); - } - - /** - * Refresh a 'many' property of a bean. - *{@code
- *
- * Order order = ...;
- * ...
- * // refresh the order details...
- * Ebean.refreshMany(order, "details");
- *
- * }
- *
- * @param bean the entity bean containing the List Set or Map to refresh.
- * @param manyPropertyName the property name of the List Set or Map to refresh.
- */
- public static void refreshMany(Object bean, String manyPropertyName) {
- getDefault().refreshMany(bean, manyPropertyName);
- }
-
- /**
- * Get a reference object.
- * - * This is sometimes described as a proxy (with lazy loading). - *
- *{@code
- *
- * Product product = Ebean.getReference(Product.class, 1);
- *
- * // You can get the id without causing a fetch/lazy load
- * Integer productId = product.getId();
- *
- * // If you try to get any other property a fetch/lazy loading will occur
- * // This will cause a query to execute...
- * String name = product.getName();
- *
- * }
- *
- * @param beanType the type of entity bean
- * @param id the id value
- */
- public static - * If you leave off any keywords the defaults are ascending order and treating - * nulls as high values. - *
- *- * Note that the sorting uses a Comparator and Collections.sort(); and does - * not invoke a DB query. - *
- *{@code
- *
- * // find orders and their customers
- * List list = Ebean.find(Order.class)
- * .fetch("customer")
- * .order("id")
- * .findList();
- *
- * // sort by customer name ascending, then by order shipDate
- * // ... then by the order status descending
- * Ebean.sort(list, "customer.name, shipDate, status desc");
- *
- * // sort by customer name descending (with nulls low)
- * // ... then by the order id
- * Ebean.sort(list, "customer.name desc nullsLow, id");
- *
- * }
- *
- * @param list the list of entity beans
- * @param sortByClause the properties to sort the list by
- */
- public static {@code
- *
- * // Fetch order 1
- * Order order = Ebean.find(Order.class, 1);
- *
- * }
- * - * If you want more control over the query then you can use createQuery() and - * Query.findOne(); - *
- *{@code
- *
- * // ... additionally fetching customer, customer shipping address,
- * // order details, and the product associated with each order detail.
- * // note: only product id and name is fetch (its a "partial object").
- * // note: all other objects use "*" and have all their properties fetched.
- *
- * Query query = Ebean.find(Order.class)
- * .setId(1)
- * .fetch("customer")
- * .fetch("customer.shippingAddress")
- * .fetch("details")
- * .query();
- *
- * // fetch associated products but only fetch their product id and name
- * query.fetch("details.product", "name");
- *
- * // traverse the object graph...
- *
- * Order order = query.findOne();
- *
- * Customer customer = order.getCustomer();
- * Address shippingAddress = customer.getShippingAddress();
- * List details = order.getDetails();
- * OrderDetail detail0 = details.get(0);
- * Product product = detail0.getProduct();
- * String productName = product.getName();
- *
- * }
- *
- * @param beanType the type of entity bean to fetch
- * @param id the id value
- */
- @Nullable
- public static - * Create a SqlQuery for executing native sql - * query statements. - *
- * Note that you can use raw SQL with entity beans, refer to the SqlSelect - * annotation for examples. - *
- */ - @Deprecated - public static SqlQuery createSqlQuery(String sql) { - return getDefault().sqlQuery(sql); - } - - /** - * Deprecated - migrate to DB.sqlUpdate(). - *- * Create a sql update for executing native dml statements. - *
- * 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. - */ - @Deprecated - public static SqlUpdate createSqlUpdate(String sql) { - return getDefault().sqlUpdate(sql); - } - - /** - * Create a CallableSql to execute a given stored procedure. - * - * @see CallableSql - */ - public static CallableSql createCallableSql(String sql) { - return getDefault().createCallableSql(sql); - } - - /** - * Create a orm update where you will supply the insert/update or delete - * statement (rather than using a named one that is already defined using the - * @NamedUpdates annotation). - *
- * 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"
- *
- * // will be converted into their associated table and column names
- * String updStatement = "update topic set postCount = :pc where id = :id";
- *
- * Update update = Ebean.createUpdate(Topic.class, updStatement);
- *
- * update.set("pc", 9);
- * update.set("id", 3);
- *
- * int rows = update.execute();
- * System.out.println("rows updated:" + rows);
- *
- * }
- */
- public static - * 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 - * @param- * 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()} - * {@link Query#findSet()} etc will execute against the same EbeanServer from - * which is was created. - *
- * - * @param beanType the class of entity to be fetched - * @return A ORM Query object for this beanType - */ - public static- *
{@code
- *
- * // Find order additionally fetching the customer, details and details.product name.
- *
- * String eql = "fetch customer fetch details fetch details.product (name) where id = :orderId ";
- *
- * Query query = Ebean.createQuery(Order.class, eql);
- * query.setParameter("orderId", 2);
- *
- * Order order = query.findOne();
- *
- * // This is the same as:
- *
- * Order order = Ebean.find(Order.class)
- * .fetch("customer")
- * .fetch("details")
- * .fetch("detail.product", "name")
- * .setId(2)
- * .findOne();
- *
- * }
- *
- * @param beanType The type of bean to fetch
- * @param eql The Ebean query
- * @param - * 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 - */ - public static- * 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";
- *
- * List customers = DB.findNative(Customer.class, sql)
- * .setParameter(1, "Rob%")
- * .findList()
- *
- * }
- *
- * @param beanType The type of entity bean to fetch
- * @param nativeSql The SQL that can contain named or positioned parameters
- * @return The query to set parameters and execute
- */
- public static - * 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. - * @param- *
{@code
- *
- * int rows = Ebean.update(Customer.class)
- * .set("status", Customer.Status.ACTIVE)
- * .set("updtime", new Timestamp(System.currentTimeMillis()))
- * .where()
- * .gt("id", 1000)
- * .update();
- *
- * }
- *
- * @param beanType The type of entity bean to update
- * @param - * 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- * If you wish to execute a Sql Select natively then you should use the - * FindByNativeSql object. - *
- *- * Note that the table modification information is automatically deduced and - * you do not need to call the Ebean.externalModification() method when you - * use this method. - *
- *- * Example: - *
- *{@code
- *
- * // example that uses 'named' parameters
- * String s = "UPDATE f_topic set post_count = :count where id = :id"
- *
- * SqlUpdate update = Ebean.createSqlUpdate(s);
- *
- * update.setParameter("id", 1);
- * update.setParameter("count", 50);
- *
- * int modifiedCount = Ebean.execute(update);
- *
- * String msg = "There where " + modifiedCount + "rows updated";
- *
- * }
- *
- * @param sqlUpdate the update sql potentially with bind values
- * @return the number of rows updated or deleted. -1 if executed in batch.
- * @see SqlUpdate
- * @see CallableSql
- * @see Ebean#execute(CallableSql)
- */
- public static int execute(SqlUpdate sqlUpdate) {
- return getDefault().execute(sqlUpdate);
- }
-
- /**
- * For making calls to stored procedures.
- * - * Example: - *
- *{@code
- *
- * String sql = "{call sp_order_modify(?,?,?)}";
- *
- * CallableSql cs = Ebean.createCallableSql(sql);
- * cs.setParameter(1, 27);
- * cs.setParameter(2, "SHIPPED");
- * cs.registerOut(3, Types.INTEGER);
- *
- * Ebean.execute(cs);
- *
- * // read the out parameter
- * Integer returnValue = (Integer) cs.getObject(3);
- *
- * }
- *
- * @see CallableSql
- * @see Ebean#execute(SqlUpdate)
- */
- public static int execute(CallableSql callableSql) {
- return getDefault().execute(callableSql);
- }
-
- /**
- * Execute a TxRunnable in a Transaction with an explicit scope.
- * - * The scope can control the transaction type, isolation and rollback - * semantics. - *
- *{@code
- *
- * // set specific transactional scope settings
- * TxScope scope = TxScope.requiresNew().setIsolation(TxIsolation.SERIALIZABLE);
- *
- * Ebean.execute(scope, new TxRunnable() {
- * public void run() {
- * User u1 = Ebean.find(User.class, 1);
- * ...
- * }
- * });
- *
- * }
- */
- public static void execute(TxScope scope, Runnable r) {
- getDefault().execute(scope, r);
- }
-
- /**
- * Execute a Runnable in a Transaction with the default scope.
- * - * The default scope runs with REQUIRED and by default will rollback on any - * exception (checked or runtime). - *
- *{@code
- *
- * Ebean.execute(() -> {
- *
- * User u1 = Ebean.find(User.class, 1);
- * User u2 = Ebean.find(User.class, 2);
- *
- * u1.setName("u1 mod");
- * u2.setName("u2 mod");
- *
- * Ebean.save(u1);
- * Ebean.save(u2);
- *
- * });
- *
- * }
- */
- public static void execute(Runnable r) {
- getDefault().execute(r);
- }
-
- /**
- * Execute a Callable in a Transaction with an explicit scope.
- * - * The scope can control the transaction type, isolation and rollback - * semantics. - *
- *{@code
- *
- * // set specific transactional scope settings
- * TxScope scope = TxScope.requiresNew().setIsolation(TxIsolation.SERIALIZABLE);
- *
- * Ebean.executeCall(scope, new Callable() {
- * public String call() {
- * User u1 = Ebean.find(User.class, 1);
- * ...
- * return u1.getEmail();
- * }
- * });
- *
- * }
- */
- public static - * 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
- *
- * Ebean.executeCall(() -> {
- *
- * User u1 = Ebean.find(User.class, 1);
- * User u2 = Ebean.find(User.class, 2);
- *
- * u1.setName("u1 mod");
- * u2.setName("u2 mod");
- *
- * Ebean.save(u1);
- * Ebean.save(u2);
- *
- * return u1.getEmail();
- *
- * });
- *
- * }
- */
- public static - * If you use Ebean.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 - * @param updates true if rows on the table where updated - * @param deletes true if rows on the table where deleted - */ - public static void externalModification(String tableName, boolean inserts, boolean updates, boolean deletes) { - getDefault().externalModification(tableName, inserts, updates, deletes); - } - - /** - * Return the BeanState for a given entity bean. - *- * This will return null if the bean is not an enhanced entity bean. - *
- */ - public static BeanState getBeanState(Object bean) { - return getDefault().beanState(bean); - } - - /** - * Return the manager of the server cache ("L2" cache). - */ - public static ServerCacheManager getServerCacheManager() { - return getDefault().cacheManager(); - } - - /** - * Return the BackgroundExecutor service for asynchronous processing of - * queries. - */ - public static BackgroundExecutor getBackgroundExecutor() { - return getDefault().backgroundExecutor(); - } - - /** - * Return the JsonContext for reading/writing JSON. - */ - public static JsonContext json() { - return getDefault().json(); - } - -} diff --git a/ebean-api/src/main/java/io/ebean/EbeanServer.java b/ebean-api/src/main/java/io/ebean/EbeanServer.java deleted file mode 100644 index 010dd5a8e..000000000 --- a/ebean-api/src/main/java/io/ebean/EbeanServer.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.ebean; - -/** - * Deprecated - please migrate toio.ebean.Database.
- * Provides the API for fetching and saving beans to a particular Database.
- * - * Effectively this is an alias for {@link Database} which is now the new - * and improved name for EbeanServer. - *
- * The preference is to use DB and Database rather than Ebean and EbeanServer. - */ -@Deprecated -public interface EbeanServer extends Database { - -} diff --git a/ebean-api/src/main/java/io/ebean/EbeanServerFactory.java b/ebean-api/src/main/java/io/ebean/EbeanServerFactory.java deleted file mode 100644 index c774488a0..000000000 --- a/ebean-api/src/main/java/io/ebean/EbeanServerFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -package io.ebean; - -import io.ebean.config.ContainerConfig; -import io.ebean.config.ServerConfig; - -/** - * Deprecated - please migrate to DatabaseFactory. - *
- * Creates EbeanServer instances. - *
- * This uses either a ServerConfig or properties in the ebean.properties file to - * configure and create a EbeanServer instance. - *
- *- * The EbeanServer instance can either be registered with the Ebean singleton or - * not. The Ebean singleton effectively holds a map of EbeanServers by a name. - * If the EbeanServer is registered with the Ebean singleton you can retrieve it - * later via {@link Ebean#getServer(String)}. - *
- *- * One EbeanServer can be nominated as the 'default/primary' EbeanServer. Many - * methods on the Ebean singleton such as {@link Ebean#find(Class)} are just a - * convenient way of using the 'default/primary' EbeanServer. - *
- */ -@Deprecated -public class EbeanServerFactory { - - /** - * Initialise the container with clustering configuration. - *- * Call this prior to creating any EbeanServer instances or alternatively set the - * ContainerConfig on the ServerConfig when creating the first EbeanServer instance. - */ - public static void initialiseContainer(ContainerConfig containerConfig) { - DatabaseFactory.initialiseContainer(containerConfig); - } - - /** - * Create using ebean.properties to configure the database. - */ - public static EbeanServer create(String name) { - return (EbeanServer)DatabaseFactory.create(name); - } - - /** - * Create using the ServerConfig object to configure the database. - */ - public static EbeanServer create(ServerConfig config) { - return (EbeanServer)DatabaseFactory.create(config); - } - - /** - * Create using the ServerConfig additionally specifying a classLoader to use as the context class loader. - */ - public static EbeanServer createWithContextClassLoader(ServerConfig config, ClassLoader classLoader) { - return (EbeanServer)DatabaseFactory.createWithContextClassLoader(config, classLoader); - } - - /** - * Shutdown gracefully all EbeanServers cleaning up any resources as required. - *
- * This is typically invoked via JVM shutdown hook and not explicitly called. - *
- */ - public static void shutdown() { - DatabaseFactory.shutdown(); - } - -} diff --git a/ebean-api/src/main/java/io/ebean/config/ServerConfig.java b/ebean-api/src/main/java/io/ebean/config/ServerConfig.java deleted file mode 100644 index de02ae681..000000000 --- a/ebean-api/src/main/java/io/ebean/config/ServerConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.ebean.config; - -import io.ebean.DatabaseFactory; - -/** - * Deprecated - please migrate toio.ebean.DatabaseConfig.
- *
- * The configuration used for creating a Database.
- * - * Used to programmatically construct a Database and optionally register it - * with the DB singleton. - *
- *- * If you just use DB without this programmatic configuration DB will read - * the application.properties file and take the configuration from there. This usually - * includes searching the class path and automatically registering any entity - * classes and listeners etc. - *
- *{@code
- *
- * ServerConfig config = new ServerConfig();
- *
- * // read the ebean.properties and load
- * // those settings into this serverConfig object
- * config.loadFromProperties();
- *
- * // explicitly register the entity beans to avoid classpath scanning
- * config.addClass(Customer.class);
- * config.addClass(User.class);
- *
- * Database database = DatabaseFactory.create(config);
- *
- * }
- *
- * - * Note that ServerConfigProvider provides a standard Java ServiceLoader mechanism that can - * be used to apply configuration to the ServerConfig. - *
- * - * @author emcgreal - * @author rbygrave - * @see DatabaseFactory - */ -@Deprecated -public class ServerConfig extends DatabaseConfig { - -} diff --git a/ebean-api/src/main/java/io/ebean/config/ServerConfigProvider.java b/ebean-api/src/main/java/io/ebean/config/ServerConfigProvider.java deleted file mode 100644 index 1ba45907d..000000000 --- a/ebean-api/src/main/java/io/ebean/config/ServerConfigProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.ebean.config; - -/** - * Deprecated - migrate to DatabaseConfigProvider. - *- * Provides a ServiceLoader based mechanism to configure a ServerConfig. - *
- * Provide an implementation and register it via the standard Java ServiceLoader mechanism
- * via a file at META-INF/services/io.ebean.config.ServerConfigProvider.
- *
- * If you are using a DI container like Spring or Guice you are unlikely to use this but instead use a - * spring specific configuration. When we are not using a DI container we may use this mechanism to - * explicitly register the entity beans and avoid classpath scanning. - *
- *{@code
- *
- * public class EbeanConfigProvider implements ServerConfigProvider {
- *
- * @Override
- * public void apply(ServerConfig config) {
- *
- * // register the entity bean classes explicitly
- * config.addClass(Customer.class);
- * config.addClass(User.class);
- * ...
- * }
- * }
- *
- * }
- */
-@Deprecated
-public interface ServerConfigProvider {
-
- /**
- * Apply the configuration to the ServerConfig.
- * - * Typically we explicitly register entity bean classes and thus avoid classpath scanning. - *
- */ - void apply(ServerConfig config); -} diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java index 027956e1f..57ca5e9bc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java @@ -23,7 +23,7 @@ import java.util.stream.Stream; /** * Service Provider extension to EbeanServer. */ -public interface SpiEbeanServer extends SpiServer, ExtendedServer, EbeanServer, BeanCollectionLoader { +public interface SpiEbeanServer extends SpiServer, ExtendedServer, BeanCollectionLoader { /** * Return true if the L2 cache has been disabled. @@ -55,7 +55,6 @@ public interface SpiEbeanServer extends SpiServer, ExtendedServer, EbeanServer, ** Typically used to identify the origin of queries for AutoTune and object * graph costing. - *
*/ CallOrigin createCallOrigin(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java index a85444486..b273c031a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/cluster/ClusterManager.java @@ -1,6 +1,6 @@ package io.ebeaninternal.server.cluster; -import io.ebean.EbeanServer; +import io.ebean.Database; import io.ebean.config.ContainerConfig; import io.ebeaninternal.server.transaction.RemoteTransactionEvent; import org.slf4j.Logger; @@ -20,7 +20,7 @@ public class ClusterManager implements ServerLookup { private final ReentrantLock lock = new ReentrantLock(); - private final ConcurrentHashMap