Custom Class Loader

In certain environments or setups it is necessary to provide specific ClassLoader instances. This can be done by customizing the connection foundation.

If a single ClassLoader is sufficient, just create a new provider by handing over the instance:

EmbeddedStorageManager storage = EmbeddedStorage.Foundation(Paths.get("mydb"))
	.onConnectionFoundation(cf ->
		cf.setClassLoaderProvider(ClassLoaderProvider.New(myClassLoader))
	)
	.start();

Or return a ClassLoader depending on the requested type:

EmbeddedStorageManager storage = EmbeddedStorage.Foundation(Paths.get("mydb"))
	.onConnectionFoundation(cf ->
		cf.setClassLoaderProvider(typeName -> {
			if(typeName.startsWith("com.company.module1."))
			{
				return module1ClassLoader;
			}
			if(typeName.startsWith("com.company.module2."))
			{
				return module2ClassLoader;
			}
			return ClassLoader.getSystemClassLoader();
		})
	)
	.start();

Class Loader in Application Server

Most application servers load the session’s classes with the context class loader. Just use the one of the current thread:

EmbeddedStorageManager storage = EmbeddedStorage.Foundation(Paths.get("mydb"))
	.onConnectionFoundation(cf ->
		cf.setClassLoaderProvider(ClassLoaderProvider.New(
			Thread.currentThread().getContextClassLoader()
		))
	)
	.start();