diff --git a/src/main/java/com/avaje/ebean/EbeanServerFactory.java b/src/main/java/com/avaje/ebean/EbeanServerFactory.java index 4dfa49bcb..290def9fb 100644 --- a/src/main/java/com/avaje/ebean/EbeanServerFactory.java +++ b/src/main/java/com/avaje/ebean/EbeanServerFactory.java @@ -3,6 +3,7 @@ package com.avaje.ebean; import com.avaje.ebean.common.SpiContainer; import com.avaje.ebean.config.ContainerConfig; import com.avaje.ebean.config.ServerConfig; +import com.avaje.ebeaninternal.server.lib.ShutdownManager; import javax.persistence.PersistenceException; import java.lang.reflect.Constructor; @@ -75,6 +76,32 @@ public class EbeanServerFactory { return server; } + /** + * Create using the ServerConfig additionally specifying a classLoader to use as the context class loader. + */ + public static synchronized EbeanServer createWithContextClassLoader(ServerConfig config, ClassLoader classLoader) { + + ClassLoader currentContextLoader = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(classLoader); + try { + return EbeanServerFactory.create(config); + + } finally { + // set the currentContextLoader back + Thread.currentThread().setContextClassLoader(currentContextLoader); + } + } + + /** + * Shutdown gracefully all EbeanServers cleaning up any resources as required. + *
+ * This is typically invoked via JVM shutdown hook and not explicitly called. + *
+ */ + public static synchronized void shutdown() { + ShutdownManager.shutdown(); + } + private static EbeanServer createInternal(ServerConfig config) { diff --git a/src/test/java/com/avaje/tests/unitinternal/HelloMain.java b/src/test/java/com/avaje/tests/unitinternal/HelloMain.java index e700a7bad..0cf57ecd0 100644 --- a/src/test/java/com/avaje/tests/unitinternal/HelloMain.java +++ b/src/test/java/com/avaje/tests/unitinternal/HelloMain.java @@ -33,7 +33,7 @@ public class HelloMain { dataSourceConfig.setDriver("org.h2.Driver"); dataSourceConfig.setUsername("howtouser"); dataSourceConfig.setPassword(""); - dataSourceConfig.setUrl("jdbc:h2:db/howto1"); + dataSourceConfig.setUrl("jdbc:h2:~/db/howto1"); // -> server serverConfig.setName("default"); @@ -46,7 +46,7 @@ public class HelloMain { serverConfig.addClass(TOne.class); } - EbeanServer eServer = EbeanServerFactory.create(serverConfig); + EbeanServer eServer = EbeanServerFactory.createWithContextClassLoader(serverConfig, HelloMain.class.getClassLoader()); long id = 1; TOne data = eServer.find(TOne.class, id); @@ -58,7 +58,8 @@ public class HelloMain { } else { System.out.println(String.format("############\n%s############", data.getName())); } - // ShutdownManager.shutdown(); + + EbeanServerFactory.shutdown(); } }