public ExternalFunction(IExternalFunctionInfo finfo, IScalarEvaluatorFactory args[], IHyracksTaskContext context, IApplicationContext appCtx) throws HyracksDataException { this.finfo = finfo; this.evaluatorFactories = args; argumentEvaluators = new IScalarEvaluator[args.length]; for (int i = 0; i < args.length; i++) { argumentEvaluators[i] = args[i].createScalarEvaluator(context); } ILibraryManager libraryManager = appCtx.getLibraryManager(); String[] fnameComponents = finfo.getFunctionIdentifier().getName().split("#"); String functionLibary = fnameComponents[0]; String dataverse = finfo.getFunctionIdentifier().getNamespace(); functionHelper = new JavaFunctionHelper(finfo, resultBuffer, libraryManager.getFunctionParameters(dataverse, finfo.getFunctionIdentifier().getName())); ClassLoader libraryClassLoader = libraryManager.getLibraryClassLoader(dataverse, functionLibary); String classname = finfo.getFunctionBody().trim(); Class<?> clazz; try { clazz = Class.forName(classname, true, libraryClassLoader); externalFunctionFactory = (IFunctionFactory) clazz.newInstance(); externalFunction = externalFunctionFactory.getExternalFunction(); } catch (Exception e) { throw new RuntimeDataException(ErrorCode.LIBRARY_EXTERNAL_FUNCTION_UNABLE_TO_LOAD_CLASS, e, classname); } }