From 57231c80a88169a3b7b3bf3d8aaf5b519949ec2c Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Thu, 24 Aug 2017 22:15:01 +1200 Subject: [PATCH] #1084 - NPE When DB Migration generation run with @WhoCreated mapping --- src/main/java/io/ebean/config/ServerConfig.java | 11 +++++++++++ .../ebeaninternal/server/core/DefaultContainer.java | 4 ++-- .../generatedproperty/GeneratedPropertyFactory.java | 11 +++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/ebean/config/ServerConfig.java b/src/main/java/io/ebean/config/ServerConfig.java index 1504f3463..2731ce451 100644 --- a/src/main/java/io/ebean/config/ServerConfig.java +++ b/src/main/java/io/ebean/config/ServerConfig.java @@ -12,6 +12,7 @@ import io.ebean.cache.ServerCachePlugin; import io.ebean.config.dbplatform.DatabasePlatform; import io.ebean.config.dbplatform.DbEncrypt; import io.ebean.config.dbplatform.DbType; +import io.ebean.dbmigration.DbOffline; import io.ebean.dbmigration.MigrationRunner; import io.ebean.event.BeanFindController; import io.ebean.event.BeanPersistController; @@ -1632,6 +1633,16 @@ public class ServerConfig { this.encryptor = encryptor; } + /** + * Return true if the instance is coming up in offline mode. + *

+ * Offline mode is mostly used when generating DB migration. + *

+ */ + public boolean isOfflineMode() { + return dbOffline || DbOffline.isSet(); + } + /** * Return true if the EbeanServer instance should be created in offline mode. */ diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java index 27e1739d3..6aa7f49bf 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java @@ -268,7 +268,7 @@ public class DefaultContainer implements SpiContainer { private DataSource getDataSourceFromConfig(ServerConfig config) { - if (config.isDbOffline() || DbOffline.isSet()) { + if (config.isOfflineMode()) { logger.debug("... DbOffline using platform [{}]", DbOffline.getPlatform()); return null; } @@ -334,7 +334,7 @@ public class DefaultContainer implements SpiContainer { */ private boolean checkDataSource(ServerConfig serverConfig) { - if (serverConfig.isDbOffline() || DbOffline.isSet()) { + if (serverConfig.isOfflineMode()) { return false; } diff --git a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java index 922fdcdc8..cdce7e3bf 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java +++ b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java @@ -45,6 +45,10 @@ public class GeneratedPropertyFactory { if (currentUserProvider != null) { generatedWhoCreated = new GeneratedWhoCreated(currentUserProvider); generatedWhoModified = new GeneratedWhoModified(currentUserProvider); + } else if (serverConfig.isOfflineMode()) { + currentUserProvider = new DummyCurrentUser(); + generatedWhoCreated = new GeneratedWhoCreated(currentUserProvider); + generatedWhoModified = new GeneratedWhoModified(currentUserProvider); } else { generatedWhoCreated = null; generatedWhoModified = null; @@ -150,4 +154,11 @@ public class GeneratedPropertyFactory { // do nothing } } + + private static class DummyCurrentUser implements CurrentUserProvider { + @Override + public Object currentUser() { + throw new RuntimeException("never called"); + } + } }