diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index afbd7027e..51105b421 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -311,9 +311,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } private void configureServerPlugins() { - autoTuneService.startup(); - for (Plugin plugin : serverPlugins) { plugin.configure(this); } @@ -323,7 +321,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { * Execute all the plugins with an online flag indicating the DB is up or not. */ public void executePlugins(boolean online) { - if (!serverConfig.isDocStoreOnly()) { ddlGenerator.execute(online); } @@ -471,14 +468,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { * Shutdown the services like threads and DataSource. */ private void shutdownInternal(boolean shutdownDataSource, boolean deregisterDriver) { - logger.debug("Shutting down instance:{}", serverName); if (shutdown) { // already shutdown return; } shutdownPlugins(); - autoTuneService.shutdown(); // shutdown background threads backgroundExecutor.shutdown(); @@ -492,11 +487,9 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } private void shutdownPlugins() { - if (serverConfig.isDumpMetricsOnShutdown()) { new DumpMetrics(this, serverConfig.getDumpMetricsOptions()).dump(); } - for (Plugin plugin : serverPlugins) { try { plugin.shutdown(); @@ -601,7 +594,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (a == null) { return null; } - BeanDescriptor desc = getBeanDescriptor(a.getClass()); return DiffHelp.diff(a, b, desc); } @@ -626,10 +618,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @Override public void externalModification(String tableName, boolean inserts, boolean updates, boolean deletes) { - TransactionEventTable evt = new TransactionEventTable(); evt.add(tableName, inserts, updates, deletes); - externalModification(evt); } @@ -697,14 +687,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override @SuppressWarnings({"unchecked", "rawtypes"}) public T getReference(Class type, Object id) { - if (id == null) { throw new NullPointerException("The id is null"); } - BeanDescriptor desc = getBeanDescriptor(type); id = desc.convertId(id); - PersistenceContext pc = null; SpiTransaction t = transactionManager.getActive(); if (t != null) { @@ -719,12 +706,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (inheritInfo == null || inheritInfo.isConcrete()) { return (T) desc.contextRef(pc, null, false, id); } - BeanProperty idProp = desc.getIdProperty(); if (idProp == null) { throw new PersistenceException("No ID properties for this type? " + desc); } - // we actually need to do a query because we don't know the type without the discriminator // value, just select the id property and discriminator column (auto added) return find(type).select(idProp.getName()).setId(id).findOne(); @@ -769,13 +754,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { ScopedTransaction scopeTrans = transactionManager.beginScopedTransaction(scope); try { return c.call(); - } catch (Error e) { throw scopeTrans.caughtError(e); - } catch (Exception e) { throw new PersistenceException(scopeTrans.caughtThrowable(e)); - } finally { scopeTrans.complete(); } @@ -791,13 +773,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { ScopedTransaction t = transactionManager.beginScopedTransaction(scope); try { r.run(); - } catch (Error e) { throw t.caughtError(e); - } catch (Exception e) { throw new PersistenceException(t.caughtThrowable(e)); - } finally { t.complete(); } @@ -879,7 +858,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override @SuppressWarnings("unchecked") public void sort(List list, String sortByClause) { - if (list == null) { throw new NullPointerException("list is null"); } @@ -901,7 +879,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public Set validateQuery(Query query) { - BeanDescriptor beanDescriptor = getBeanDescriptor(query.getBeanType()); if (beanDescriptor == null) { throw new PersistenceException("BeanDescriptor not found, is [" + query.getBeanType() + "] an entity bean?"); @@ -1010,13 +987,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { String m = beanType.getName() + " is NOT an Entity Bean registered with this server?"; throw new PersistenceException(m); } - return new DefaultOrmUpdate<>(beanType, this, desc.getBaseTable(), ormUpdate); } @Override public DtoQuery findDto(Class dtoType, String sql) { - DtoBeanDescriptor descriptor = dtoBeanManager.getDescriptor(dtoType); return new DefaultDtoQuery<>(this, descriptor, sql.trim()); } @@ -1033,14 +1008,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public DtoQuery findDto(Class dtoType, SpiQuery ormQuery) { - DtoBeanDescriptor descriptor = dtoBeanManager.getDescriptor(dtoType); return new DefaultDtoQuery<>(this, descriptor, ormQuery); } @Override public SpiResultSet findResultSet(SpiQuery ormQuery, SpiTransaction transaction) { - SpiOrmQueryRequest request = createQueryRequest(ormQuery.getType(), ormQuery, transaction); request.initTransIfRequired(); return request.findResultSet(); @@ -1073,7 +1046,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public T find(Class beanType, Object uid) { - return find(beanType, uid, null); } @@ -1082,33 +1054,27 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @Override public T find(Class beanType, Object id, Transaction t) { - if (id == null) { throw new NullPointerException("The id is null"); } - Query query = createQuery(beanType).setId(id); return findId(query, t); } SpiOrmQueryRequest createQueryRequest(Type type, Query query, Transaction t) { - SpiOrmQueryRequest request = buildQueryRequest(type, query, t); request.prepareQuery(); return request; } SpiOrmQueryRequest buildQueryRequest(Type type, Query query, Transaction t) { - SpiQuery spiQuery = (SpiQuery) query; spiQuery.setType(type); spiQuery.checkNamedParameters(); - return buildQueryRequest(spiQuery, t); } private SpiOrmQueryRequest buildQueryRequest(SpiQuery query, Transaction t) { - if (t == null) { t = currentServerTransaction(); } @@ -1118,9 +1084,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { // to define the 'default' select clause query.setDefaultSelectClause(); } - query.selectAllForLazyLoadProperty(); - ProfileLocation profileLocation = query.getProfileLocation(); if (profileLocation != null) { profileLocation.obtain(); @@ -1129,7 +1093,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (query.getParentNode() == null) { query.setOrigin(createCallOrigin()); } - return new OrmQueryRequest<>(this, queryEngine, query, (SpiTransaction) t); } @@ -1138,15 +1101,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @SuppressWarnings("unchecked") private T findIdCheckPersistenceContextAndCache(Transaction transaction, SpiQuery query, Object id) { - SpiTransaction t = (SpiTransaction) transaction; if (t == null) { t = currentServerTransaction(); } - BeanDescriptor desc = query.getBeanDescriptor(); id = desc.convertId(id); - PersistenceContext pc = null; if (t != null && useTransactionPersistenceContext(query)) { // first look in the transaction scoped persistence context @@ -1162,11 +1122,9 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } } } - if (!query.isBeanCacheGet() || (t != null && t.isSkipCache())) { return null; } - // Hit the L2 bean cache return desc.cacheBeanGet(id, query.isReadOnly(), pc); } @@ -1189,7 +1147,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @SuppressWarnings("unchecked") private T findId(Query query, Transaction t) { - SpiQuery spiQuery = (SpiQuery) query; spiQuery.setType(Type.BEAN); if (SpiQuery.Mode.NORMAL == spiQuery.getMode() && !spiQuery.isForceHitDatabase()) { @@ -1200,7 +1157,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { return bean; } } - SpiOrmQueryRequest request = buildQueryRequest(spiQuery, t); request.prepareQuery(); if (request.isUseDocStore()) { @@ -1209,7 +1165,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); return (T) request.findId(); - } finally { request.endTransIfRequired(); } @@ -1222,17 +1177,14 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public T findOne(Query query, Transaction transaction) { - SpiQuery spiQuery = (SpiQuery) query; if (spiQuery.isFindById()) { // actually a find by Id query return findId(query, transaction); } - if (transaction == null) { transaction = currentServerTransaction(); } - // a query that is expected to return either 0 or 1 beans List list = findList(query, transaction, true); return extractUnique(list); @@ -1241,10 +1193,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { private T extractUnique(List list) { if (list.isEmpty()) { return null; - } else if (list.size() > 1) { throw new NonUniqueResultException("Unique expecting 0 or 1 results but got [" + list.size() + "]"); - } else { return list.get(0); } @@ -1253,7 +1203,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override @SuppressWarnings({"unchecked", "rawtypes"}) public Set findSet(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.SET, query, t); Object result = request.getFromQueryCache(); if (result != null) { @@ -1270,7 +1219,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override @SuppressWarnings({"unchecked", "rawtypes"}) public Map findMap(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.MAP, query, t); request.resetBeanCacheAutoMode(false); if ((t == null || !t.isSkipCache()) && request.getFromBeanCache()) { @@ -1292,7 +1240,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override @SuppressWarnings("unchecked") public List findSingleAttributeList(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.ATTRIBUTE, query, t); Object result = request.getFromQueryCache(); if (result != null) { @@ -1301,7 +1248,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); return (List) request.findSingleAttributeList(); - } finally { request.endTransIfRequired(); } @@ -1309,7 +1255,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public int findCount(Query query, Transaction t) { - SpiQuery spiQuery = ((SpiQuery) query); if (!spiQuery.isDistinct()) { spiQuery = spiQuery.copy(); @@ -1319,7 +1264,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public int findCountWithCopy(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.COUNT, query, t); Integer result = request.getFromQueryCache(); if (result != null) { @@ -1328,7 +1272,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); return request.findCount(); - } finally { request.endTransIfRequired(); } @@ -1342,7 +1285,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public boolean exists(Query ormQuery, Transaction transaction) { - Query ormQueryCopy = ormQuery.copy(); ormQueryCopy.setMaxRows(1); SpiOrmQueryRequest request = createQueryRequest(Type.ID_LIST, ormQueryCopy, transaction); @@ -1350,7 +1292,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { request.initTransIfRequired(); List ids = request.findIds(); return !ids.isEmpty(); - } finally { request.endTransIfRequired(); } @@ -1358,14 +1299,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public List findIds(Query query, Transaction t) { - return findIdsWithCopy(((SpiQuery) query).copy(), t); } @SuppressWarnings("unchecked") @Override public List findIdsWithCopy(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.ID_LIST, query, t); Object result = request.getFromQueryCache(); if (result != null) { @@ -1378,7 +1317,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); return request.findIds(); - } finally { request.endTransIfRequired(); } @@ -1386,7 +1324,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public int delete(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.DELETE, query, t); try { request.initTransIfRequired(); @@ -1410,7 +1347,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public int update(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.UPDATE, query, t); try { request.initTransIfRequired(); @@ -1423,82 +1359,60 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public FutureRowCount findFutureCount(Query q, Transaction t) { - SpiQuery copy = ((SpiQuery) q).copy(); copy.setFutureFetch(true); - Transaction newTxn = createTransaction(); - - CallableQueryCount call = new CallableQueryCount<>(this, copy, newTxn); - - QueryFutureRowCount queryFuture = new QueryFutureRowCount<>(call); + QueryFutureRowCount queryFuture = new QueryFutureRowCount<>(new CallableQueryCount(this, copy, newTxn)); backgroundExecutor.execute(queryFuture.getFutureTask()); - return queryFuture; } @Override public FutureIds findFutureIds(Query query, Transaction t) { - SpiQuery copy = ((SpiQuery) query).copy(); copy.setFutureFetch(true); - Transaction newTxn = createTransaction(); - - CallableQueryIds call = new CallableQueryIds<>(this, copy, newTxn); - QueryFutureIds queryFuture = new QueryFutureIds<>(call); - + QueryFutureIds queryFuture = new QueryFutureIds<>(new CallableQueryIds(this, copy, newTxn)); backgroundExecutor.execute(queryFuture.getFutureTask()); - return queryFuture; } @Override public FutureList findFutureList(Query query, Transaction t) { - SpiQuery spiQuery = (SpiQuery) query; spiQuery.setFutureFetch(true); - // FutureList query always run in it's own persistence content spiQuery.setPersistenceContext(new DefaultPersistenceContext()); - if (!spiQuery.isDisableReadAudit()) { BeanDescriptor desc = beanDescriptorManager.getBeanDescriptor(spiQuery.getBeanType()); desc.readAuditFutureList(spiQuery); } - // Create a new transaction solely to execute the findList() at some future time Transaction newTxn = createTransaction(); - CallableQueryList call = new CallableQueryList<>(this, spiQuery, newTxn); - QueryFutureList queryFuture = new QueryFutureList<>(call); + QueryFutureList queryFuture = new QueryFutureList<>(new CallableQueryList(this, spiQuery, newTxn)); backgroundExecutor.execute(queryFuture.getFutureTask()); return queryFuture; } @Override public PagedList findPagedList(Query query, Transaction transaction) { - SpiQuery spiQuery = (SpiQuery) query; int maxRows = spiQuery.getMaxRows(); if (maxRows == 0) { throw new PersistenceException("maxRows must be specified for findPagedList() query"); } - if (spiQuery.isUseDocStore()) { return docStore().findPagedList(createQueryRequest(Type.LIST, query, transaction)); } - return new LimitOffsetPagedList<>(this, spiQuery); } @Override public QueryIterator findIterate(Query query, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.ITERATE, query, t); try { request.initTransIfRequired(); return request.findIterate(); - } catch (RuntimeException ex) { request.endTransIfRequired(); throw ex; @@ -1542,14 +1456,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public void findEach(Query query, Consumer consumer, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.ITERATE, query, t); - if (request.isUseDocStore()) { docStore().findEach(request, consumer); return; } - request.initTransIfRequired(); request.findEach(consumer); // no try finally - findEach guarantee's cleanup of the transaction if required @@ -1557,13 +1468,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public void findEachWhile(Query query, Predicate consumer, Transaction t) { - SpiOrmQueryRequest request = createQueryRequest(Type.ITERATE, query, t); if (request.isUseDocStore()) { docStore().findEachWhile(request, consumer); return; } - request.initTransIfRequired(); request.findEachWhile(consumer); // no try finally - findEachWhile guarantee's cleanup of the transaction if required @@ -1571,12 +1480,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public List> findVersions(Query query, Transaction transaction) { - SpiOrmQueryRequest request = createQueryRequest(Type.LIST, query, transaction); try { request.initTransIfRequired(); return request.findVersions(); - } finally { request.endTransIfRequired(); } @@ -1589,14 +1496,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @SuppressWarnings("unchecked") private List findList(Query query, Transaction t, boolean findOne) { - SpiOrmQueryRequest request = buildQueryRequest(Type.LIST, query, t); request.resetBeanCacheAutoMode(findOne); if ((t == null || !t.isSkipCache()) && request.getFromBeanCache()) { // hit bean cache and got all results from cache return request.getBeanCacheHits(); } - request.prepareQuery(); Object result = request.getFromQueryCache(); if (result != null) { @@ -1605,11 +1510,9 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (request.isUseDocStore()) { return docStore().findList(request); } - try { request.initTransIfRequired(); return request.findList(); - } finally { request.endTransIfRequired(); } @@ -1617,7 +1520,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public SqlRow findOne(SqlQuery query, Transaction t) { - // no findId() method for SqlQuery... // a query that is expected to return either 0 or 1 rows List list = findList(query, t); @@ -1626,7 +1528,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public void findEach(SqlQuery query, Consumer consumer, Transaction transaction) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction); try { request.initTransIfRequired(); @@ -1638,7 +1539,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public void findEachWhile(SqlQuery query, Predicate consumer, Transaction transaction) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction); try { request.initTransIfRequired(); @@ -1650,12 +1550,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public List findList(SqlQuery query, Transaction t) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, t); try { request.initTransIfRequired(); return request.findList(); - } finally { request.endTransIfRequired(); } @@ -1702,7 +1600,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); request.findEach(consumer); - } finally { request.endTransIfRequired(); } @@ -1714,7 +1611,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); request.findEachWhile(consumer); - } finally { request.endTransIfRequired(); } @@ -1726,7 +1622,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); return request.findList(); - } finally { request.endTransIfRequired(); } @@ -1738,7 +1633,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { try { request.initTransIfRequired(); return extractUnique(request.findList()); - } finally { request.endTransIfRequired(); } @@ -1789,7 +1683,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @Override public void updateAll(Collection beans, Transaction transaction) { - if (beans == null || beans.isEmpty()) { return; } @@ -1830,7 +1723,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @Override public void insertAll(Collection beans, Transaction transaction) { - if (beans == null || beans.isEmpty()) { return; } @@ -1844,7 +1736,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public List publish(Query query, Transaction transaction) { - return executeInTrans((txn) -> persister.publish(query, txn), transaction); } @@ -1860,7 +1751,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public T publish(Class beanType, Object id, Transaction transaction) { - Query query = find(beanType).setId(id); List liveBeans = publish(query, transaction); return (liveBeans.size() == 1) ? liveBeans.get(0) : null; @@ -1868,13 +1758,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public List draftRestore(Query query, Transaction transaction) { - return executeInTrans((txn) -> persister.draftRestore(query, txn), transaction); } @Override public T draftRestore(Class beanType, Object id, Transaction transaction) { - Query query = find(beanType).setId(id); List beans = draftRestore(query, transaction); return (beans.size() == 1) ? beans.get(0) : null; @@ -1919,7 +1807,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { * Save all beans in the iterator with an explicit transaction. */ private int saveAllInternal(Collection beans, Transaction transaction) { - if (beans == null || beans.isEmpty()) { return 0; } @@ -1930,7 +1817,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { persister.save(checkEntityBean(bean), txn); saveCount++; } - txn.flushBatchOnCollection(); return saveCount; }, transaction); @@ -1957,7 +1843,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } private int delete(Class beanType, Object id, Transaction transaction, boolean permanent) { - return executeInTrans((txn) -> persister.delete(beanType, id, txn, permanent), transaction); } @@ -2043,19 +1928,16 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { * Delete all the beans in the iterator with an explicit transaction. */ private int deleteAllInternal(Collection beans, Transaction transaction, boolean permanent) { - if (beans == null || beans.isEmpty()) { return 0; } return executeInTrans((txn) -> { - txn.checkBatchEscalationOnCollection(); int deleteCount = 0; for (Object bean : beans) { persister.delete(checkEntityBean(bean), txn, permanent); deleteCount++; } - txn.flushBatchOnCollection(); return deleteCount; }, transaction); @@ -2156,7 +2038,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public boolean isSupportedType(java.lang.reflect.Type genericType) { - TypeInfo typeInfo = ParamTypeHelper.getTypeInfo(genericType); return typeInfo != null && getBeanDescriptor(typeInfo.getBeanType()) != null; } @@ -2279,7 +2160,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { P result = fun.apply(wrap.transaction()); wrap.commitIfCreated(); return result; - } catch (RuntimeException e) { wrap.endIfCreated(); throw e; @@ -2292,7 +2172,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { * Create a transaction if one is not currently active. */ ObtainedTransaction initTransIfRequired(Transaction t) { - if (t != null) { return new ObtainedTransaction((SpiTransaction) t); } @@ -2361,16 +2240,13 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public Set checkUniqueness(Object bean, Transaction transaction) { - EntityBean entityBean = checkEntityBean(bean); BeanDescriptor beanDesc = getBeanDescriptor(entityBean.getClass()); - BeanProperty idProperty = beanDesc.getIdProperty(); // if the ID of the Property is null we are unable to check uniqueness if (idProperty == null) { return Collections.emptySet(); } - Object id = idProperty.getVal(entityBean); if (entityBean._ebean_getIntercept().isNew() && id != null) { // Primary Key is changeable only on new models - so skip check if we are not @@ -2383,7 +2259,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { return ret; } } - for (BeanProperty[] props : beanDesc.getUniqueProps()) { Set ret = checkUniqueness(entityBean, beanDesc, props, transaction); if (ret != null) { @@ -2400,12 +2275,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { BeanProperty idProperty = beanDesc.getIdProperty(); Query query = new DefaultOrmQuery<>(beanDesc, this, expressionFactory); ExpressionList exprList = query.where(); - if (!entityBean._ebean_getIntercept().isNew()) { // if model is not new, exclude ourself. exprList.ne(idProperty.getName(), idProperty.getVal(entityBean)); } - for (Property prop : props) { Object value = prop.getVal(entityBean); if (value == null) { @@ -2413,7 +2286,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } exprList.eq(prop.getName(), value); } - if (findCount(query, transaction) > 0) { Set ret = new LinkedHashSet<>(); Collections.addAll(ret, props); diff --git a/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java index 70c43da8b..e2ee4db98 100644 --- a/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java @@ -188,7 +188,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP public PersistRequestBean(SpiEbeanServer server, T bean, Object parentBean, BeanManager mgr, SpiTransaction t, PersistExecute persistExecute, PersistRequest.Type type, int flags) { - super(server, t, persistExecute); this.entityBean = (EntityBean) bean; this.intercept = entityBean._ebean_getIntercept(); @@ -204,7 +203,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP if (Flags.isRecurse(flags)) { this.persistCascade = t.isPersistCascade(); } - if (this.type == Type.UPDATE) { if (intercept.isNew()) { // 'stateless update' - set loaded properties as dirty @@ -279,7 +277,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Init the transaction and also check for batch on cascade escalation. */ public void initTransIfRequiredWithBatchCascade() { - if (createImplicitTransIfRequired()) { docStoreMode = calcDocStoreMode(transaction, type); } @@ -317,9 +314,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP } private void onUpdateGeneratedProperties() { - for (BeanProperty prop : beanDescriptor.propertiesGenUpdate()) { - GeneratedProperty generatedProperty = prop.getGeneratedProperty(); if (prop.isVersion()) { if (isLoadedProperty(prop)) { @@ -451,7 +446,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Return true if any of the given properties are dirty. */ public boolean hasDirtyProperty(int[] propertyPositions) { - for (int propertyPosition : propertyPositions) { if (dirtyProperties[propertyPosition]) { return true; @@ -517,7 +511,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP */ @Override public void docStoreUpdate(DocStoreUpdateContext txn) throws IOException { - switch (type) { case INSERT: beanDescriptor.docStoreInsert(idValue, this, txn); @@ -554,7 +547,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP } public void addToPersistMap(BeanPersistIdMap beanPersistMap) { - beanPersistMap.add(beanDescriptor, type, idValue); } @@ -564,19 +556,15 @@ public final class PersistRequestBean extends PersistRequest implements BeanP case INSERT: beanPersistListener.inserted(bean); break; - case UPDATE: beanPersistListener.updated(bean, updatedProperties); break; - case DELETE: beanPersistListener.deleted(bean); break; - case DELETE_SOFT: beanPersistListener.softDeleted(bean); break; - default: } } @@ -785,7 +773,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP case INSERT: executeInsert(); return -1; - case UPDATE: if (beanPersistListener != null) { // store the updated properties for sending later @@ -793,15 +780,12 @@ public final class PersistRequestBean extends PersistRequest implements BeanP } executeUpdate(); return -1; - case DELETE_SOFT: prepareForSoftDelete(); executeSoftDelete(); return -1; - case DELETE: return executeDelete(); - default: throw new RuntimeException("Invalid type " + type); } @@ -811,13 +795,11 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Soft delete is executed as update so we want to set deleted=true property. */ private void prepareForSoftDelete() { - beanDescriptor.setSoftDeleteValue(entityBean); } @Override public int executeOrQueue() { - boolean batch = isBatchThisRequest(); try { BatchControl control = transaction.getBatchControl(); @@ -827,7 +809,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP if (batch) { control = persistExecute.createBatchControl(transaction); return control.executeOrQueue(this, true); - } else { return executeNoBatch(); } @@ -926,7 +907,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP controllerPost(); } setNotifyCache(); - boolean isChangeLog = beanDescriptor.isChangeLog(); if (type == Type.UPDATE && (isChangeLog || notifyCache || docStoreMode == DocStoreMode.UPDATE)) { // get the dirty properties for update notification to the doc store @@ -935,16 +915,13 @@ public final class PersistRequestBean extends PersistRequest implements BeanP if (isChangeLog) { changeLog(); } - // if bean persisted again then should result in an update intercept.setLoaded(); if (isInsert()) { postInsert(); } - addPostCommitListeners(); notifyCacheOnPostExecute(); - if (isLogSummary()) { logSummary(); } @@ -994,7 +971,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP } private void logSummary() { - String draft = (beanDescriptor.isDraftable() && !publish) ? " draft[true]" : ""; String name = beanDescriptor.getName(); switch (type) { @@ -1136,7 +1112,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * of queue events or list of update events. */ public void addDocStoreUpdates(DocStoreUpdates docStoreUpdates) { - if (type == Type.UPDATE) { beanDescriptor.docStoreUpdateEmbedded(this, docStoreUpdates); } @@ -1165,7 +1140,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP *

*/ private boolean determineUpdateAllLoadedProperties() { - Boolean txnUpdateAll = transaction.isUpdateAllLoadedProperties(); if (txnUpdateAll != null) { // use the setting explicitly set on the transaction @@ -1174,7 +1148,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP // if using batch use the server default setting requestUpdateAllLoadedProps = isBatchThisRequest() && ebeanServer.isUpdateAllPropertiesInBatch(); } - return requestUpdateAllLoadedProps; } @@ -1196,25 +1169,21 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Return the key for an update persist request. */ public String getUpdatePlanHash() { - StringBuilder key; if (determineUpdateAllLoadedProperties()) { key = intercept.getLoadedPropertyKey(); } else { key = intercept.getDirtyPropertyKey(); } - BeanProperty versionProperty = beanDescriptor.getVersionProperty(); if (versionProperty != null) { if (intercept.isLoadedProperty(versionProperty.getPropertyIndex())) { key.append('v'); } } - if (publish) { key.append('p'); } - return key.toString(); } @@ -1380,13 +1349,10 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Build the bean update for the L2 cache. */ public void addBeanUpdate(CacheChangeSet changeSet) { - if (!updatedManysOnly || collectionChanges != null) { - boolean updateNaturalKey = false; String key = beanDescriptor.cacheKey(idValue); - Map changes = new LinkedHashMap<>(); EntityBean bean = getEntityBean(); boolean[] dirtyProperties = getDirtyProperties(); @@ -1410,7 +1376,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP // add element collection update changes.putAll(collectionChanges); } - changeSet.addBeanUpdate(beanDescriptor, key, changes, updateNaturalKey, getVersion()); } }