Custom Class Loader
This is the manual for older MicroStream versions (Version < 5.0).
The new documentation (Version >= 5.0) is located at:
https://docs.microstream.one/
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:
Copy EmbeddedStorageManager storage = EmbeddedStorage . Foundation ( Paths . get ( "mydb" ))
. onConnectionFoundation (cf ->
cf . setClassLoaderProvider ( ClassLoaderProvider . New (myClassLoader))
)
. start ();
Or return a ClassLoader
depending on the requested type:
Copy 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:
Copy EmbeddedStorageManager storage = EmbeddedStorage . Foundation ( Paths . get ( "mydb" ))
. onConnectionFoundation (cf ->
cf . setClassLoaderProvider ( ClassLoaderProvider . New (
Thread . currentThread () . getContextClassLoader ()
))
)
. start ();