regionMap = new HashMap<>();
-
private final ClusterManager clusterManager;
-
private final DefaultCacheHolder cacheHolder;
-
private final boolean localL2Caching;
-
private final String serverName;
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCachePlugin.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCachePlugin.java
index 262aa8bf2..d4a6a247f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCachePlugin.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCachePlugin.java
@@ -8,7 +8,7 @@ import io.ebean.config.DatabaseConfig;
/**
* Default implementation of ServerCachePlugin.
*/
-public class DefaultServerCachePlugin implements ServerCachePlugin {
+public final class DefaultServerCachePlugin implements ServerCachePlugin {
/**
* Creates the default ServerCacheFactory.
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 afbdb37f7..4f437eafc 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
@@ -3,6 +3,8 @@ package io.ebeaninternal.server.cache;
import io.ebean.cache.QueryCacheEntry;
import io.ebean.cache.QueryCacheEntryValidate;
+import java.lang.ref.SoftReference;
+
/**
* Server cache for query caching.
*
@@ -27,7 +29,8 @@ public class DefaultServerQueryCache extends DefaultServerCache {
@Override
protected CacheEntry getCacheEntry(Object id) {
Object key = key(id);
- CacheEntry entry = map.get(key);
+ final SoftReference ref = map.get(key);
+ CacheEntry entry = ref != null ? ref.get() : null;
if (entry == null) {
return null;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java
index ef327d69e..21f04704d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/RemoteCacheEvent.java
@@ -12,11 +12,10 @@ import java.util.List;
/**
* Cache events broadcast across the cluster.
*/
-public class RemoteCacheEvent implements BinaryWritable {
+public final class RemoteCacheEvent implements BinaryWritable {
- private boolean clearAll;
-
- private List clearCaches;
+ private final boolean clearAll;
+ private final List clearCaches;
/**
* Clear all the caches.
@@ -57,10 +56,8 @@ public class RemoteCacheEvent implements BinaryWritable {
}
public static RemoteCacheEvent readBinaryMessage(BinaryReadContext dataInput) throws IOException {
-
boolean clearAll = dataInput.readBoolean();
int size = dataInput.readInt();
-
List clearCache = null;
if (size > 0) {
clearCache = new ArrayList<>(size);
@@ -68,7 +65,6 @@ public class RemoteCacheEvent implements BinaryWritable {
clearCache.add(dataInput.readUTF());
}
}
-
return new RemoteCacheEvent(clearAll, clearCache);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java
index 372de9589..f399b78ad 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java
@@ -14,21 +14,14 @@ import java.util.Map;
/**
* Builds JSON document for a bean change.
*/
-class ChangeJsonBuilder {
+final class ChangeJsonBuilder {
- protected final JsonFactory jsonFactory = new JsonFactory();
-
- protected final JsonContext json;
-
- ChangeJsonBuilder(JsonContext json) {
- this.json = json;
- }
+ private final JsonFactory jsonFactory = new JsonFactory();
/**
* Write the bean change as JSON.
*/
void writeBeanJson(Writer writer, BeanChange bean, ChangeSet changeSet) throws IOException {
-
try (JsonGenerator generator = jsonFactory.createGenerator(writer)) {
writeBeanChange(generator, bean, changeSet);
generator.flush();
@@ -39,9 +32,7 @@ class ChangeJsonBuilder {
* Write the bean change as JSON document containing the transaction header details.
*/
private void writeBeanChange(JsonGenerator gen, BeanChange bean, ChangeSet changeSet) throws IOException {
-
gen.writeStartObject();
-
gen.writeNumberField("ts", bean.getEventTime());
gen.writeStringField("change", bean.getEvent().getCode());
gen.writeStringField("type", bean.getType());
@@ -49,9 +40,7 @@ class ChangeJsonBuilder {
if (bean.getTenantId() != null) {
gen.writeStringField("tenantId", bean.getTenantId().toString());
}
-
writeBeanTransactionDetails(gen, changeSet);
-
writeBeanValues(gen, bean);
gen.writeEndObject();
}
@@ -60,7 +49,6 @@ class ChangeJsonBuilder {
* Denormalise by writing the transaction header details.
*/
private void writeBeanTransactionDetails(JsonGenerator gen, ChangeSet changeSet) throws IOException {
-
String source = changeSet.getSource();
if (source != null) {
gen.writeStringField("source", source);
@@ -87,12 +75,10 @@ class ChangeJsonBuilder {
* For insert and update write the new/old values.
*/
private void writeBeanValues(JsonGenerator gen, BeanChange bean) throws IOException {
-
if (bean.getEvent() != ChangeType.DELETE) {
gen.writeFieldName("data");
gen.writeRaw(":");
gen.writeRaw(bean.getData());
-
String oldData = bean.getOldData();
if (oldData != null) {
gen.writeRaw(",\"oldData\":");
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java
index 0168fa222..6e12aa31d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java
@@ -15,12 +15,12 @@ import java.util.Properties;
/**
* Simply logs the change sets in JSON form to logger named io.ebean.ChangeLog.
*/
-public class DefaultChangeLogListener implements ChangeLogListener, Plugin {
+public final class DefaultChangeLogListener implements ChangeLogListener, Plugin {
/**
* The usual application specific logger.
*/
- protected static final Logger logger = LoggerFactory.getLogger(DefaultChangeLogListener.class);
+ private static final Logger logger = LoggerFactory.getLogger(DefaultChangeLogListener.class);
/**
* The named logger we send the change set payload to. Can be externally configured as desired.
@@ -45,8 +45,7 @@ public class DefaultChangeLogListener implements ChangeLogListener, Plugin {
*/
@Override
public void configure(SpiServer server) {
- jsonBuilder = new ChangeJsonBuilder(server.json());
-
+ jsonBuilder = new ChangeJsonBuilder();
Properties properties = server.getServerConfig().getProperties();
if (properties != null) {
String bufferSize = properties.getProperty("ebean.changeLog.bufferSize");
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java
index 16af27424..596d4d331 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java
@@ -11,7 +11,7 @@ import io.ebean.event.changelog.ChangeSet;
* on the changeSet.
*
*/
-public class DefaultChangeLogPrepare implements ChangeLogPrepare {
+public final class DefaultChangeLogPrepare implements ChangeLogPrepare {
/**
* Just return true to send change set through to the logger.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java
index a6208a703..e7a7bf303 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java
@@ -14,10 +14,9 @@ import java.util.Set;
/**
* Default implementation of ChangeLogRegister.
*/
-public class DefaultChangeLogRegister implements ChangeLogRegister {
+public final class DefaultChangeLogRegister implements ChangeLogRegister {
private static final BasicFilter INCLUDE_INSERTS = new BasicFilter(true);
-
private static final BasicFilter EXCLUDE_INSERTS = new BasicFilter(false);
private final boolean defaultInsertsInclude;
@@ -31,20 +30,16 @@ public class DefaultChangeLogRegister implements ChangeLogRegister {
@Override
public ChangeLogFilter getChangeFilter(Class> beanType) {
-
ChangeLog changeLog = getChangeLog(beanType);
if (changeLog == null) {
return null;
}
-
String[] updatesThatInclude = changeLog.updatesThatInclude();
if (updatesThatInclude.length == 0) {
return insertModeInclude(changeLog.inserts()) ? INCLUDE_INSERTS : EXCLUDE_INSERTS;
}
-
Set updateProps = new HashSet<>();
Collections.addAll(updateProps, updatesThatInclude);
-
return new UpdateFilter(insertModeInclude(changeLog.inserts()), updateProps);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java
index 75963723e..8659fabfd 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java
@@ -33,7 +33,7 @@ public final class BindPadding {
* Extra padding on binding id's in order to get better hit ratio on DB prepared statements / query plans.
*/
static int padding(int size) {
- if (size == 1) {
+ if (size <= 1) {
return 0;
}
if (size <= 5) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java
index 8bf649438..cb78076bc 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java
@@ -17,7 +17,7 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
-class DScriptRunner implements ScriptRunner {
+final class DScriptRunner implements ScriptRunner {
private static final String NEWLINE = "\n";
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
index a96907848..9a7c54034 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
@@ -36,9 +36,8 @@ import java.sql.SQLException;
/**
* Create a DatabasePlatform from the configuration.
*
- * Will used platform name or use the meta data from the JDBC driver to
+ * Will used platform name or use the metadata from the JDBC driver to
* determine the platform automatically.
- *
*/
public class DatabasePlatformFactory {
@@ -54,14 +53,12 @@ public class DatabasePlatformFactory {
logger.info("offline platform [{}]", offlinePlatform);
return byDatabaseName(offlinePlatform);
}
-
if (config.getDatabasePlatformName() != null) {
// choose based on dbName
return byDatabaseName(config.getDatabasePlatformName());
}
-
if (config.getDataSourceConfig().isOffline()) {
- throw new PersistenceException("You must specify a DatabasePlatformName when you are offline");
+ throw new PersistenceException("DatabasePlatformName must be specified with offline mode");
}
// guess using meta data from driver
return byDataSource(config.getDataSource());
@@ -142,10 +139,10 @@ public class DatabasePlatformFactory {
* Find the platform by the metaData.getDatabaseProductName().
*/
private DatabasePlatform byDatabaseMeta(DatabaseMetaData metaData, Connection connection) throws SQLException {
-
String dbProductName = metaData.getDatabaseProductName().toLowerCase();
final int majorVersion = metaData.getDatabaseMajorVersion();
final int minorVersion = metaData.getDatabaseMinorVersion();
+ logger.debug("platform for productName[{}] version[{}.{}]", dbProductName, majorVersion, minorVersion);
if (dbProductName.contains("oracle")) {
return oracleVersion(majorVersion);
@@ -206,7 +203,6 @@ public class DatabasePlatformFactory {
} catch (SQLException e) {
logger.warn("Error running detection query on Postgres", e);
}
-
if (majorVersion <= 9) {
return new Postgres9Platform();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java
index 34417ed14..4d0409d4c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java
@@ -26,12 +26,11 @@ import java.util.List;
/**
* Helper to handle lazy loading and refreshing of beans.
*/
-class DefaultBeanLoader {
+final class DefaultBeanLoader {
private static final Logger logger = LoggerFactory.getLogger(DefaultBeanLoader.class);
private final DefaultServer server;
-
private final boolean onIterateUseExtraTxn;
DefaultBeanLoader(DefaultServer server) {
@@ -40,17 +39,14 @@ class DefaultBeanLoader {
}
void loadMany(LoadManyRequest loadRequest) {
-
SpiQuery> query = loadRequest.createQuery(server);
executeQuery(loadRequest, query);
loadRequest.postLoad();
}
void loadMany(BeanCollection> bc, boolean onlyIds) {
-
EntityBean parentBean = bc.getOwnerBean();
String propertyName = bc.getPropertyName();
-
loadManyInternal(parentBean, propertyName, null, false, onlyIds);
}
@@ -59,13 +55,10 @@ class DefaultBeanLoader {
}
private void loadManyInternal(EntityBean parentBean, String propertyName, Transaction t, boolean refresh, boolean onlyIds) {
-
EntityBeanIntercept ebi = parentBean._ebean_getIntercept();
PersistenceContext pc = ebi.getPersistenceContext();
-
BeanDescriptor> parentDesc = server.getBeanDescriptor(parentBean.getClass());
BeanPropertyAssocMany> many = (BeanPropertyAssocMany>) parentDesc.getBeanProperty(propertyName);
-
BeanCollection> beanCollection = null;
ExpressionList> filterMany = null;
@@ -126,7 +119,6 @@ class DefaultBeanLoader {
}
server.findOne(query, t);
-
if (beanCollection != null) {
if (beanCollection.checkEmptyLazyLoad()) {
if (logger.isDebugEnabled()) {
@@ -142,7 +134,6 @@ class DefaultBeanLoader {
* Load a batch of beans for +query or +lazy loading.
*/
void loadBean(LoadBeanRequest loadRequest) {
-
List batch = loadRequest.getBatch();
if (batch.isEmpty()) {
throw new RuntimeException("Nothing in batch?");
@@ -190,7 +181,6 @@ class DefaultBeanLoader {
}
private void refreshBeanInternal(EntityBean bean, SpiQuery.Mode mode, int embeddedOwnerIndex) {
-
EntityBeanIntercept ebi = bean._ebean_getIntercept();
PersistenceContext pc = ebi.getPersistenceContext();
if (Mode.REFRESH_BEAN == mode) {
@@ -203,12 +193,10 @@ class DefaultBeanLoader {
// lazy loading on an embedded bean property
EntityBean embeddedOwner = (EntityBean) ebi.getEmbeddedOwner();
int ownerIndex = ebi.getEmbeddedOwnerIndex();
-
refreshBeanInternal(embeddedOwner, mode, ownerIndex);
}
Object id = desc.getId(bean);
-
if (pc == null) {
// a reference with no existing persistenceContext
pc = new DefaultPersistenceContext();
@@ -216,7 +204,6 @@ class DefaultBeanLoader {
ebi.setPersistenceContext(pc);
}
boolean draft = desc.isDraftInstance(bean);
-
if (embeddedOwnerIndex == -1) {
if (desc.lazyLoadMany(ebi)) {
return;
@@ -246,16 +233,13 @@ class DefaultBeanLoader {
query.setPersistenceContext(pc);
query.setMode(mode);
query.setId(id);
-
if (embeddedOwnerIndex > -1 || mode == Mode.REFRESH_BEAN) {
// make sure the query doesn't use the cache
query.setUseCache(false);
}
-
if (ebi.isReadOnly()) {
query.setReadOnly(true);
}
-
if (Mode.REFRESH_BEAN == mode) {
// explicitly state to load all properties on REFRESH.
// Lobs default to fetch lazy so this forces lobs to be
@@ -268,7 +252,6 @@ class DefaultBeanLoader {
String msg = "Bean not found during lazy load or refresh." + " id[" + id + "] type[" + desc.getBeanType() + "]";
throw new EntityNotFoundException(msg);
}
-
desc.resetManyProperties(dbBean);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java
index 22f2b7ae8..5bedf1355 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java
@@ -11,7 +11,7 @@ import java.util.Set;
/**
* Default implementation of BeanState.
*/
-public class DefaultBeanState implements BeanState {
+public final class DefaultBeanState implements BeanState {
private final EntityBeanIntercept intercept;
@@ -94,4 +94,8 @@ public class DefaultBeanState implements BeanState {
return intercept.getLoadErrors();
}
+ @Override
+ public int getSortOrder() {
+ return intercept.getSortOrder();
+ }
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java
index 249f4dbdb..233a2a920 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java
@@ -8,7 +8,7 @@ import java.util.Arrays;
/**
* Default CallStackFactory where the Hash function for StackTraceElement includes the line number.
*/
-public class DefaultCallOriginFactory implements CallOriginFactory {
+public final class DefaultCallOriginFactory implements CallOriginFactory {
private static final int IGNORE_LEADING_ELEMENTS = 5;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java
index f41919ce2..fe7b18392 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java
@@ -12,7 +12,7 @@ import java.sql.CallableStatement;
import java.sql.SQLException;
-public class DefaultCallableSql implements Serializable, SpiCallableSql {
+public final class DefaultCallableSql implements Serializable, SpiCallableSql {
private static final long serialVersionUID = 8984272253185424701L;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
index 2c8bbfecc..348fd2f32 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
@@ -32,9 +32,9 @@ import java.util.concurrent.locks.ReentrantLock;
/**
* Default Server side implementation of ServerFactory.
*/
-public class DefaultContainer implements SpiContainer {
+public final class DefaultContainer implements SpiContainer {
- private static final Logger logger = LoggerFactory.getLogger("io.ebean.internal.DefaultContainer");
+ private static final Logger logger = LoggerFactory.getLogger("io.ebean.DB");
private final ReentrantLock lock = new ReentrantLock();
private final ClusterManager clusterManager;
@@ -77,9 +77,10 @@ public class DefaultContainer implements SpiContainer {
public SpiEbeanServer createServer(DatabaseConfig config) {
lock.lock();
try {
+ long start = System.currentTimeMillis();
applyConfigServices(config);
setNamingConvention(config);
- BootupClasses bootupClasses = getBootupClasses(config);
+ BootupClasses bootupClasses = bootupClasses(config);
boolean online = true;
if (config.isDocStoreOnly()) {
@@ -101,22 +102,18 @@ public class DefaultContainer implements SpiContainer {
// use a configured DbEncrypt rather than the platform default
config.getDatabasePlatform().setDbEncrypt(config.getDbEncrypt());
}
-
// inform the NamingConvention of the associated DatabasePlatform
config.getNamingConvention().setDatabasePlatform(config.getDatabasePlatform());
-
// executor and l2 caching service setup early (used during server construction)
SpiBackgroundExecutor executor = createBackgroundExecutor(config);
InternalConfiguration c = new InternalConfiguration(online, clusterManager, executor, config, bootupClasses);
-
DefaultServer server = new DefaultServer(c, c.cacheManager());
-
- // generate and run DDL if required
- // if there are any other tasks requiring action in their plugins, do them as well
+ // generate and run DDL if required plus other plugins
if (!DbOffline.isGenerateMigration()) {
startServer(online, server);
}
DbOffline.reset();
+ logger.info("started database[{}] platform[{}] in {}ms", config.getName(), config.getDatabasePlatform().getPlatform(), System.currentTimeMillis() - start);
return server;
} finally {
lock.unlock();
@@ -161,9 +158,8 @@ public class DefaultContainer implements SpiContainer {
* Get the entities, scalarTypes, Listeners etc combining the class registered
* ones with the already created instances.
*/
- private BootupClasses getBootupClasses(DatabaseConfig config) {
-
- BootupClasses bootup = getBootupClasses1(config);
+ private BootupClasses bootupClasses(DatabaseConfig config) {
+ BootupClasses bootup = bootupClasses1(config);
bootup.addIdGenerators(config.getIdGenerators());
bootup.addPersistControllers(config.getPersistControllers());
bootup.addPostLoaders(config.getPostLoaders());
@@ -173,7 +169,6 @@ public class DefaultContainer implements SpiContainer {
bootup.addQueryAdapters(config.getQueryAdapters());
bootup.addServerConfigStartup(config.getServerConfigStartupListeners());
bootup.addChangeLogInstances(config);
-
bootup.runServerConfigStartup(config);
return bootup;
}
@@ -181,14 +176,12 @@ public class DefaultContainer implements SpiContainer {
/**
* Get the class based entities, scalarTypes, Listeners etc.
*/
- private BootupClasses getBootupClasses1(DatabaseConfig config) {
-
+ private BootupClasses bootupClasses1(DatabaseConfig config) {
List> entityClasses = config.getClasses();
if (config.isDisableClasspathSearch() || (entityClasses != null && !entityClasses.isEmpty())) {
// use classes we explicitly added via configuration
return new BootupClasses(entityClasses);
}
-
return BootupClassPathSearch.search(config);
}
@@ -205,7 +198,6 @@ public class DefaultContainer implements SpiContainer {
* Set the DatabasePlatform if it has not already been set.
*/
private void setDatabasePlatform(DatabaseConfig config) {
-
DatabasePlatform platform = config.getDatabasePlatform();
if (platform == null) {
if (config.getTenantMode().isDynamicDataSource()) {
@@ -215,7 +207,6 @@ public class DefaultContainer implements SpiContainer {
platform = new DatabasePlatformFactory().create(config);
config.setDatabasePlatform(platform);
}
- logger.info("DatabasePlatform name:{} platform:{}", config.getName(), platform.getName());
platform.configure(config.getPlatformConfig());
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java
index a6a65e19d..a1775e818 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java
@@ -19,7 +19,7 @@ import java.util.List;
/**
* DefaultServer based implementation of MetaInfoManager.
*/
-public class DefaultMetaInfoManager implements MetaInfoManager {
+final class DefaultMetaInfoManager implements MetaInfoManager {
private final DefaultServer server;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
index 20d7ec223..ba2e99bda 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
@@ -6,7 +6,7 @@ import io.ebean.meta.MetaQueryPlan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class DefaultQueryPlanListener implements QueryPlanListener {
+final class DefaultQueryPlanListener implements QueryPlanListener {
static final QueryPlanListener INSTANT = new DefaultQueryPlanListener();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java
index b271a513e..64c813213 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java
@@ -9,13 +9,12 @@ import org.slf4j.LoggerFactory;
/**
* Default slow query listener implementation that logs a warning message.
*/
-class DefaultSlowQueryListener implements SlowQueryListener {
+final class DefaultSlowQueryListener implements SlowQueryListener {
private static final Logger log = LoggerFactory.getLogger("io.ebean.SlowQuery");
@Override
public void process(SlowQueryEvent event) {
-
String firstStack = "";
ObjectGraphNode node = event.getOriginNode();
if (node != null) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java
index b879727db..9eca59e19 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java
@@ -12,7 +12,7 @@ import java.util.Map;
* This intentionally does not include any OneToMany or ManyToMany properties.
*
*/
-public class DiffHelp {
+public final class DiffHelp {
private DiffHelp() {
}
@@ -28,11 +28,9 @@ public class DiffHelp {
*
*/
public static Map diff(Object newBean, Object oldBean, BeanDescriptor> desc) {
-
if (!(newBean instanceof EntityBean)) {
throw new IllegalArgumentException("First bean expected to be an enhanced EntityBean? bean:" + newBean);
}
-
if (oldBean != null) {
if (!(oldBean instanceof EntityBean)) {
throw new IllegalArgumentException("Second bean expected to be an enhanced EntityBean? bean:" + oldBean);
@@ -41,11 +39,9 @@ public class DiffHelp {
throw new IllegalArgumentException("Second bean not assignable to the first bean?");
}
}
-
if (oldBean == null) {
return ((EntityBean) newBean)._ebean_getIntercept().getDirtyValues();
}
-
return desc.diff((EntityBean) newBean, (EntityBean) oldBean);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
index 5274b4ced..9b5a1afa7 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
@@ -10,14 +10,12 @@ import io.ebeaninternal.api.SpiEbeanServer;
import java.util.Comparator;
import java.util.List;
-class DumpMetrics {
+final class DumpMetrics {
private final SpiEbeanServer server;
private final String options;
-
private final String nameFormat;
private final String nameFormatTimed;
-
private boolean dumpHash;
private boolean dumpSql;
private boolean dumpLoc;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
index 4bc1e5035..712521ce0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
@@ -14,10 +14,9 @@ import java.util.List;
/**
* Dump the metrics into a list of MetricData.
*/
-class DumpMetricsData {
+final class DumpMetricsData {
private final Database database;
-
private final List list = new ArrayList<>();
DumpMetricsData(Database database) {
@@ -30,7 +29,6 @@ class DumpMetricsData {
}
private void collect(ServerMetrics serverMetrics) {
-
final List timedMetrics = serverMetrics.timedMetrics();
final List countMetrics = serverMetrics.countMetrics();
final List queryMetrics = serverMetrics.queryMetrics();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
index 90200f79b..190af0af4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
@@ -14,23 +14,18 @@ import java.io.StringWriter;
import java.util.Comparator;
import java.util.List;
-class DumpMetricsJson implements ServerMetricsAsJson {
+final class DumpMetricsJson implements ServerMetricsAsJson {
private final Database database;
-
private Appendable writer;
-
/**
* By default include sql and location attributes for the initial collection only.
*/
private int includeExtraAttributes = 1;
-
private boolean withHeader = true;
private boolean withHash = true;
private String newLine = "\n";
-
private Comparator sortBy = SortMetric.NAME;
-
private int listCounter;
private int objKeyCounter;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
index 3a03c7361..f65cb0823 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java
@@ -12,10 +12,9 @@ import javax.sql.DataSource;
/**
* Initialise the main DataSource and read-only DataSource.
*/
-class InitDataSource {
+final class InitDataSource {
private final JndiDataSourceLookup jndiDataSourceFactory = new JndiDataSourceLookup();
-
private final DatabaseConfig config;
/**
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java
index ccfa08de3..594a9f29d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java
@@ -14,7 +14,7 @@ import java.util.Map;
/**
* Reads the Xml deployment information.
*/
-class InternalConfigXmlMap {
+final class InternalConfigXmlMap {
private static final Logger log = LoggerFactory.getLogger(InternalConfigXmlMap.class);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
index dca8e3059..96ab21aa2 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
@@ -113,7 +113,7 @@ import java.util.ServiceLoader;
* Used to extend the DatabaseConfig with additional objects used to configure and
* construct an Database.
*/
-public class InternalConfiguration {
+public final class InternalConfiguration {
private static final Logger logger = LoggerFactory.getLogger(InternalConfiguration.class);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java
index 0e541fadd..09b2f7a9c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java
@@ -9,10 +9,7 @@ import javax.sql.DataSource;
/**
* Helper to lookup a DataSource from JNDI.
*/
-public class JndiDataSourceLookup {
-
- public JndiDataSourceLookup() {
- }
+class JndiDataSourceLookup {
/**
* Return the DataSource by JNDI lookup.
@@ -21,7 +18,6 @@ public class JndiDataSourceLookup {
*
*/
public DataSource lookup(String jndiName) {
-
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(jndiName);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java
index 8b369d25a..abe20b1ca 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java
@@ -15,11 +15,10 @@ import java.util.logging.Logger;
/**
* DataSource supplier that changes DB catalog based on current Tenant Id.
*/
-public class MultiTenantDbCatalogSupplier implements DataSourceSupplier {
+final class MultiTenantDbCatalogSupplier implements DataSourceSupplier {
private final DataSource dataSource;
private final DataSource readOnlyDataSource;
-
private final CatalogDataSource catalogDataSource;
private final CatalogDataSource readOnly;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java
index f37ce202e..2a1af6016 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java
@@ -15,11 +15,10 @@ import java.util.logging.Logger;
/**
* DataSource supplier that changes DB schema based on current Tenant Id.
*/
-class MultiTenantDbSchemaSupplier implements DataSourceSupplier {
+final class MultiTenantDbSchemaSupplier implements DataSourceSupplier {
private final DataSource dataSource;
private final DataSource readOnlyDataSource;
-
private final SchemaDataSource schemaDataSource;
private final SchemaDataSource readOnly;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java
index b985c7864..e6237abfa 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java
@@ -11,10 +11,9 @@ import java.sql.SQLException;
/**
* DataSource supplier based on DataSource per Tenant.
*/
-class MultiTenantDbSupplier implements DataSourceSupplier {
+final class MultiTenantDbSupplier implements DataSourceSupplier {
private final CurrentTenantProvider tenantProvider;
-
private final TenantDataSourceProvider dataSourceProvider;
MultiTenantDbSupplier(CurrentTenantProvider tenantProvider, TenantDataSourceProvider dataSourceProvider) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java
index eee313bc3..a95e507ea 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java
@@ -6,7 +6,7 @@ import io.ebean.bean.CallStack;
/**
* A CallOriginFactory we can use when we don't use AutoTune.
*/
-class NoopCallOriginFactory implements CallOriginFactory {
+final class NoopCallOriginFactory implements CallOriginFactory {
private static final StackTraceElement E0 = new StackTraceElement("none", "none", "none", 0);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java
index ff81f49da..41bbb20ef 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java
@@ -11,7 +11,7 @@ import io.ebeaninternal.server.deploy.id.ImportedId;
* Deferred update of a relationship where an Id value is not initially available
* so instead we execute this later as a SqlUpdate statement.
*/
-public class PersistDeferredRelationship {
+public final class PersistDeferredRelationship {
private final SpiEbeanServer ebeanServer;
private final BeanDescriptor> beanDescriptor;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java
deleted file mode 100644
index 24ff1d117..000000000
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package io.ebeaninternal.server.core;
-
-
-/**
- * Helper for performing a 'refresh' on an Entity bean.
- *
- * Note that this does not 'refresh' any OnetoMany or ManyToMany properties. It
- * refreshes all the other properties though.
- *
- */
-public class RefreshHelp {
-//
-// /**
-// * Helper for debug of lazy loading.
-// */
-// private final DebugLazyLoad debugLazyLoad;
-//
-// private final MAdminLoggingMBean logControl;
-//
-// public RefreshHelp(MAdminLoggingMBean logControl, boolean debugLazyLoad){
-// this.logControl = logControl;
-// this.debugLazyLoad = new DebugLazyLoad(debugLazyLoad);
-// }
-//
-// /**
-// * Refresh the bean from property values in dbBean.
-// */
-// public void refresh(Object o, Object dbBean, BeanDescriptor> desc, EntityBeanIntercept ebi, Object id, boolean isLazyLoad) {
-//
-// Object originalOldValues = null;
-// boolean setOriginalOldValues = false;
-//
-// // set of properties to exclude from the refresh because it is
-// // not a refresh but rather a lazyLoading event.
-// Set excludes = null;
-//
-// // turn off intercepting so lazy loading is
-// // not invoked when populating the bean
-// // with PropertyChangeSupport
-// ebi.setIntercepting(false);
-//
-// boolean readOnly = ebi.isReadOnly();
-// boolean sharedInstance = ebi.isSharedInstance();
-//
-// if (isLazyLoad){
-// excludes = ebi.getLoadedProps();
-// if (excludes != null){
-// // lazy loading a "Partial Object"... which already
-// // contains some properties and perhaps some oldValues
-// // and these will need to be maintained...
-// originalOldValues = ebi.getOldValues();
-// setOriginalOldValues = originalOldValues != null;
-// }
-//
-// if (logControl.isDebugLazyLoad()){
-// debug(desc, ebi, id, excludes);
-// }
-// }
-//
-//
-// BeanProperty[] props = desc.propertiesBaseScalar();
-// for (int i = 0; i < props.length; i++) {
-// BeanProperty prop = props[i];
-// if (excludes != null && excludes.contains(prop.getName())){
-// // ignore this property (partial bean lazy loading)
-//
-// } else {
-// Object dbVal = prop.getValue(dbBean);
-// if (isLazyLoad) {
-// prop.setValue(o, dbVal);
-// } else {
-// prop.setValueIntercept(o, dbVal);
-// }
-// if (setOriginalOldValues){
-// // maintain original oldValues for partially loaded bean
-// prop.setValue(originalOldValues, dbVal);
-// }
-// }
-// }
-//
-// BeanPropertyAssocOne>[] ones = desc.propertiesOne();
-// for (int i = 0; i < ones.length; i++) {
-// BeanProperty prop = ones[i];
-// if (excludes != null && excludes.contains(prop.getName())){
-// // ignore this property (partial bean lazy loading)
-//
-// } else {
-// Object dbVal = prop.getValue(dbBean);
-// if (isLazyLoad){
-// prop.setValue(o, dbVal);
-// } else {
-// prop.setValueIntercept(o, dbVal);
-// }
-// if (setOriginalOldValues){
-// // maintain original oldValues for partially loaded bean
-// prop.setValue(originalOldValues, dbVal);
-// }
-// if (dbVal != null){
-// if (sharedInstance){
-// // propagate sharedInstance status to associated beans
-// ((EntityBean)dbVal)._ebean_getIntercept().setSharedInstance();
-// } else if (readOnly) {
-// // propagate readOnly status to associated beans
-// ((EntityBean)dbVal)._ebean_getIntercept().setReadOnly(true);
-// }
-// }
-//
-// }
-// }
-//
-// refreshEmbedded(o, dbBean, desc, excludes, readOnly);
-//
-// // set a lazy loading many proxy if required
-// BeanPropertyAssocMany>[] manys = desc.propertiesMany();
-// for (int i = 0; i < manys.length; i++) {
-// BeanPropertyAssocMany> prop = manys[i];
-// if (excludes != null && excludes.contains(prop.getName())){
-// // the many already existed on the bean
-//
-// } else {
-// // set a lazy loading proxy
-// prop.createReference(o, null, readOnly, sharedInstance);
-// }
-// }
-//
-// // the refreshed/lazy loaded bean is always fully
-// // populated so set loadedProps to null
-// ebi.setLoadedProps(null);
-//
-//
-// // reset the loaded status
-// ebi.setLoaded();
-// }
-//
-// /**
-// * Refresh the Embedded beans.
-// */
-// private void refreshEmbedded(Object o, Object dbBean, BeanDescriptor> desc, Set excludes, boolean propagateReadOnly) {
-//
-// BeanPropertyAssocOne>[] embeds = desc.propertiesEmbedded();
-// for (int i = 0; i < embeds.length; i++) {
-// BeanPropertyAssocOne> prop = embeds[i];
-// if (excludes != null && excludes.contains(prop.getName())){
-// // ignore this property
-// } else {
-// // the original embedded bean
-// Object oEmb = prop.getValue(o);
-//
-// // the new one from the database
-// Object dbEmb = prop.getValue(dbBean);
-//
-// if (oEmb == null){
-// // original embedded bean was null
-// // so just replace the entire embedded bean
-// prop.setValueIntercept(o, dbEmb);
-// if (propagateReadOnly && dbEmb != null){
-// // propagate readOnly status to embedded beans
-// ((EntityBean)dbEmb)._ebean_getIntercept().setReadOnly(true);
-// }
-//
-// } else {
-// // refresh each property of the original
-// // embedded bean
-// if (oEmb instanceof EntityBean){
-// // turn off interception to stop invoking lazy loading
-// // but allow PropertyChangeSupport
-// ((EntityBean) oEmb)._ebean_getIntercept().setIntercepting(false);
-// }
-//
-// BeanProperty[] props = prop.getProperties();
-// for (int j = 0; j < props.length; j++) {
-// Object v = props[j].getValue(dbEmb);
-// props[j].setValueIntercept(oEmb, v);
-// }
-//
-// // No longer calling setLoaded() on embedded bean
-// // as the EntityBean itself
-// // .. calls setEmbeddedLoaded() on each of
-// // .. its embedded beans itself.
-// }
-// }
-// }
-// }
-//
-//
-// /**
-// * Output some debug to describe the lazy loading event.
-// */
-// private void debug(BeanDescriptor> desc, EntityBeanIntercept ebi, Object id, Set excludes) {
-//
-//
-// Class> beanType = desc.getBeanType();
-//
-// StackTraceElement cause = debugLazyLoad.getStackTraceElement(beanType);
-//
-// String lazyLoadProperty = ebi.getLazyLoadProperty();
-// String msg = "debug.lazyLoad ["+desc+"] id["+id+"] lazyLoadProperty["+lazyLoadProperty+"]";
-// if (excludes != null){
-// msg += " partialProps"+excludes;
-// }
-// if (cause != null){
-// String causeLine = cause.toString();
-// if (causeLine.indexOf(".groovy:") > -1){
-// // eclipse console does not like finding groovy source at the moment
-// causeLine = StringHelper.replaceString(causeLine, ".groovy:", ".groovy :");
-// }
-// msg += " at: "+causeLine;
-// }
-// System.err.println(msg);
-// }
-//
-//
-//
-
-}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java
index f9a11f14d..7680dd086 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java
@@ -10,10 +10,9 @@ import java.sql.SQLException;
/**
* Simple DataSource supplier when no multi-tenancy used.
*/
-class SimpleDataSourceProvider implements DataSourceSupplier {
+final class SimpleDataSourceProvider implements DataSourceSupplier {
private final DataSource dataSource;
-
private final DataSource readOnlyDataSource;
SimpleDataSourceProvider(DataSource dataSource, DataSource readOnlyDataSource) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java
index 6c539e564..e95c0d461 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java
@@ -8,7 +8,7 @@ import java.sql.ResultSet;
*
* These both must be closed properly when done.
*/
-public class SpiResultSet {
+public final class SpiResultSet {
private final PreparedStatement statement;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java
index 6f7f0bb75..c2ed2a472 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelp.java
@@ -14,9 +14,7 @@ import java.sql.SQLException;
abstract class AssocOneHelp {
final BeanPropertyAssocOne> property;
-
private final BeanDescriptor> target;
-
private final String path;
AssocOneHelp(BeanPropertyAssocOne> property) {
@@ -58,19 +56,16 @@ abstract class AssocOneHelp {
* Read and return the bean.
*/
Object read(DbReadContext ctx) throws SQLException {
-
// Support for Inheritance hierarchy on exported OneToOne ?
Object id = property.targetIdBinder.read(ctx);
if (id == null) {
return null;
}
-
PersistenceContext pc = ctx.getPersistenceContext();
Object existing = target.contextGet(pc, id);
if (existing != null) {
return existing;
}
-
boolean disableLazyLoading = ctx.isDisableLazyLoading();
Object ref = target.contextRef(pc, ctx.isReadOnly(), disableLazyLoading, id);
if (!disableLazyLoading) {
@@ -79,7 +74,6 @@ abstract class AssocOneHelp {
return ref;
}
-
/**
* Read setting values into the bean.
*/
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpEmbedded.java
index afc910528..228dbb599 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpEmbedded.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpEmbedded.java
@@ -32,7 +32,6 @@ final class AssocOneHelpEmbedded extends AssocOneHelp {
@Override
Object read(DataReader reader) throws SQLException {
-
EntityBean embeddedBean = property.targetDescriptor.createEntityBean();
boolean notNull = false;
for (BeanProperty property : property.embeddedProps) {
@@ -63,9 +62,7 @@ final class AssocOneHelpEmbedded extends AssocOneHelp {
@Override
Object read(DbReadContext ctx) throws SQLException {
-
EntityBean embeddedBean = property.targetDescriptor.createEntityBean();
-
boolean notNull = false;
for (BeanProperty property : property.embeddedProps) {
Object value = property.readSet(ctx, embeddedBean);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java
index 874231645..cf2f00f28 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java
@@ -5,10 +5,9 @@ import io.ebeaninternal.server.query.SqlJoinType;
/**
* Helper for BeanPropertyAssocOne for OneToOne exported reference - not so common.
*/
-class AssocOneHelpRefExported extends AssocOneHelp {
+final class AssocOneHelpRefExported extends AssocOneHelp {
private final boolean softDelete;
-
private final String softDeletePredicate;
AssocOneHelpRefExported(BeanPropertyAssocOne> property) {
@@ -22,7 +21,6 @@ class AssocOneHelpRefExported extends AssocOneHelp {
*/
@Override
void appendSelect(DbSqlContext ctx, boolean subQuery) {
-
// set appropriate tableAlias for the exported id columns
String relativePrefix = ctx.getRelativePrefix(property.getName());
ctx.pushTableAlias(relativePrefix);
@@ -32,7 +30,6 @@ class AssocOneHelpRefExported extends AssocOneHelp {
@Override
void appendFrom(DbSqlContext ctx, SqlJoinType joinType) {
-
String relativePrefix = ctx.getRelativePrefix(property.getName());
if (softDelete && !ctx.isIncludeSoftDelete()) {
property.tableJoin.addJoin(joinType, relativePrefix, ctx, softDeletePredicate);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
index 1d619507b..3018b7e19 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
@@ -9,7 +9,7 @@ import java.sql.SQLException;
/**
* Helper for BeanPropertyAssocOne imported reference but with inheritance.
*/
-class AssocOneHelpRefInherit extends AssocOneHelp {
+final class AssocOneHelpRefInherit extends AssocOneHelp {
private final InheritInfo inherit;
@@ -29,7 +29,6 @@ class AssocOneHelpRefInherit extends AssocOneHelp {
*/
@Override
Object read(DbReadContext ctx) throws SQLException {
-
// read discriminator to determine the type
InheritInfo rowInheritInfo = inherit.readType(ctx);
if (rowInheritInfo == null) {
@@ -37,12 +36,10 @@ class AssocOneHelpRefInherit extends AssocOneHelp {
property.targetIdBinder.loadIgnore(ctx);
return null;
}
-
Object id = property.targetIdBinder.read(ctx);
if (id == null) {
return null;
}
-
// check transaction context to see if it already exists
PersistenceContext pc = ctx.getPersistenceContext();
BeanDescriptor> desc = rowInheritInfo.desc();
@@ -50,7 +47,6 @@ class AssocOneHelpRefInherit extends AssocOneHelp {
if (existing != null) {
return existing;
}
-
// for inheritance hierarchy create the correct type for this row...
boolean disableLazyLoading = ctx.isDisableLazyLoading();
Object ref = desc.contextRef(pc, ctx.isReadOnly(), disableLazyLoading, id);
@@ -72,7 +68,6 @@ class AssocOneHelpRefInherit extends AssocOneHelp {
*/
@Override
void appendSelect(DbSqlContext ctx, boolean subQuery) {
-
if (!subQuery) {
// add discriminator column
String relativePrefix = ctx.getRelativePrefix(property.getName());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java
index 967d7d492..cf6b09798 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java
@@ -3,7 +3,7 @@ package io.ebeaninternal.server.deploy;
/**
* Helper for BeanPropertyAssocOne imported reference - this is the common case.
*/
-class AssocOneHelpRefSimple extends AssocOneHelp {
+final class AssocOneHelpRefSimple extends AssocOneHelp {
AssocOneHelpRefSimple(BeanPropertyAssocOne> property, String embeddedPrefix) {
super(property, embeddedPrefix);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BaseCollectionHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BaseCollectionHelp.java
index f66ad8e4c..a803e1754 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BaseCollectionHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BaseCollectionHelp.java
@@ -13,7 +13,6 @@ abstract class BaseCollectionHelp implements BeanCollectionHelp {
final BeanPropertyAssocMany many;
private final BeanDescriptor targetDescriptor;
final String propertyName;
-
BeanCollectionLoader loader;
BaseCollectionHelp(BeanPropertyAssocMany many) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java
index 36b7b2152..4c0672a35 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java
@@ -8,12 +8,10 @@ import javax.persistence.CascadeType;
* This is set to associated Beans, Table joins and List.
*
*/
-public class BeanCascadeInfo {
+public final class BeanCascadeInfo {
private boolean delete;
-
private boolean save;
-
private boolean refresh;
public void setTypes(CascadeType[] types) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java
index e2a6938ff..a4cb98e94 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java
@@ -11,16 +11,13 @@ import java.io.StringWriter;
/**
* Builds the 'new values' and 'old values' in JSON form for ChangeLog.
*/
-class BeanChangeJson implements BeanDiffVisitor {
+final class BeanChangeJson implements BeanDiffVisitor {
private final StringWriter newData;
private final StringWriter oldData;
-
private final SpiJsonWriter newJson;
private final SpiJsonWriter oldJson;
-
private final ArrayStack> stack = new ArrayStack<>();
-
private BeanDescriptor> descriptor;
BeanChangeJson(BeanDescriptor> descriptor, boolean statelessUpdate) {
@@ -28,7 +25,6 @@ class BeanChangeJson implements BeanDiffVisitor {
this.newData = new StringWriter(200);
this.newJson = descriptor.createJsonWriter(newData);
newJson.writeStartObject();
-
if (statelessUpdate) {
this.oldJson = null;
this.oldData = null;
@@ -41,7 +37,6 @@ class BeanChangeJson implements BeanDiffVisitor {
@Override
public void visit(int position, Object newVal, Object oldVal) {
-
try {
BeanProperty prop = descriptor.propertiesIndex[position];
if (prop.isDbUpdatable()) {
@@ -58,7 +53,6 @@ class BeanChangeJson implements BeanDiffVisitor {
@Override
public void visitPush(int position) {
stack.push(descriptor);
-
BeanPropertyAssocOne> embedded = (BeanPropertyAssocOne>)descriptor.propertiesIndex[position];
descriptor = embedded.getTargetDescriptor();
newJson.writeStartObject(embedded.getName());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java
index a3376cd2e..c3bda06be 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java
@@ -9,7 +9,7 @@ import io.ebeaninternal.server.query.CQueryCollectionAdd;
/**
* Creates Helpers specific to the type of the property (List Set or Map).
*/
-public class BeanCollectionHelpFactory {
+public final class BeanCollectionHelpFactory {
@SuppressWarnings("rawtypes")
private static final BeanListHelp LIST_HELP = new BeanListHelp();
@@ -21,7 +21,6 @@ public class BeanCollectionHelpFactory {
* Create the helper based on the many property.
*/
public static BeanCollectionHelp create(BeanPropertyAssocMany many) {
-
boolean elementCollection = many.isElementCollection();
ManyType manyType = many.getManyType();
switch (manyType) {
@@ -30,16 +29,14 @@ public class BeanCollectionHelpFactory {
case SET:
return elementCollection ? new BeanSetHelpElement<>(many) : new BeanSetHelp<>(many);
case MAP:
- return elementCollection ? new BeanMapHelpElement<>(many) :new BeanMapHelp<>(many);
+ return elementCollection ? new BeanMapHelpElement<>(many) : new BeanMapHelp<>(many);
default:
throw new RuntimeException("Invalid type " + manyType);
}
-
}
@SuppressWarnings("unchecked")
public static CQueryCollectionAdd create(SpiQuery.Type manyType, OrmQueryRequest request) {
-
if (manyType == SpiQuery.Type.LIST) {
return LIST_HELP;
@@ -56,5 +53,4 @@ public class BeanCollectionHelpFactory {
}
}
-
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java
index e632a729c..e1a0d352c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java
@@ -9,7 +9,7 @@ import java.util.Map;
/**
* Utility methods for BeanCollections.
*/
-public class BeanCollectionUtil {
+public final class BeanCollectionUtil {
/**
* Return true if this is a bean collection and not considered dirty.
@@ -66,7 +66,6 @@ public class BeanCollectionUtil {
// returns a collection of beans
return bc.getActualDetails();
}
-
if (o instanceof Map, ?>) {
// yes, we want the entrySet (to set the keys)
return ((Map, ?>) o).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 055f2605a..6541cade1 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
@@ -115,37 +115,23 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
private static final Logger logger = LoggerFactory.getLogger(BeanDescriptor.class);
- private final ConcurrentHashMap updatePlanCache = new ConcurrentHashMap<>();
-
- private final ConcurrentHashMap queryPlanCache = new ConcurrentHashMap<>();
-
- private final ConcurrentHashMap elCache = new ConcurrentHashMap<>();
-
- private final ConcurrentHashMap elDeployCache = new ConcurrentHashMap<>();
-
- private final ConcurrentHashMap> comparatorCache = new ConcurrentHashMap<>();
-
- private final ConcurrentHashMap dynamicProperty = new ConcurrentHashMap<>();
-
- private final Map namedRawSql;
-
- private final Map namedQuery;
-
- private final boolean multiValueSupported;
- private boolean batchEscalateOnCascadeInsert;
- private boolean batchEscalateOnCascadeDelete;
-
- private final BeanIudMetrics iudMetrics;
-
public enum EntityType {
ORM, EMBEDDED, VIEW, SQL, DOC
}
- /**
- * The nature/type of this bean.
- */
+ private final ConcurrentHashMap updatePlanCache = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap queryPlanCache = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap elCache = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap elDeployCache = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap> comparatorCache = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap dynamicProperty = new ConcurrentHashMap<>();
+ private final Map namedRawSql;
+ private final Map namedQuery;
+ private final boolean multiValueSupported;
+ private boolean batchEscalateOnCascadeInsert;
+ private boolean batchEscalateOnCascadeDelete;
+ private final BeanIudMetrics iudMetrics;
private final EntityType entityType;
-
/**
* Set when Id property is marked with GeneratedValue annotation.
*/
@@ -153,71 +139,39 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
private final PlatformIdGenerator idGenerator;
private final IdentityMode identityMode;
private final IdType idType;
-
/**
* SQL used to return last inserted id. Used for Identity columns where
* getGeneratedKeys is not supported.
*/
private final String selectLastInsertedId;
private final String selectLastInsertedIdDraft;
-
private final boolean autoTunable;
-
- /**
- * The concurrency mode for beans of this type.
- */
private final ConcurrencyMode concurrencyMode;
-
private final IndexDefinition[] indexDefinitions;
-
private final String[] dependentTables;
-
- /**
- * The base database table.
- */
private final String baseTable;
private final String baseTableAsOf;
private final String baseTableVersionsBetween;
private final boolean historySupport;
private final TableJoin primaryKeyJoin;
-
private final BeanProperty softDeleteProperty;
private final boolean softDelete;
-
private final String draftTable;
-
private final PartitionMeta partitionMeta;
private final String storageEngine;
-
- /**
- * DB table comment.
- */
private final String dbComment;
-
- /**
- * Set to true if read auditing is on for this bean type.
- */
private final boolean readAuditing;
-
private final boolean draftable;
-
private final boolean draftableElement;
-
private final BeanProperty unmappedJson;
-
private final BeanProperty tenant;
-
private final BeanProperty draft;
-
private final BeanProperty draftDirty;
-
private final LinkedHashMap propMap;
-
/**
* Map of DB column to property path (for nativeSql mapping).
*/
private final Map columnPath = new HashMap<>();
-
/**
* Map of related table to assoc property (for nativeSql mapping).
*/
@@ -235,46 +189,34 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
private final BeanQueryAdapter queryAdapter;
private final BeanFindController beanFinder;
private final ChangeLogFilter changeLogFilter;
-
- /**
- * Inheritance information. Server side only.
- */
final InheritInfo inheritInfo;
-
private final boolean abstractType;
-
private final BeanProperty idProperty;
private final int idPropertyIndex;
-
private final BeanProperty versionProperty;
private final int versionPropertyIndex;
private final BeanProperty whenModifiedProperty;
private final BeanProperty whenCreatedProperty;
-
/**
* Properties that are initialised in the constructor need to be 'unloaded' to support partial object queries.
*/
private final int[] unloadProperties;
-
/**
* Properties local to this type (not from a super type).
*/
private final BeanProperty[] propertiesLocal;
-
/**
* Scalar mutable properties (need to dirty check on update).
*/
private final BeanProperty[] propertiesMutable;
private final BeanPropertyAssocOne> unidirectional;
private final BeanProperty orderColumn;
-
private final BeanProperty[] propertiesNonMany;
private final BeanProperty[] propertiesAggregate;
private final BeanPropertyAssocMany>[] propertiesMany;
private final BeanPropertyAssocMany>[] propertiesManySave;
private final BeanPropertyAssocMany>[] propertiesManyDelete;
private final BeanPropertyAssocMany>[] propertiesManyToMany;
-
/**
* list of properties that are associated beans and not embedded (Derived).
*/
@@ -285,10 +227,8 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
private final BeanPropertyAssocOne>[] propertiesOneExportedSave;
private final BeanPropertyAssocOne>[] propertiesOneExportedDelete;
private final BeanPropertyAssocOne>[] propertiesEmbedded;
-
private final BeanProperty[] propertiesBaseScalar;
private final BeanProperty[] propertiesTransient;
-
/**
* All non transient properties excluding the id properties.
*/
@@ -300,21 +240,10 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
private final boolean idOnlyReference;
private BeanNaturalKey beanNaturalKey;
- /**
- * The bean class name or the table name for MapBeans.
- */
+
private final String fullName;
-
- /**
- * Flag used to determine if saves can be skipped.
- */
private boolean saveRecurseSkippable;
-
- /**
- * Flag used to determine if deletes can be skipped.
- */
private boolean deleteRecurseSkippable;
-
private final EntityBean prototypeEntityBean;
private final IdBinder idBinder;
@@ -629,11 +558,9 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
}
prop.registerColumn(this, null);
}
-
if (unidirectional != null) {
unidirectional.initialise(initContext);
}
-
idBinder.initialise();
idBinderInLHSSql = idBinder.getBindIdInSql(baseTableAlias);
idBinderIdSql = idBinder.getBindIdSql(baseTableAlias);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java
index 0b547b9a9..7cdaf95df 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java
@@ -50,38 +50,27 @@ final class BeanDescriptorCacheHelp {
private static final Logger natLog = LoggerFactory.getLogger("io.ebean.cache.NATKEY");
private final BeanDescriptor desc;
-
private final SpiCacheManager cacheManager;
-
private final CacheOptions cacheOptions;
-
/**
* Flag indicating this bean has no relationships.
*/
private final boolean cacheSharableBeans;
private final boolean invalidateQueryCache;
-
private final Class> beanType;
-
private final String cacheName;
-
private final BeanPropertyAssocOne>[] propertiesOneImported;
private final String[] naturalKey;
-
private final ServerCache beanCache;
private final ServerCache naturalKeyCache;
private final ServerCache queryCache;
-
private final boolean noCaching;
-
private final SpiCacheControl cacheControl;
private final SpiCacheRegion cacheRegion;
-
/**
* Set to true if all persist changes need to notify the cache.
*/
private boolean cacheNotifyOnAll;
-
/**
* Set to true if delete changes need to notify cache.
*/
@@ -293,13 +282,11 @@ final class BeanDescriptorCacheHelp {
// held as part of the bean cache so skip
return false;
}
-
CachedManyIds entry = manyPropGet(parentId, many.getName());
if (entry == null) {
// not in cache so return unsuccessful
return false;
}
-
EntityBean ownerBean = bc.getOwnerBean();
EntityBeanIntercept ebi = ownerBean._ebean_getIntercept();
PersistenceContext persistenceContext = ebi.getPersistenceContext();
@@ -307,8 +294,13 @@ final class BeanDescriptorCacheHelp {
List idList = entry.getIdList();
bc.checkEmptyLazyLoad();
+ int i = 0;
for (Object id : idList) {
- many.add(bc, targetDescriptor.createReference(readOnly, id, persistenceContext));
+ final EntityBean ref = targetDescriptor.createReference(readOnly, id, persistenceContext);
+ if (many.hasOrderColumn()) {
+ ref._ebean_getIntercept().setSortOrder(++i);
+ }
+ many.add(bc, ref);
}
return true;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorDraftHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorDraftHelp.java
index 4609b3b74..f1433dbde 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorDraftHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorDraftHelp.java
@@ -14,9 +14,7 @@ import java.util.List;
final class BeanDescriptorDraftHelp {
private final BeanDescriptor desc;
-
private final BeanProperty draftDirty;
-
private final BeanProperty[] resetProperties;
BeanDescriptorDraftHelp(BeanDescriptor desc) {
@@ -29,16 +27,12 @@ final class BeanDescriptorDraftHelp {
* Return the properties that are reset on draft beans after publish.
*/
private BeanProperty[] resetProperties() {
-
List list = new ArrayList<>();
-
- BeanProperty[] props = desc.propertiesNonMany();
- for (BeanProperty prop : props) {
+ for (BeanProperty prop : desc.propertiesNonMany()) {
if (prop.isDraftReset()) {
list.add(prop);
}
}
-
return list.toArray(new BeanProperty[0]);
}
@@ -46,19 +40,15 @@ final class BeanDescriptorDraftHelp {
* Set the value of all the 'reset properties' to null on the draft bean.
*/
boolean draftReset(T draftBean) {
-
EntityBean draftEntityBean = (EntityBean) draftBean;
-
if (draftDirty != null) {
// set @DraftDirty property to false
draftDirty.setValueIntercept(draftEntityBean, false);
}
-
// set to null on all @DraftReset properties
for (BeanProperty resetProperty : resetProperties) {
resetProperty.setValueIntercept(draftEntityBean, null);
}
-
// return true if the bean is dirty (and should be persisted)
return draftEntityBean._ebean_getIntercept().isDirty();
}
@@ -71,31 +61,23 @@ final class BeanDescriptorDraftHelp {
*/
@SuppressWarnings("unchecked")
public T publish(T draftBean, T liveBean) {
-
if (liveBean == null) {
liveBean = (T) desc.createEntityBean();
}
-
EntityBean draft = (EntityBean) draftBean;
EntityBean live = (EntityBean) liveBean;
-
BeanProperty idProperty = desc.getIdProperty();
if (idProperty != null) {
idProperty.publish(draft, live);
}
-
- BeanProperty[] props = desc.propertiesNonMany();
- for (BeanProperty prop : props) {
+ for (BeanProperty prop : desc.propertiesNonMany()) {
prop.publish(draft, live);
}
-
- BeanPropertyAssocMany>[] many = desc.propertiesMany();
- for (BeanPropertyAssocMany> aMany : many) {
- if (aMany.getTargetDescriptor().isDraftable()) {
- aMany.publishMany(draft, live);
+ for (BeanPropertyAssocMany> many : desc.propertiesMany()) {
+ if (many.getTargetDescriptor().isDraftable()) {
+ many.publishMany(draft, live);
}
}
-
return liveBean;
}
@@ -103,20 +85,15 @@ final class BeanDescriptorDraftHelp {
* Fetch draftable element relationships.
*/
void draftQueryOptimise(Query query) {
-
- BeanPropertyAssocOne>[] one = desc.propertiesOne();
- for (BeanPropertyAssocOne> anOne : one) {
+ for (BeanPropertyAssocOne> anOne : desc.propertiesOne()) {
if (anOne.getTargetDescriptor().isDraftableElement()) {
query.fetch(anOne.getName());
}
}
-
- BeanPropertyAssocMany>[] many = desc.propertiesMany();
- for (BeanPropertyAssocMany> aMany : many) {
+ for (BeanPropertyAssocMany> aMany : desc.propertiesMany()) {
if (aMany.getTargetDescriptor().isDraftableElement()) {
query.fetch(aMany.getName());
}
}
-
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElement.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElement.java
index 1d541377d..54803369a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElement.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElement.java
@@ -15,7 +15,6 @@ import java.util.Arrays;
abstract class BeanDescriptorElement extends BeanDescriptor {
private final String simpleName;
-
final ElementHelp elementHelp;
BeanDescriptorElement(BeanDescriptorMap owner, DeployBeanDescriptor deploy, ElementHelp elementHelp) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbedded.java
index c40a1c156..6758d4b09 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbedded.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbedded.java
@@ -12,12 +12,11 @@ import java.io.IOException;
/**
* Bean descriptor used with element collection of list/set of embeddable.
*/
+@SuppressWarnings("rawtypes")
class BeanDescriptorElementEmbedded extends BeanDescriptorElement {
private final BeanPropertyAssocOne embeddedProperty;
-
private final EntityBean prototype;
-
private BeanDescriptor targetDescriptor;
BeanDescriptorElementEmbedded(BeanDescriptorMap owner, DeployBeanDescriptor deploy, ElementHelp elementHelp) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
index 670c0c67d..e0ae85be1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
@@ -18,7 +18,6 @@ import java.util.Map;
class BeanDescriptorElementEmbeddedMap extends BeanDescriptorElementEmbedded {
private final ScalarType scalarTypeKey;
-
private final boolean stringKey;
BeanDescriptorElementEmbeddedMap(BeanDescriptorMap owner, DeployBeanDescriptor deploy, ElementHelp elementHelp) {
@@ -50,7 +49,6 @@ class BeanDescriptorElementEmbeddedMap extends BeanDescriptorElementEmbedded<
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
-
JsonParser parser = readJson.getParser();
ElementCollector add = elementHelp.createCollector();
do {
@@ -70,7 +68,6 @@ class BeanDescriptorElementEmbeddedMap extends BeanDescriptorElementEmbedded<
add.addKeyValue(key, val);
}
} while (true);
-
return add.collection();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java
index 262f7d8be..13833eb77 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalar.java
@@ -40,7 +40,6 @@ class BeanDescriptorElementScalar extends BeanDescriptorElement {
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
-
JsonParser parser = readJson.getParser();
ElementCollector add = elementHelp.createCollector();
do {
@@ -50,7 +49,6 @@ class BeanDescriptorElementScalar extends BeanDescriptorElement {
}
add.addElement(scalarType.jsonRead(parser));
} while (true);
-
return add.collection();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java
index a9aabce8b..93a2bcb91 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementScalarMap.java
@@ -49,7 +49,6 @@ class BeanDescriptorElementScalarMap extends BeanDescriptorElement {
@Override
public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException {
-
JsonParser parser = readJson.getParser();
ElementCollector add = elementHelp.createCollector();
do {
@@ -69,7 +68,6 @@ class BeanDescriptorElementScalarMap extends BeanDescriptorElement {
add.addKeyValue(key, val);
}
} while (true);
-
return add.collection();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorInitContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorInitContext.java
index ec9c19044..9ce861569 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorInitContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorInitContext.java
@@ -7,7 +7,6 @@ class BeanDescriptorInitContext {
private final Map withHistoryTables;
private final Map draftTables;
private final String asOfViewSuffix;
-
private String embeddedPrefix;
BeanDescriptorInitContext(Map withHistoryTables, Map draftTables, String asOfViewSuffix) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
index 059b368a0..091a5a579 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
@@ -16,10 +16,9 @@ import java.util.Map;
import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero;
-class BeanDescriptorJsonHelp {
+final class BeanDescriptorJsonHelp {
private final BeanDescriptor desc;
-
private final InheritInfo inheritInfo;
BeanDescriptorJsonHelp(BeanDescriptor desc) {
@@ -28,21 +27,16 @@ class BeanDescriptorJsonHelp {
}
void jsonWrite(SpiJsonWriter writeJson, EntityBean bean, String key) throws IOException {
-
writeJson.writeStartObject(key);
-
if (inheritInfo == null) {
jsonWriteProperties(writeJson, bean);
-
} else {
InheritInfo localInheritInfo = inheritInfo.readType(bean.getClass());
String discValue = localInheritInfo.getDiscriminatorStringValue();
String discColumn = localInheritInfo.getDiscriminatorColumn();
writeJson.gen().writeStringField(discColumn, discValue);
-
localInheritInfo.desc().jsonWriteProperties(writeJson, bean);
}
-
writeJson.writeEndObject();
}
@@ -59,7 +53,6 @@ class BeanDescriptorJsonHelp {
}
void jsonWriteDirtyProperties(SpiJsonWriter writeJson, EntityBean bean, boolean[] dirtyProps) throws IOException {
-
writeJson.writeStartObject(null);
// render the dirty properties
BeanProperty[] props = desc.propertiesNonTransient();
@@ -73,7 +66,6 @@ class BeanDescriptorJsonHelp {
@SuppressWarnings("unchecked")
T jsonRead(SpiJsonReader jsonRead, String path, boolean withInheritance) throws IOException {
-
JsonParser parser = jsonRead.getParser();
//noinspection StatementWithEmptyBody
if (parser.getCurrentToken() == JsonToken.START_OBJECT) {
@@ -115,21 +107,17 @@ class BeanDescriptorJsonHelp {
}
private T jsonReadObject(SpiJsonReader readJson, String path) throws IOException {
-
EntityBean bean = desc.createEntityBeanForJson();
return jsonReadProperties(readJson, bean, path);
}
@SuppressWarnings("unchecked")
private T jsonReadProperties(SpiJsonReader readJson, EntityBean bean, String path) throws IOException {
-
if (path != null) {
readJson.pushPath(path);
}
-
// unmapped properties, send to JsonReadBeanVisitor later
Map unmappedProperties = null;
-
do {
JsonParser parser = readJson.getParser();
JsonToken event = parser.nextToken();
@@ -145,10 +133,8 @@ class BeanDescriptorJsonHelp {
}
unmappedProperties.put(key, EJson.parse(parser));
}
-
} else if (JsonToken.END_OBJECT == event) {
break;
-
} else {
throw new RuntimeException("Unexpected token " + event + " - expecting key or end_object at: " + parser.getCurrentLocation());
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
index 84b412513..6261ab73c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
@@ -6,16 +6,8 @@ import io.ebean.RawSqlBuilder;
import io.ebean.annotation.ConstraintMode;
import io.ebean.bean.BeanCollection;
import io.ebean.bean.EntityBean;
-import io.ebean.config.BeanNotEnhancedException;
-import io.ebean.config.DatabaseConfig;
-import io.ebean.config.EncryptKey;
-import io.ebean.config.EncryptKeyManager;
-import io.ebean.config.NamingConvention;
-import io.ebean.config.dbplatform.DatabasePlatform;
-import io.ebean.config.dbplatform.DbHistorySupport;
-import io.ebean.config.dbplatform.DbIdentity;
-import io.ebean.config.dbplatform.IdType;
-import io.ebean.config.dbplatform.PlatformIdGenerator;
+import io.ebean.config.*;
+import io.ebean.config.dbplatform.*;
import io.ebean.core.type.ScalarType;
import io.ebean.event.changelog.ChangeLogFilter;
import io.ebean.event.changelog.ChangeLogListener;
@@ -36,26 +28,12 @@ import io.ebeaninternal.server.deploy.BeanDescriptor.EntityType;
import io.ebeaninternal.server.deploy.id.IdBinder;
import io.ebeaninternal.server.deploy.id.IdBinderEmbedded;
import io.ebeaninternal.server.deploy.id.IdBinderFactory;
-import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
-import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
-import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssoc;
-import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocMany;
-import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocOne;
-import io.ebeaninternal.server.deploy.meta.DeployBeanTable;
-import io.ebeaninternal.server.deploy.meta.DeployIdentityMode;
-import io.ebeaninternal.server.deploy.meta.DeployOrderColumn;
-import io.ebeaninternal.server.deploy.meta.DeployTableJoin;
-import io.ebeaninternal.server.deploy.parse.DeployBeanInfo;
-import io.ebeaninternal.server.deploy.parse.DeployCreateProperties;
-import io.ebeaninternal.server.deploy.parse.DeployInherit;
-import io.ebeaninternal.server.deploy.parse.DeployUtil;
-import io.ebeaninternal.server.deploy.parse.ReadAnnotations;
-import io.ebeaninternal.server.deploy.parse.TransientProperties;
+import io.ebeaninternal.server.deploy.meta.*;
+import io.ebeaninternal.server.deploy.parse.*;
import io.ebeaninternal.server.persist.platform.MultiValueBind;
import io.ebeaninternal.server.properties.BeanPropertiesReader;
import io.ebeaninternal.server.properties.BeanPropertyAccess;
import io.ebeaninternal.server.properties.EnhanceBeanPropertyAccess;
-import io.ebeaninternal.server.type.ScalarTypeInteger;
import io.ebeaninternal.server.type.TypeManager;
import io.ebeaninternal.xmapping.api.XmapEbean;
import io.ebeaninternal.xmapping.api.XmapEntity;
@@ -73,20 +51,13 @@ import javax.sql.DataSource;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* Creates BeanDescriptors.
*/
-public class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeManager {
+public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeManager {
private static final Logger logger = LoggerFactory.getLogger(BeanDescriptorManager.class);
@@ -136,19 +107,16 @@ public class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeMana
private final int queryPlanTTLSeconds;
private int entityBeanCount;
private List> immutableDescriptorList;
-
/**
* Map of base tables to 'with history views' used to support 'as of' queries.
*/
private final Map asOfTableMap = new HashMap<>();
-
/**
* Map of base tables to 'draft' tables.
*/
private final Map draftTableMap = new HashMap<>();
// temporary collections used during startup and then cleared
-
private Map, DeployBeanInfo>> deployInfoMap = new HashMap<>();
private Set> embeddedIdTypes = new HashSet<>();
private List> embeddedBeans = new ArrayList<>();
@@ -326,11 +294,9 @@ public class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeMana
readInheritedIdGenerators();
// creates the BeanDescriptors
readEntityRelationships();
-
List> list = new ArrayList<>(descMap.values());
list.sort(beanDescComparator);
immutableDescriptorList = Collections.unmodifiableList(list);
-
initialiseAll();
readForeignKeys();
readTableToDescriptor();
@@ -340,12 +306,9 @@ public class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeMana
embeddedIdTypes = null;
embeddedBeans = null;
deployInfoMap = null;
-
return asOfTableMap;
-
} catch (BeanNotEnhancedException e) {
throw e;
-
} catch (RuntimeException e) {
logger.error("Error in deployment", e);
throw e;
@@ -905,7 +868,8 @@ public class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeMana
private void makeOrderColumn(DeployBeanPropertyAssocMany> oneToMany) {
DeployBeanDescriptor> targetDesc = getTargetDescriptor(oneToMany);
DeployOrderColumn orderColumn = oneToMany.getOrderColumn();
- DeployBeanProperty orderProperty = new DeployBeanProperty(targetDesc, Integer.class, ScalarTypeInteger.INSTANCE, null);
+ final ScalarType> scalarType = typeManager.getScalarType(Integer.class);
+ DeployBeanProperty orderProperty = new DeployBeanProperty(targetDesc, Integer.class, scalarType, null);
orderProperty.setName(DeployOrderColumn.LOGICAL_NAME);
orderProperty.setDbColumn(orderColumn.getName());
orderProperty.setNullable(orderColumn.isNullable());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java
index cac179b62..57aed6cb3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java
@@ -1,7 +1,6 @@
package io.ebeaninternal.server.deploy;
-public class BeanEmbeddedMeta {
-
+public final class BeanEmbeddedMeta {
private final BeanProperty[] properties;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java
index 5def0dc64..d6ee56491 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java
@@ -10,7 +10,7 @@ import java.util.Map;
* Creates BeanProperties for Embedded beans that have deployment information
* such as the actual DB column name and table alias.
*/
-class BeanEmbeddedMetaFactory {
+final class BeanEmbeddedMetaFactory {
/**
* Create BeanProperties for embedded beans using the deployment specific DB column name and table alias.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java
index a1e916310..bb85c3b76 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java
@@ -11,7 +11,7 @@ import java.util.List;
/**
* Default implementation for BeanFinderFactory.
*/
-class BeanFinderManager {
+final class BeanFinderManager {
private final Logger logger = LoggerFactory.getLogger(BeanFinderManager.class);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java
index e651e7fc2..071a0f660 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java
@@ -16,7 +16,6 @@ public final class BeanFkeyProperty implements ElPropertyValue {
private final String name;
private final String dbColumn;
private final boolean containsMany;
-
private final int deployOrder;
public BeanFkeyProperty(String name, String dbColumn, int deployOrder) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java
index 889716aa3..64e4deb8f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java
@@ -8,7 +8,7 @@ import io.ebeaninternal.server.core.PersistRequest;
/**
* Metrics for ORM Insert Update and Delete for a given bean type.
*/
-class BeanIudMetrics {
+final class BeanIudMetrics {
private final TimedMetric insert;
private final TimedMetric update;
@@ -21,7 +21,6 @@ class BeanIudMetrics {
* Create for a given bean type.
*/
BeanIudMetrics(String beanShortName) {
-
MetricFactory metricFactory = MetricFactory.get();
String prefix = "iud." + beanShortName;
this.insert = metricFactory.createTimedMetric(prefix + ".insert");
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java
index 7a581e1c8..f754c9060 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java
@@ -30,7 +30,7 @@ import java.util.List;
* lifecycle events.
*
*/
-class BeanLifecycleAdapterFactory {
+final class BeanLifecycleAdapterFactory {
private final boolean postConstructPresent;
@@ -42,20 +42,16 @@ class BeanLifecycleAdapterFactory {
* Register a BeanPersistController for methods annotated with lifecycle events.
*/
void addLifecycleMethods(DeployBeanDescriptor> deployDesc) {
-
Method[] methods = deployDesc.getBeanType().getMethods();
-
// look for annotated methods
MethodsHolder methodHolder = new MethodsHolder();
for (Method m : methods) {
methodHolder.checkMethod(m, postConstructPresent);
}
-
if (methodHolder.hasPersistMethods()) {
// has pre/post persist annotated methods
deployDesc.addPersistController(new PersistAdapter(new PersistMethodsHolder(methodHolder)));
}
-
if (!methodHolder.postLoads.isEmpty()) {
// has postLoad methods
deployDesc.addPostLoad(new PostLoadAdapter(methodHolder.postLoads));
@@ -69,7 +65,7 @@ class BeanLifecycleAdapterFactory {
/**
* Holds Methods for the lifecycle events.s
*/
- private static class MethodsHolder {
+ private static final class MethodsHolder {
private boolean hasPersistMethods;
private final List preInserts = new ArrayList<>();
@@ -162,7 +158,7 @@ class BeanLifecycleAdapterFactory {
/**
* Holds Methods for the lifecycle events.s
*/
- private static class PersistMethodsHolder {
+ private static final class PersistMethodsHolder {
private final Method[] preInserts;
private final Method[] postInserts;
@@ -188,7 +184,7 @@ class BeanLifecycleAdapterFactory {
/**
* BeanPersistAdapter using reflection to invoke lifecycle methods.
*/
- private static class PersistAdapter extends BeanPersistAdapter {
+ private static final class PersistAdapter extends BeanPersistAdapter {
private final PersistMethodsHolder methodHolder;
@@ -264,7 +260,7 @@ class BeanLifecycleAdapterFactory {
/**
* BeanPostLoad using reflection to invoke lifecycle methods.
*/
- private static class PostLoadAdapter implements BeanPostLoad {
+ private static final class PostLoadAdapter implements BeanPostLoad {
private final Method[] postLoadMethods;
@@ -297,7 +293,7 @@ class BeanLifecycleAdapterFactory {
/**
* PostConstructAdapter using reflection to invoke lifecycle methods.
*/
- private static class PostConstructAdapter implements BeanPostConstructListener {
+ private static final class PostConstructAdapter implements BeanPostConstructListener {
private final Method[] postConstructMethods;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java
index 0e473e4eb..b5f3ae432 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java
@@ -7,7 +7,7 @@ import io.ebeaninternal.api.json.SpiJsonWriter;
/**
* Helper for element collection List.
*/
-public class BeanListHelpElement extends BeanListHelp {
+public final class BeanListHelpElement extends BeanListHelp {
BeanListHelpElement(BeanPropertyAssocMany many) {
super(many);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java
index 630c60b4e..d6d605313 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java
@@ -5,10 +5,9 @@ import io.ebeaninternal.server.persist.BeanPersister;
/**
* Holds the BeanDescriptor and its associated BeanPersister.
*/
-public class BeanManager {
+public final class BeanManager {
private final BeanPersister persister;
-
private final BeanDescriptor descriptor;
public BeanManager(BeanDescriptor descriptor, BeanPersister persister) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java
index e80cff573..3f2f61e14 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java
@@ -7,7 +7,7 @@ import io.ebeaninternal.server.persist.dml.DmlBeanPersisterFactory;
/**
* Creates BeanManagers.
*/
-class BeanManagerFactory {
+final class BeanManagerFactory {
private final BeanPersisterFactory persisterFactory;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java
index 71cdfb3fa..1c6fb7931 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java
@@ -5,7 +5,7 @@ import io.ebean.bean.EntityBean;
import io.ebean.common.BeanMap;
import io.ebeaninternal.api.json.SpiJsonWriter;
-public class BeanMapHelpElement extends BeanMapHelp {
+public final class BeanMapHelpElement extends BeanMapHelp {
BeanMapHelpElement(BeanPropertyAssocMany many) {
super(many);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java
index e78381b0b..b2e4f0f7d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java
@@ -6,7 +6,7 @@ import io.ebean.common.BeanMap;
import io.ebeaninternal.server.el.ElPropertyValue;
import io.ebeaninternal.server.query.CQueryCollectionAdd;
-class BeanMapQueryHelp implements CQueryCollectionAdd {
+final class BeanMapQueryHelp implements CQueryCollectionAdd {
private final ElPropertyValue elGetValue;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java
index 57f6c2512..3d3ed9866 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java
@@ -6,7 +6,7 @@ import java.util.Set;
/**
* Natural key for a bean type.
*/
-public class BeanNaturalKey {
+public final class BeanNaturalKey {
private final String[] naturalKey;
private final BeanProperty[] props;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
index 413d0b460..74e75702a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java
@@ -69,150 +69,76 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
* Flag to mark this is the id property.
*/
private final boolean id;
-
private final boolean importedPrimaryKey;
-
/**
* Flag to make this as a dummy property for unidirecitonal relationships.
*/
private final boolean unidirectionalShadow;
-
/**
* Flag set if this maps to the inheritance discriminator column
*/
private final boolean discriminator;
-
/**
* Flag to mark the property as embedded. This could be on
* BeanPropertyAssocOne rather than here. Put it here for checking Id type
* (embedded or not).
*/
final boolean embedded;
-
- /**
- * Flag indicating if this the version property.
- */
private final boolean version;
-
private final boolean naturalKey;
-
- /**
- * Set if this property is nullable.
- */
private final boolean nullable;
-
private final boolean unique;
-
/**
* Is this property include in database resultSet.
*/
private final boolean dbRead;
-
/**
* Include in DB insert.
*/
private final boolean dbInsertable;
-
/**
* Include in DB update.
*/
private final boolean dbUpdatable;
- /**
- * True if the property is based on a SECONDARY table.
- */
private final boolean secondaryTable;
-
private final TableJoin secondaryTableJoin;
private final String secondaryTableJoinPrefix;
-
- /**
- * The property is inherited from a super class.
- */
private final boolean inherited;
-
private final Class> owningType;
-
private final boolean local;
-
- /**
- * True if the property is a Clob, Blob LongVarchar or LongVarbinary.
- */
private final boolean lob;
-
private final boolean fetchEager;
-
final boolean isTransient;
/**
* The logical bean property name.
*/
final String name;
-
final int propertyIndex;
-
- /**
- * The reflected field.
- */
private final Field field;
-
- /**
- * The bean type.
- */
private final Class> propertyType;
-
private final String dbBind;
-
- /**
- * The database column. This can include quoted identifiers.
- */
final String dbColumn;
-
private final String elPrefix;
final String elPlaceHolder;
final String elPlaceHolderEncrypted;
-
- /**
- * Select part of a SQL Formula used to populate this property.
- */
private final String sqlFormulaSelect;
-
- /**
- * Join part of a SQL Formula.
- */
final String sqlFormulaJoin;
-
private final String aggregation;
-
private final boolean formula;
-
- /**
- * Set to true if stored encrypted.
- */
private final boolean dbEncrypted;
-
private final boolean localEncrypted;
-
private final int dbEncryptedType;
-
- /**
- * The jdbc data type this maps to.
- */
private final int dbType;
-
final boolean excludedFromHistory;
-
/**
* Generator for insert or update timestamp etc.
*/
private final GeneratedProperty generatedProperty;
-
private final BeanPropertyGetter getter;
-
private final BeanPropertySetter setter;
-
final BeanDescriptor> descriptor;
-
/**
* Used for non-jdbc native types (java.util.Date Enums etc). Converts from
* logical to jdbc types.
@@ -221,54 +147,39 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
final ScalarType scalarType;
private final DocPropertyOptions docOptions;
-
/**
* The length or precision for DB column.
*/
private final int dbLength;
-
/**
* The scale for DB column (decimal).
*/
private final int dbScale;
-
/**
* Deployment defined DB column definition.
*/
private final String dbColumnDefn;
-
/**
* DB Column default value for DDL definition (FALSE, NOW etc).
*/
private final String dbColumnDefault;
private final List dbMigrationInfos;
-
/**
* Database DDL column comment.
*/
private final String dbComment;
-
private final DbEncryptFunction dbEncryptFunction;
-
private int deployOrder;
-
final boolean jsonSerialize;
final boolean jsonDeserialize;
private final boolean unmappedJson;
private final boolean tenantId;
-
private final boolean draft;
-
private final boolean draftOnly;
-
private final boolean draftDirty;
-
private final boolean draftReset;
-
private final boolean softDelete;
-
private final String softDeleteDbSet;
-
private final String softDeleteDbPredicate;
public BeanProperty(DeployBeanProperty deploy) {
@@ -574,9 +485,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty {
ctx.appendFormulaSelect(aggregation);
} else if (formula) {
ctx.appendFormulaSelect(sqlFormulaSelect);
-
} else if (!isTransient && !ignoreDraftOnlyProperty(ctx.isDraftQuery())) {
-
if (secondaryTableJoin != null) {
ctx.pushTableAlias(ctx.getRelativePrefix(secondaryTableJoinPrefix));
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java
index 739021196..33304f5f9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssoc.java
@@ -43,48 +43,34 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
* so as to avoid a dependency loop between BeanDescriptors.
*/
BeanDescriptor targetDescriptor;
-
IdBinder targetIdBinder;
-
InheritInfo targetInheritInfo;
-
String targetIdProperty;
-
/**
* Derived list of exported property and matching foreignKey
*/
ExportedProperty[] exportedProperties;
-
/**
* Persist settings.
*/
final BeanCascadeInfo cascadeInfo;
-
/**
* Join between the beans.
*/
final TableJoin tableJoin;
-
final PropertyForeignKey foreignKey;
-
/**
* The type of the joined bean.
*/
private final Class targetType;
-
/**
* The join table information.
*/
final BeanTable beanTable;
-
final String mappedBy;
-
private final String docStoreDoc;
-
private final String extraWhere;
-
private final int fetchPreference;
-
private boolean saveRecurseSkippable;
/**
@@ -98,7 +84,6 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
this.mappedBy = InternString.intern(deploy.getMappedBy());
this.docStoreDoc = deploy.getDocStoreDoc();
this.tableJoin = new TableJoin(deploy.getTableJoin());
-
this.targetType = deploy.getTargetType();
this.cascadeInfo = deploy.getCascadeInfo();
this.fetchPreference = deploy.getFetchPreference();
@@ -173,10 +158,8 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
* Create a ElPropertyValue for a *ToOne or *ToMany.
*/
ElPropertyValue createElPropertyValue(String propName, String remainder, ElPropertyChainBuilder chain, boolean propertyDeploy) {
-
// associated or embedded bean
BeanDescriptor> embDesc = getTargetDescriptor();
-
if (chain == null) {
chain = new ElPropertyChainBuilder(isEmbedded(), propName);
}
@@ -300,7 +283,6 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
* Return true if the unique id properties are all not null for this bean.
*/
public boolean hasId(EntityBean bean) {
-
BeanDescriptor> targetDesc = getTargetDescriptor();
BeanProperty idProp = targetDesc.getIdProperty();
// all the unique properties are non-null
@@ -339,7 +321,6 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
*/
@Override
public void docStoreInclude(boolean includeByDefault, DocStructure docStructure) {
-
String embeddedDoc = getDocStoreDoc();
if (embeddedDoc == null) {
// not annotated so use include by default
@@ -367,17 +348,14 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
@Override
public void docStoreMapping(DocMappingBuilder mapping, String prefix) {
-
if (mapping.includesPath(prefix, name)) {
String fullName = SplitName.add(prefix, name);
DocPropertyType type = isMany() ? DocPropertyType.LIST : DocPropertyType.OBJECT;
DocPropertyMapping nested = new DocPropertyMapping(name, type);
-
mapping.push(nested);
targetDescriptor.docStoreMapping(mapping, fullName);
mapping.pop();
-
if (!nested.getChildren().isEmpty()) {
mapping.add(nested);
}
@@ -444,20 +422,16 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
* descriptor back to local database columns in the TableJoin.
*/
ImportedId createImportedId(BeanPropertyAssoc> owner, BeanDescriptor> target, TableJoin join) {
-
BeanProperty idProp = target.getIdProperty();
BeanProperty[] others = target.propertiesBaseScalar();
-
if (descriptor.isRawSqlBased()) {
String dbColumn = owner.getDbColumn();
return new ImportedIdSimple(owner, dbColumn, null, idProp, 0);
}
-
- TableJoinColumn[] cols = join.columns();
-
if (idProp == null) {
return null;
}
+ TableJoinColumn[] cols = join.columns();
if (!idProp.isEmbedded()) {
// simple single scalar id
if (cols.length != 1) {
@@ -473,42 +447,34 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
BeanPropertyAssocOne> embProp = (BeanPropertyAssocOne>) idProp;
BeanProperty[] embBaseProps = embProp.getTargetDescriptor().propertiesBaseScalar();
ImportedIdSimple[] scalars = createImportedList(owner, cols, embBaseProps, others);
-
return new ImportedIdEmbedded(owner, embProp, scalars);
}
}
private ImportedIdSimple[] createImportedList(BeanPropertyAssoc> owner, TableJoinColumn[] cols, BeanProperty[] props, BeanProperty[] others) {
-
ArrayList list = new ArrayList<>(cols.length);
-
for (TableJoinColumn col : cols) {
list.add(createImportedScalar(owner, col, props, others));
}
-
return ImportedIdSimple.sort(list);
}
private ImportedIdSimple createImportedScalar(BeanPropertyAssoc> owner, TableJoinColumn col, BeanProperty[] props, BeanProperty[] others) {
-
String matchColumn = col.getForeignDbColumn();
String localColumn = col.getLocalDbColumn();
String localSqlFormula = col.getLocalSqlFormula();
boolean insertable = col.isInsertable();
boolean updateable = col.isUpdateable();
-
for (int j = 0; j < props.length; j++) {
if (props[j].getDbColumn().equalsIgnoreCase(matchColumn)) {
return new ImportedIdSimple(owner, localColumn, localSqlFormula, props[j], j, insertable, updateable);
}
}
-
for (int j = 0; j < others.length; j++) {
if (others[j].getDbColumn().equalsIgnoreCase(matchColumn)) {
return new ImportedIdSimple(owner, localColumn, localSqlFormula, others[j], j + props.length, insertable, updateable);
}
}
-
String msg = "Error with the Join on [" + getFullBeanName()
+ "]. Could not find the local match for [" + matchColumn + "] "//in table["+searchTable+"]?"
+ " Perhaps an error in a @JoinColumn";
@@ -530,10 +496,8 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
}
private void flatten(List bindValues, Object parentId) {
-
if (isExportedSimple()) {
bindValues.add(parentId);
-
} else {
EntityBean parent = (EntityBean) parentId;
for (ExportedProperty exportedProperty : exportedProperties) {
@@ -543,7 +507,6 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
}
void bindParentIds(DefaultSqlUpdate delete, List parentIds) {
-
if (isExportedSimple()) {
delete.setParameter(new MultiValueWrapper(parentIds));
} else {
@@ -556,7 +519,6 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
}
void bindParentId(DefaultSqlUpdate sqlUpd, Object parentId) {
-
if (isExportedSimple()) {
sqlUpd.setParameter(parentId);
return;
@@ -595,12 +557,9 @@ public abstract class BeanPropertyAssoc extends BeanProperty implements STree
* Find and return the exported property matching to this property.
*/
ExportedProperty findMatch(boolean embedded, BeanProperty prop, String matchColumn, TableJoin tableJoin) {
-
String searchTable = tableJoin.getTable();
-
for (TableJoinColumn column : tableJoin.columns()) {
String matchTo = column.getLocalDbColumn();
-
if (matchColumn.equalsIgnoreCase(matchTo)) {
String foreignCol = column.getForeignDbColumn();
return new ExportedProperty(embedded, foreignCol, prop);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
index c823e9a7e..37e5b7990 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
@@ -43,7 +43,6 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
private static final Logger logger = LoggerFactory.getLogger(BeanPropertyAssocMany.class);
private final BeanPropertyAssocManyJsonHelp jsonHelp;
-
/**
* Join for manyToMany intersection table.
*/
@@ -51,72 +50,46 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
private final String intersectionPublishTable;
private final String intersectionDraftTable;
private final boolean orphanRemoval;
-
private IntersectionTable intersectionTable;
-
/**
* For ManyToMany this is the Inverse join used to build reference queries.
*/
final TableJoin inverseJoin;
-
/**
* Flag to indicate that this is a unidirectional relationship.
*/
private final boolean unidirectional;
-
private final boolean o2mJoinTable;
-
/**
* Flag to indicate that the target has a order column to auto populate.
*/
private final boolean hasOrderColumn;
-
/**
* Flag to indicate manyToMany relationship.
*/
private final boolean manyToMany;
-
private final boolean elementCollection;
-
/**
* Descriptor for the 'target' when the property maps to an element collection.
*/
final BeanDescriptor elementDescriptor;
-
/**
* Order by used when fetch joining the associated many.
*/
private final String fetchOrderBy;
-
/**
* Order by used when lazy loading the associated many.
*/
private String lazyFetchOrderBy;
-
private final String mapKey;
-
- /**
- * The type of the many, set, list or map.
- */
private final ManyType manyType;
-
private final ModifyListenMode modifyListenMode;
-
private BeanProperty mapKeyProperty;
-
- /**
- * Property on the 'child' bean that links back to the 'master'.
- */
private BeanPropertyAssocOne> childMasterProperty;
-
private String childMasterIdProperty;
-
private boolean embeddedExportedProperties;
-
private BeanCollectionHelp help;
-
private ImportedId importedId;
-
private BeanPropertyAssocManySqlHelp sqlHelp;
/**
@@ -234,6 +207,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
/**
* Return the underlying collection of beans.
*/
+ @SuppressWarnings("rawtypes")
public Collection getRawCollection(EntityBean bean) {
return help.underlying(getVal(bean));
}
@@ -399,8 +373,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
/**
- * Return the mode for listening to modifications to collections for this
- * association.
+ * Return the mode for listening to modifications to collections for this association.
*/
public ModifyListenMode getModifyListenMode() {
return modifyListenMode;
@@ -470,8 +443,6 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
sb.append(getExtraWhere().replace("${ta}", "x"));
}
}
-
-
if (softDelete) {
String alias = hasJoinTable() ? "x2" : "x";
sb.append(" and ").append(targetDescriptor.getSoftDeletePredicate(alias));
@@ -606,7 +577,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
if (!manyToMany && childMasterProperty != null) {
// bidirectional in the sense that the 'master' property
// exists on the 'detail' bean
- childMasterProperty.setValue(child, parent);
+ childMasterProperty.setValueIntercept(child, parent);
}
}
@@ -720,7 +691,6 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
*
* Note that childMasterProperty will be null if a field is used instead of
* a ManyToOne bean association.
- *
*/
private BeanPropertyAssocOne> initChildMasterProperty() {
if (unidirectional) {
@@ -907,7 +877,6 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
// add new relationship (Map not allowed here)
liveVal.addBean(targetDescriptor.createReference(id, null));
}
-
} else {
// recursively publish the OneToMany child bean
T newLive = targetDescriptor.publish(bean, liveBean);
@@ -917,7 +886,6 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
}
}
}
-
// anything remaining should be deleted (so remove from modify aware collection)
Collection values = liveBeansAsMap.values();
for (T value : values) {
@@ -930,7 +898,6 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
liveVal.size();
Collection> liveBeans = liveVal.getActualDetails();
Map