@@ -113,20 +113,29 @@ private void initializeFunctionInstanceInjector() {
113113 }
114114
115115 private FunctionExecutionMiddleware getFunctionExecutionMiddleWare () {
116- FunctionExecutionMiddleware functionExecutionMiddleware = new FunctionExecutionMiddleware (
117- JavaMethodExecutors .createJavaMethodExecutor (this .classLoaderProvider .createClassLoader ()));
116+ FunctionExecutionMiddleware functionExecutionMiddleware = new FunctionExecutionMiddleware (JavaMethodExecutor .getInstance ());
118117 WorkerLogManager .getSystemLogger ().info ("Load last middleware: FunctionExecutionMiddleware" );
119118 return functionExecutionMiddleware ;
120119 }
121120
122121 public Optional <TypedData > invokeMethod (String id , InvocationRequest request , List <ParameterBinding > outputs )
123122 throws Exception {
124123 ExecutionContextDataSource executionContextDataSource = buildExecutionContext (id , request );
125- this . invocationChainFactory . create (). doNext (executionContextDataSource );
124+ invoke (executionContextDataSource );
126125 outputs .addAll (executionContextDataSource .getDataStore ().getOutputParameterBindings (true ));
127126 return executionContextDataSource .getDataStore ().getDataTargetTypedValue (BindingDataStore .RETURN_NAME );
128127 }
129128
129+ private void invoke (ExecutionContextDataSource executionContextDataSource ) throws Exception {
130+ ClassLoader prevContextClassLoader = Thread .currentThread ().getContextClassLoader ();
131+ try {
132+ Thread .currentThread ().setContextClassLoader (classLoaderProvider .createClassLoader ());
133+ this .invocationChainFactory .create ().doNext (executionContextDataSource );
134+ } finally {
135+ Thread .currentThread ().setContextClassLoader (prevContextClassLoader );
136+ }
137+ }
138+
130139 private ExecutionContextDataSource buildExecutionContext (String id , InvocationRequest request )
131140 throws NoSuchMethodException {
132141 ImmutablePair <String , FunctionDefinition > methodEntry = this .methods .get (id );
0 commit comments