private ConnectorResult executeConnectorInClassloader(final String implementationClassName, final ClassLoader classLoader, final Map<String, Object> inputParameters) throws SConnectorException { final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(classLoader); Connector connector = (Connector) Class.forName(implementationClassName, true, classLoader).newInstance(); final SConnectorAdapter sConnectorAdapter = new SConnectorAdapter(connector); return new ConnectorResult(connector, connectorExecutor.execute(sConnectorAdapter, inputParameters, classLoader)); } catch (final ClassNotFoundException e) { throw new SConnectorException(implementationClassName + " can not be found.", e); } catch (final InstantiationException e) { throw new SConnectorException(implementationClassName + " can not be instantiated.", e); } catch (Throwable e) { throw new SConnectorException(e); } finally { Thread.currentThread().setContextClassLoader(contextClassLoader); } }
@Override public void disconnect(final ConnectorResult result) throws SConnectorException { final long startTime = System.currentTimeMillis(); try { connectorExecutor.disconnect(new SConnectorAdapter(result.getConnector())); } catch (final org.bonitasoft.engine.connector.exception.SConnectorException e) { throw new SConnectorException(e); } finally { if (timeTracker.isTrackable(TimeTrackerRecords.EXECUTE_CONNECTOR_DISCONNECT)) { final long endTime = System.currentTimeMillis(); final StringBuilder desc = new StringBuilder(); desc.append("ConnectorResult: "); desc.append(result); timeTracker.track(TimeTrackerRecords.EXECUTE_CONNECTOR_DISCONNECT, desc.toString(), endTime - startTime); } } }
@Override public void execute() throws SBonitaException { final boolean tenantWasActivated = platformService.activateTenant(tenantId); // we execute that only if the tenant was not already activated if (tenantWasActivated) { workService.start(); connectorExecutor.start(); startCleanInvalidSessionsJob(); final List<JobRegister> jobsToRegister = tenantConfiguration.getJobsToRegister(); for (final JobRegister jobRegister : jobsToRegister) { registerJob(jobRegister); } schedulerService.resumeJobs(tenantId); } }
@Override public void execute() throws SBonitaException { final boolean tenantWasActivated = platformService.activateTenant(tenantId); // we execute that only if the tenant was not already activated if (tenantWasActivated) { workService.start(); connectorExecutor.start(); startCleanInvalidSessionsJob(); final List<JobRegister> jobsToRegister = tenantConfiguration.getJobsToRegister(); for (final JobRegister jobRegister : jobsToRegister) { registerJob(jobRegister); } schedulerService.resumeJobs(tenantId); } }
private ConnectorResult executeConnectorInClassloader(final String implementationClassName, final ClassLoader classLoader, final Map<String, Object> inputParameters) throws SConnectorException { final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(classLoader); Connector connector = (Connector) Class.forName(implementationClassName, true, classLoader).newInstance(); final SConnectorAdapter sConnectorAdapter = new SConnectorAdapter(connector); return new ConnectorResult(connector, connectorExecutor.execute(sConnectorAdapter, inputParameters, classLoader)); } catch (final ClassNotFoundException e) { throw new SConnectorException(implementationClassName + " can not be found.", e); } catch (final InstantiationException e) { throw new SConnectorException(implementationClassName + " can not be instantiated.", e); } catch (Throwable e) { throw new SConnectorException(e); } finally { Thread.currentThread().setContextClassLoader(contextClassLoader); } }
@Override public void disconnect(final ConnectorResult result) throws SConnectorException { final long startTime = System.currentTimeMillis(); try { connectorExecutor.disconnect(new SConnectorAdapter(result.getConnector())); } catch (final org.bonitasoft.engine.connector.exception.SConnectorException e) { throw new SConnectorException(e); } finally { if (timeTracker.isTrackable(TimeTrackerRecords.EXECUTE_CONNECTOR_DISCONNECT)) { final long endTime = System.currentTimeMillis(); final StringBuilder desc = new StringBuilder(); desc.append("ConnectorResult: "); desc.append(result); timeTracker.track(TimeTrackerRecords.EXECUTE_CONNECTOR_DISCONNECT, desc.toString(), endTime - startTime); } } }
protected FilterResult executeFilterInClassloader(final String implementationClassName, final Map<String, SExpression> parameters, final ClassLoader classLoader, final SExpressionContext expressionContext, final String actorName) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SUserFilterExecutionException, SExpressionTypeUnknownException, SExpressionEvaluationException, SExpressionDependencyMissingException, SInvalidExpressionException, SConnectorException { final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(classLoader); final UserFilter filter = (UserFilter) Class.forName(implementationClassName, true, classLoader).newInstance(); if (filter == null) { throw new SUserFilterExecutionException("Can not instantiate UserFilter " + implementationClassName + ". It is null."); } final SConnectorUserFilterAdapter sConnectorAdapter = new SConnectorUserFilterAdapter(filter, actorName); final HashMap<String, Object> inputParameters = new HashMap<>(parameters.size()); for (final Entry<String, SExpression> input : parameters.entrySet()) { if (expressionContext != null) { inputParameters.put(input.getKey(), expressionResolverService.evaluate(input.getValue(), expressionContext)); } else { inputParameters.put(input.getKey(), expressionResolverService.evaluate(input.getValue())); } } connectorExecutor.execute(sConnectorAdapter, inputParameters, classLoader); return new FilterResultImpl(sConnectorAdapter.getUserIds(), sConnectorAdapter.shouldAutoAssignTaskIfSingleResult()); } finally { Thread.currentThread().setContextClassLoader(contextClassLoader); } }
protected FilterResult executeFilterInClassloader(final String implementationClassName, final Map<String, SExpression> parameters, final ClassLoader classLoader, final SExpressionContext expressionContext, final String actorName) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SUserFilterExecutionException, SExpressionTypeUnknownException, SExpressionEvaluationException, SExpressionDependencyMissingException, SInvalidExpressionException, SConnectorException { final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(classLoader); final UserFilter filter = (UserFilter) Class.forName(implementationClassName, true, classLoader).newInstance(); if (filter == null) { throw new SUserFilterExecutionException("Can not instantiate UserFilter " + implementationClassName + ". It is null."); } final SConnectorUserFilterAdapter sConnectorAdapter = new SConnectorUserFilterAdapter(filter, actorName); final HashMap<String, Object> inputParameters = new HashMap<>(parameters.size()); for (final Entry<String, SExpression> input : parameters.entrySet()) { if (expressionContext != null) { inputParameters.put(input.getKey(), expressionResolverService.evaluate(input.getValue(), expressionContext)); } else { inputParameters.put(input.getKey(), expressionResolverService.evaluate(input.getValue())); } } connectorExecutor.execute(sConnectorAdapter, inputParameters, classLoader); return new FilterResultImpl(sConnectorAdapter.getUserIds(), sConnectorAdapter.shouldAutoAssignTaskIfSingleResult()); } finally { Thread.currentThread().setContextClassLoader(contextClassLoader); } }