@Override public void close() { close(false); }
public RuntimeManager newPerProcessInstanceRuntimeManager(RuntimeEnvironment environment, String identifier) { SessionFactory factory = getSessionFactory(environment, identifier); TaskServiceFactory taskServiceFactory = getTaskServiceFactory(environment); RuntimeManager manager = new PerProcessInstanceRuntimeManager(environment, factory, taskServiceFactory, identifier); initTimerService(environment, manager); ((AbstractRuntimeManager) manager).init(); return manager; }
@Override public void activate() { super.activate(); this.singleton.getKieSession().execute(new ExecutableCommand<Void>() { private static final long serialVersionUID = 4698203316007668876L; @Override public Void execute(org.kie.api.runtime.Context context) { KieSession ksession = ((RegistryContext) context).lookup( KieSession.class ); ksession.getEnvironment().set("Active", true); InternalProcessRuntime processRuntime = ((InternalKnowledgeRuntime) ksession).getProcessRuntime(); ((ProcessRuntimeImpl) processRuntime).initProcessEventListeners(); ((ProcessRuntimeImpl) processRuntime).initStartTimers(); return null; } }); }
protected void createLockOnGetEngine(Context<?> context, RuntimeEngine runtime) { if (!isUseLocking()) { logger.debug("Locking on runtime manager disabled"); return; } if (context instanceof ProcessInstanceIdContext) { Long piId = ((ProcessInstanceIdContext) context).getContextId(); createLockOnGetEngine(piId, runtime); } }
public AbstractRuntimeManager(RuntimeEnvironment environment, String identifier) { this.environment = environment; this.identifier = identifier; if (registry.isRegistered(identifier)) { throw new IllegalStateException("RuntimeManager with id " + identifier + " is already active"); } ((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().set(EnvironmentName.DEPLOYMENT_ID, this.getIdentifier()); internalSetDeploymentDescriptor(); internalSetKieContainer(); ((InternalRegisterableItemsFactory)environment.getRegisterableItemsFactory()).setRuntimeManager(this); String eagerInit = (String)((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().get("RuntimeEngineEagerInit"); if (eagerInit != null) { engineInitEager = Boolean.parseBoolean(eagerInit); } ExecutionErrorStorage storage = (ExecutionErrorStorage) ((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().get("ExecutionErrorStorage"); if (storage == null) { storage = new DefaultExecutionErrorStorage(environment.getEnvironment()); } this.executionErrorManager = new ExecutionErrorManagerImpl(storage); ((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().set(EnvironmentName.EXEC_ERROR_MANAGER, executionErrorManager); }
@Test public void testBasicScriptFailure() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); try { ksession1.startProcess("BrokenScriptTask"); fail("Start process should fail due to broken script"); } catch (Throwable e) { // expected } manager.disposeRuntimeEngine(runtime1); ExecutionErrorManager errorManager = ((AbstractRuntimeManager) manager).getExecutionErrorManager(); ExecutionErrorStorage storage = errorManager.getStorage(); List<ExecutionError> errors = storage.list(0, 10); assertNotNull(errors); assertEquals(1, errors.size()); assertExecutionError(errors.get(0), "Process", "BrokenScriptTask", "Hello"); }
protected TransactionManager getTransactionManagerInternal(Environment env) { try { return getTransactionManager(env); } catch (Exception e) { // return no op transaction manager as none were found so let the ksession manage the tx instead return new NoOpTransactionManager(); } }
protected void removeRuntimeFromTaskService() { TaskContentRegistry.get().removeMarshallerContext(getIdentifier()); } /**
@Override public void deactivate() { super.deactivate(); }
@Test public void testInMemorySessionCleanup() { for ( int i = 0; i < 20; i++ ) { Context<?> context = getContext(); RuntimeEngine runtime = manager.getRuntimeEngine(context); KieSession ksession = runtime.getKieSession(); ProcessInstance pi = ksession.startProcess("ScriptTask"); assertEquals(ProcessInstance.STATE_COMPLETED, pi.getState()); manager.disposeRuntimeEngine( runtime ); if ("case".equals(strategy)) { ((PerCaseRuntimeManager) manager).destroyCase((CaseContext) context); } } InMemorySessionFactory factory = (InMemorySessionFactory) ((AbstractRuntimeManager) manager).getFactory(); int expectedSessionsInFactory = getExpectedSessionsInFactory(); assertEquals(expectedSessionsInFactory, factory.getSessions().size()); }
ExecutionErrorManager errorManager = ((AbstractRuntimeManager) manager).getExecutionErrorManager(); ExecutionErrorStorage storage = errorManager.getStorage();
public AbstractRuntimeManager(RuntimeEnvironment environment, String identifier) { this.environment = environment; this.identifier = identifier; if (registry.isRegistered(identifier)) { throw new IllegalStateException("RuntimeManager with id " + identifier + " is already active"); } ((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().set(EnvironmentName.DEPLOYMENT_ID, this.getIdentifier()); internalSetDeploymentDescriptor(); internalSetKieContainer(); ((InternalRegisterableItemsFactory)environment.getRegisterableItemsFactory()).setRuntimeManager(this); String eagerInit = (String)((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().get("RuntimeEngineEagerInit"); if (eagerInit != null) { engineInitEager = Boolean.parseBoolean(eagerInit); } ExecutionErrorStorage storage = (ExecutionErrorStorage) ((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().get("ExecutionErrorStorage"); if (storage == null) { storage = new DefaultExecutionErrorStorage(environment.getEnvironment()); } this.executionErrorManager = new ExecutionErrorManagerImpl(storage); ((SimpleRuntimeEnvironment)environment).getEnvironmentTemplate().set(EnvironmentName.EXEC_ERROR_MANAGER, executionErrorManager); }
protected void registerDisposeCallback(RuntimeEngine runtime, TransactionSynchronization sync, Environment environment) { // register it if there is an active transaction as we assume then to be running in a managed environment e.g CMT TransactionManager tm = getTransactionManager(environment); if (tm.getStatus() != TransactionManager.STATUS_NO_TRANSACTION && tm.getStatus() != TransactionManager.STATUS_ROLLEDBACK && tm.getStatus() != TransactionManager.STATUS_COMMITTED) { TransactionManagerHelper.registerTransactionSyncInContainer(tm, (OrderedTransactionSynchronization) sync); } }
protected void createLockOnGetEngine(Context<?> context, RuntimeEngine runtime) { if (!isUseLocking()) { logger.debug("Locking on runtime manager disabled"); return; } if (context instanceof ProcessInstanceIdContext) { Long piId = ((ProcessInstanceIdContext) context).getContextId(); createLockOnGetEngine(piId, runtime); } }
protected void attachManager(RuntimeEngine runtime) { runtime.getKieSession().getEnvironment().set(EnvironmentName.RUNTIME_MANAGER, this); runtime.getKieSession().getEnvironment().set(EnvironmentName.DEPLOYMENT_ID, this.getIdentifier()); }
@Override public void deactivate() { super.deactivate(); }
ExecutionErrorManager errorManager = ((AbstractRuntimeManager) manager).getExecutionErrorManager(); ExecutionErrorStorage storage = errorManager.getStorage();
@Override public void close() { try { if (!(taskServiceFactory instanceof LocalTaskServiceFactory)) { // if it's CDI based (meaning single application scoped bean) we need to unregister context removeRuntimeFromTaskService(); } } catch(Exception e) { // do nothing } super.close(); factory.close(); }
public RuntimeManager newPerCaseRuntimeManager(RuntimeEnvironment environment, String identifier) { SessionFactory factory = getSessionFactory(environment, identifier); TaskServiceFactory taskServiceFactory = getTaskServiceFactory(environment); RuntimeManager manager = new PerCaseRuntimeManager(environment, factory, taskServiceFactory, identifier); initTimerService(environment, manager); ((AbstractRuntimeManager) manager).init(); return manager; }
protected boolean canDestroy(RuntimeEngine runtime) { if (((RuntimeEngineImpl) runtime).isAfterCompletion()) { return false; } TransactionManager tm = getTransactionManager(runtime.getKieSession().getEnvironment()); if (tm.getStatus() == TransactionManager.STATUS_NO_TRANSACTION || tm.getStatus() == TransactionManager.STATUS_ACTIVE) { return true; } return false; }