private Set<String> executeFilter(final String connectorClassName, final Map<String, Object[]> parameters, final Set<String> members, final ProcessDefinitionUUID definitionUUID, final ClassLoader classLoader) throws Exception { FacadeUtil.checkArgsNotNull(members); final ClassLoader baseClassLoader = Thread.currentThread().getContextClassLoader(); try { Filter connector = null; if (classLoader == null) { connector = (Filter) EnvTool.getClassDataLoader().getInstance(definitionUUID, connectorClassName); } else { Thread.currentThread().setContextClassLoader(classLoader); final Class<?> objectClass = Class.forName(connectorClassName, true, classLoader); connector = (Filter) objectClass.newInstance(); } return ConnectorExecutor.executeFilter(connector, parameters, members); } finally { Thread.currentThread().setContextClassLoader(baseClassLoader); } }
private static Set<String> executeFilter(final TaskInstance task, final Set<String> candidates, final Performer performer) { final ProcessDefinitionUUID processUUID = task.getProcessDefinitionUUID(); final ClassLoader baseClassLoader = Thread.currentThread().getContextClassLoader(); try { final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(processUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final FilterDefinition filterDefinition = performer.getFilterDefinition(); if (filterDefinition != null) { final PerformerAssign performerAssign = getPerformerAssign(processUUID, filterDefinition); Filter filter = null; if (performerAssign == null) { filter = EnvTool.getClassDataLoader().getInstance(Filter.class, processUUID, filterDefinition); } else { filter = new PerformerAssignFilter(); } try { return ConnectorExecutor.executeFilter(filter, performerAssign, task, candidates, filterDefinition.getParameters()); } catch (final Exception e) { throw new BonitaWrapperException(e); } } return candidates; } finally { Thread.currentThread().setContextClassLoader(baseClassLoader); } }