diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/BootupClasses.java b/src/main/java/com/avaje/ebeaninternal/server/core/BootupClasses.java index 3868acd32..a19b255bf 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/BootupClasses.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/BootupClasses.java @@ -27,27 +27,27 @@ public class BootupClasses implements ClassPathSearchMatcher { private static final Logger logger = LoggerFactory.getLogger(BootupClasses.class); - private final ArrayList> embeddableList = new ArrayList>(); + private final List> embeddableList = new ArrayList>(); - private final ArrayList> entityList = new ArrayList>(); + private final List> entityList = new ArrayList>(); - private final ArrayList> scalarTypeList = new ArrayList>(); + private final List> scalarTypeList = new ArrayList>(); - private final ArrayList> scalarConverterList = new ArrayList>(); + private final List> scalarConverterList = new ArrayList>(); - private final ArrayList> compoundTypeList = new ArrayList>(); + private final List> compoundTypeList = new ArrayList>(); - private final ArrayList> beanControllerList = new ArrayList>(); + private final List> beanControllerList = new ArrayList>(); - private final ArrayList> transactionEventListenerList = new ArrayList>(); + private final List> transactionEventListenerList = new ArrayList>(); - private final ArrayList> beanFindControllerList = new ArrayList>(); - private final ArrayList> beanQueryAdapterList = new ArrayList>(); + private final List> beanFindControllerList = new ArrayList>(); + private final List> beanQueryAdapterList = new ArrayList>(); - private final ArrayList> beanListenerList = new ArrayList>(); + private final List> beanListenerList = new ArrayList>(); - private final ArrayList> serverConfigStartupList = new ArrayList>(); - private final ArrayList serverConfigStartupInstances = new ArrayList(); + private final List> serverConfigStartupList = new ArrayList>(); + private final List serverConfigStartupInstances = new ArrayList(); private final List findControllerInstances = new ArrayList(); private final List persistControllerInstances = new ArrayList(); @@ -75,10 +75,17 @@ public class BootupClasses implements ClassPathSearchMatcher { try { ServerConfigStartup newInstance = (ServerConfigStartup) cls.newInstance(); newInstance.onStart(serverConfig); - } catch (Exception e) { - String msg = "Error creating BeanQueryAdapter " + cls; - logger.error(msg, e); + // assume that the desired behavior is to fail - add your own try catch if needed + throw new IllegalStateException("Error running ServerConfigStartup " + cls, e); + } + } + for (ServerConfigStartup startup : serverConfigStartupInstances) { + try { + startup.onStart(serverConfig); + } catch (Exception e) { + // assume that the desired behavior is to fail - add your own try catch if needed + throw new IllegalStateException("Error running ServerConfigStartup " + startup.getClass(), e); } } } diff --git a/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java b/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java new file mode 100644 index 000000000..b7cc89e42 --- /dev/null +++ b/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java @@ -0,0 +1,59 @@ +package com.avaje.ebean; + +import com.avaje.ebean.config.ServerConfig; +import com.avaje.ebean.event.ServerConfigStartup; +import com.avaje.tests.model.basic.UTDetail; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class EbeanServerFactory_ServerConfigStart_Test { + + @Test + public void test() { + + ServerConfig config = new ServerConfig(); + config.setName("h2"); + config.loadFromProperties(); + config.setName("h2other"); + config.setDdlGenerate(false); + config.setDdlRun(false); + config.setDefaultServer(false); + config.setRegister(false); + + config.addClass(UTDetail.class); + config.addClass(OnStartupViaClass.class); + + // act - register an instance + OnStartup onStartup = new OnStartup(); + config.addServerConfigStartup(onStartup); + + EbeanServer ebeanServer = EbeanServerFactory.create(config); + + assertThat(onStartup.calledWithConfig).isSameAs(config); + assertThat(OnStartupViaClass.calledWithConfig).isSameAs(config); + + assertThat(ebeanServer).isNotNull(); + } + + public static class OnStartup implements ServerConfigStartup { + + ServerConfig calledWithConfig; + + @Override + public void onStart(ServerConfig serverConfig) { + calledWithConfig = serverConfig; + } + } + + + public static class OnStartupViaClass implements ServerConfigStartup { + + static ServerConfig calledWithConfig; + + @Override + public void onStart(ServerConfig serverConfig) { + calledWithConfig = serverConfig; + } + } +} \ No newline at end of file