in src/main/java/com/microsoft/azure/functions/worker/broker/JavaFunctionBroker.java [141:157]
private void initializeInvocationChainFactory() {
ArrayList<Middleware> middlewares = new ArrayList<>();
ClassLoader prevContextClassLoader = Thread.currentThread().getContextClassLoader();
ClassLoader newContextClassLoader = classLoaderProvider.createClassLoader();
try {
//ServiceLoader will use thread context classloader to verify loaded class
Thread.currentThread().setContextClassLoader(newContextClassLoader);
for (Middleware middleware : ServiceLoader.load(Middleware.class)) {
middlewares.add(middleware);
WorkerLogManager.getSystemLogger().info("Load middleware " + middleware.getClass().getSimpleName());
}
} finally {
Thread.currentThread().setContextClassLoader(prevContextClassLoader);
}
middlewares.add(getFunctionExecutionMiddleWare(newContextClassLoader));
this.invocationChainFactory = new InvocationChainFactory(middlewares);
}