protected static List<JavaHook> getActivityHooks(ActivityDefinition activity) { if (activity.getHooks() != null) { List<JavaHook> javaHooks = new ArrayList<JavaHook>(); for (HookDefinition hook : activity.getHooks()) { boolean inTransaction = hook.isThrowingException(); final JavaHook.Type type = JavaHook.MAPPING.get(hook.getEvent()); final JavaHook javaHook = new JavaHook(hook.getClassName(), type, inTransaction); javaHooks.add(javaHook); } return javaHooks; } return null; }
public static void executeHooks(List<JavaHook> javaHooks, XpdlExecution execution, String activityId, JavaHook.Type type) { if (javaHooks != null) { for (JavaHook javaHook : javaHooks) { if (javaHook.getType().equals(type)) { executeHook(execution, activityId, javaHook); } } } } }
final String activityInstanceId = execution.getActivityInstanceId(); final ProcessDefinitionUUID processUUID = instance.getProcessDefinitionUUID(); boolean inTransaction = javaHook.isInTransaction(); try { Object hookInstance = ClassDataLoader.getHookInstance(instance.getPackageDefinitionUUID(), javaHook); if (inTransaction) { throw new BonitaWrapperException( new HookInvocationException(javaHook.toString(), e) ); } else if (LOG.isLoggable(Level.SEVERE)) {
public void signal(ActivityExecution execution, String signal, Map<String, Object> parameters) { XpdlExecution xpdlExecution = (XpdlExecution) execution; if (BODY_FINISHED.equals(signal)) { end(xpdlExecution); } else if (ACT_INSTANCE_FINISHED.equals(signal)) { xpdlExecution.setWaitingForActivityInstanceNb(xpdlExecution.getWaitingForActivityInstanceNb() - 1); if (xpdlExecution.getWaitingForActivityInstanceNb() == 0) { // TODO: cancel remaining activity instances executeSplit(xpdlExecution, false); } } else if (signal != null && deadlines != null) { for (String deadline : deadlines) { if (deadline.equals(signal)) { Authentication.setUserId("SYSTEM"); // By default, a deadline does not propagate execution xpdlExecution.waitForSignal(); String activityId = xpdlExecution.getNode().getName(); JavaHook javaHook = new JavaHook(signal, JavaHook.Type.onDeadline, true); HookExecutor.executeHook(xpdlExecution, activityId, javaHook); return; } } } }
public void signal(final ActivityExecution execution, final String signal, final Map<String, Object> parameters) { final XpdlExecution xpdlExecution = (XpdlExecution) execution; if (AbstractActivity.BODY_FINISHED.equals(signal)) { this.end(xpdlExecution); } else if (AbstractActivity.ACT_INSTANCE_FINISHED.equals(signal)) { xpdlExecution.setWaitingForActivityInstanceNb(xpdlExecution.getWaitingForActivityInstanceNb() - 1); if (xpdlExecution.getWaitingForActivityInstanceNb() == 0) { if (xpdlExecution.getExecutions() != null) { for (final OpenExecution execToAbort : new ArrayList<OpenExecution>(xpdlExecution.getExecutions())) { ((XpdlExecution) execToAbort).abort(); } } this.executeSplit(xpdlExecution, false); } } else if (signal != null && this.deadlines != null) { for (final String deadline : this.deadlines) { if (deadline.equals(signal)) { Authentication.setUserId(BonitaConstants.SYSTEM_USER); // By default, a deadline does not propagate execution xpdlExecution.waitForSignal(); final String activityId = xpdlExecution.getNode().getName(); final JavaHook javaHook = new JavaHook(signal, JavaHook.Type.onDeadline, true); EngineEnvTool.getHookExecutor() .executeHook(xpdlExecution, activityId, javaHook); return; } } } }