Package org.kie.api.runtime

## Interface StatelessKieSession

- All Superinterfaces:
    `CommandExecutor`, `KieRuntimeEventManager`, `ProcessEventManager`, `RuleRuntimeEventManager`, `StatelessProcessSession`, `StatelessRuleSession`

      public interface StatelessKieSession
      extends StatelessRuleSession, StatelessProcessSession, CommandExecutor, KieRuntimeEventManager

  StatelessKieSession provides a convenience API, wrapping KieSession. It avoids the need to call dispose(). Stateless sessions do not support iterative invocations, the act of calling execute(...) is a single shot method that will internally instantiate a KieSession, add all the user data and execute user commands, call fireAllRules, and then call dispose(). While the main way to work with this class is via the BatchExecution Command as supported by the CommandExecutor interface, two convenience methods are provided for when simple object insertion is all that's required.

  Simple example showing a stateless session executing for a given collection of java objects using the convenience api. It will iterate the collection inserting each element in turn

       KieServices kieServices = KieServices.Factory.get();
       KieContainer kContainer = kieServices.getKieClasspathContainer();
       StatelessKieSession kSession = kContainer.newStatelessKieSession();
       kSession.execute( collection );

  If this was done as a single Command it would be as follows:

       KieCommands kieCommands = kieServices.getCommands();
       kSession.execute( kieCommands.newInsertElements( collection ) );

  Note if you wanted to insert the collection itself, and not the iterate and insert the elements, then kieCommands.newInsert( collection ) would do the job.

  The KieCommands interface details the supported commands, all of which can be marshalled using XStream and the BatchExecutionHelper. BatchExecutionHelper provides details on the XML format as well as how to use Drools Pipeline to automate the marshalling of BatchExecution and ExecutionResults.

  StatelessKieSession support globals, scoped in a number of ways. I'll cover the non-command way first, as commands are scoped to a specific execution call. Globals can be resolved in three ways. The StatelessKieSession supports getGlobals(), which returns a Globals instance. These globals are shared for ALL execution calls, so be especially careful of mutable globals in these cases - as often execution calls can be executing simultaneously in different threads. Globals also supports a delegate, which adds a second way of resolving globals. Calling of setGlobal(String, Object) will actually be set on an internal Collection, identifiers in this internal Collection will have priority over supplied delegate, if one is added. If an identifier cannot be found in the internal Collection, it will then check the delegate Globals, if one has been set.

  Code snippet for setting a session scoped global:

       StatelessKieSession kSession = kContainer.newStatelessKieSession();
       kSession.setGlobal( "hbnSession", hibernateSession ); // sets a global hibernate session, that can be used for DB interactions in the rules.
       kSession.execute( collection ); // this will now execute and will be able to resolve the "hbnSession" identifier.

  The third way is execution scopped globals using the CommandExecutor and SetGlobal Commands:

       List<Command> cmds = new ArrayList<Command>();
       cmds.add( kieCommands.newSetGlobal( "list1", new ArrayList() ) );
       cmds.add( kieCommands.newInsert( new Person( "jon", 102 ) ) );

       kSession.execute( kieCommands.newBatchExecution( cmds ) );

  The CommandExecutor interface also supports the ability to export data via "out" parameters. Inserted facts, globals and query results can all be returned.

       List<Command> cmds = new ArrayList<Command>();
       cmds.add( kieCommands.newSetGlobal( "list1", new ArrayList(), true ) );
       cmds.add( kieCommands.newInsert( new Person( "jon", 102 ), "person" ) );
       cmds.add( kieCommands.newQuery( "Get People" "getPeople" );

       ExecutionResults results = ksession.execute( kieCommands.newBatchExecution( cmds ) );
       results.getValue( "list1" ); // returns the ArrayList
       results.getValue( "person" ); // returns the inserted fact Person
       results.getValue( "Get People" );// returns the query as a QueryResults instance.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.util.Map<java.lang.String,​Channel>` | `getChannels()` |
    `Globals` | `getGlobals()` |
    `KieBase` | `getKieBase()` |
    `void` | `registerChannel​(java.lang.String name, Channel channel)` | Registers a channel with the given name
    `void` | `setGlobal​(java.lang.String identifier, java.lang.Object value)` | Sets a global value on the globals store
    `void` | `unregisterChannel​(java.lang.String name)` | Unregisters the channel with the given name

    - ### Methods inherited from interface org.kie.api.runtime.CommandExecutor

      `execute`

    - ### Methods inherited from interface org.kie.api.event.KieRuntimeEventManager

      `getLogger`

    - ### Methods inherited from interface org.kie.api.event.process.ProcessEventManager

      `addEventListener, getProcessEventListeners, removeEventListener`

    - ### Methods inherited from interface org.kie.api.event.rule.RuleRuntimeEventManager

      `addEventListener, addEventListener, getAgendaEventListeners, getRuleRuntimeEventListeners, removeEventListener, removeEventListener`

    - ### Methods inherited from interface org.kie.api.runtime.rule.StatelessRuleSession

      `execute, execute`

- - ### Method Detail

    - #### getGlobals

          Globals getGlobals()

      Returns:
        the Globals store

    - #### setGlobal

          void setGlobal​(java.lang.String identifier,
                         java.lang.Object value)

      Sets a global value on the globals store
      Parameters:
        `identifier` - the global identifier
        `value` - the value assigned to the global identifier

    - #### registerChannel

          void registerChannel​(java.lang.String name,
                               Channel channel)

      Registers a channel with the given name
      Parameters:
        `name` - the name of the channel
        `channel` - the channel instance. It has to be thread safe.

    - #### unregisterChannel

          void unregisterChannel​(java.lang.String name)

      Unregisters the channel with the given name
      Parameters:
        `name` -

    - #### getChannels

          java.util.Map<java.lang.String,​Channel> getChannels()

      Returns:
        a map with all registered channels.

    - #### getKieBase

          KieBase getKieBase()

      Returns:
        the KieBase reference from which this stateless session was created.