> For the complete documentation index, see [llms.txt](https://manual.docs.microstream.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.docs.microstream.one/3.0/data-store/customizing/custom-class-loader.md).

# Custom Class Loader

{% hint style="warning" %}
**This is the manual for older MicroStream versions (Version < 5.0).**

**The new documentation (Version >= 5.0) is located at:**

[https://docs.microstream.one/](https://docs.microstream.one/manual)
{% endhint %}

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:

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

Or return a `ClassLoader` depending on the requested type:

```java
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:

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