public interface KieSession extends StatefulRuleSession, StatefulProcessSession, CommandExecutor, KieRuntime
dispose()
method in order to free the resources and used memory.
Simple example showing a KieSession executing rules for a given collection of java objects.
KieServices kieServices = KieServices.Factory.get(); KieContainer kContainer = kieServices.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession(); for( Object fact : facts ) { kSession.insert( fact ); } kSession.fireAllRules(); kSession.dispose();
Simple example showing a stateful session executing processes.
KieSession kSession = kbase.newKieSession(); kSession.startProcess("com.sample.processid"); kSession.signalEvent("SomeEvent", null); kSession.startProcess("com.sample.processid"); kSession.dispose();
KieSession support globals. Globals are used to pass information into the engine (like data or service callbacks that can be used in your rules and processes), but they should not be used to reason over. If you need to reason over your data, make sure you insert it as a fact, not a global.
Globals are shared among ALL your rules and processes, so be especially careful of (and avoid
as much as possible) mutable globals. Also, it is a good practice to set your globals before
inserting your facts or starting your processes. Rules engines evaluate rules at fact insertion
time, and so, if you are using a global to constraint a fact pattern, and the global is not set,
you may receive a NullPointerException
.
Globals can be resolved in two ways. The KieSession supports getGlobals() which returns the internal Globals, which itself can take a delegate. Calling of setGlobal(String, Object) will set the global on an internal Collection. Identifiers in this internal Collection will have priority over the externally supplied Globals delegate. If an identifier cannot be found in the internal Collection, it will then check the externally supplied Globals delegate, if one has been set.
Code snippet for setting a global:
KieSession ksession = kbase.newKieSession(); ksession.setGlobal( "hbnSession", hibernateSession ); // sets a global hibernate session, that can be used for DB interactions in the rules. for( Object fact : facts ) { ksession.insert( fact ); } ksession.fireAllRules(); // this will now execute and will be able to resolve the "hbnSession" identifier. ksession.dispose();
Like StatelessKieSession this also implements CommandExecutor which can be used to script a KieSession. See CommandExecutor for more details.
Globals
Modifier and Type | Interface and Description |
---|---|
static interface |
KieSession.AtomicAction
An action that will be executed atomically on this session.
|
Modifier and Type | Method and Description |
---|---|
void |
destroy()
Destroys session permanently.
|
void |
dispose()
Releases all the current session resources, setting up the session for garbage collection.
|
int |
getId()
Deprecated.
|
long |
getIdentifier() |
<T> T |
getKieRuntime(Class<T> cls)
Returns a runtime for the given interface.
|
void |
submit(KieSession.AtomicAction action)
Submit an action that will be executed atomically on this session.
|
fireAllRules, fireAllRules, fireAllRules, fireAllRules, fireUntilHalt, fireUntilHalt
execute
getCalendars, getChannels, getEnvironment, getGlobal, getGlobals, getKieBase, getSessionClock, getSessionConfiguration, registerChannel, setGlobal, unregisterChannel
getAgenda, getEntryPoint, getEntryPoints, getQueryResults, halt, openLiveQuery
delete, delete, getEntryPointId, getFactCount, getFactHandle, getFactHandles, getFactHandles, getObject, getObjects, getObjects, insert, retract, update, update
abortProcessInstance, createProcessInstance, getProcessInstance, getProcessInstance, getProcessInstances, getWorkItemManager, signalEvent, signalEvent, startProcess, startProcess, startProcessFromNodeIds, startProcessInstance
getLogger
addEventListener, addEventListener, getAgendaEventListeners, getRuleRuntimeEventListeners, removeEventListener, removeEventListener
addEventListener, getProcessEventListeners, removeEventListener
@Deprecated int getId()
getIdentifier()
insteadlong getIdentifier()
void dispose()
void destroy()
void submit(KieSession.AtomicAction action)
<T> T getKieRuntime(Class<T> cls)
DMNRuntime dmnRuntime = session.getKieRuntime( DMNRuntime.class );
cls
- the runtime interface for the extensionCopyright © 2001–2020 JBoss by Red Hat. All rights reserved.