mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-10-24 23:56:36 +00:00
#305 - ENH: Add EbeanServerFactory.createWithContextClassLoader() to support OSGi
This commit is contained in:
@@ -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.
|
||||
* <p>
|
||||
* This is typically invoked via JVM shutdown hook and not explicitly called.
|
||||
* </p>
|
||||
*/
|
||||
public static synchronized void shutdown() {
|
||||
ShutdownManager.shutdown();
|
||||
}
|
||||
|
||||
|
||||
private static EbeanServer createInternal(ServerConfig config) {
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user