In the drools documentation for "Using Rules at Runtime" it states -
A RuleBase may be a managed object which is deployed by an administrator within a JNDI directory. This method of deployment allows an application to be isolated from changes in the rules. The rules can be easily altered and redeployed, enabling an on-the-fly modification of the behaviour of an application (etc).
However, in the semantic java module, there are a number of classes which contains the transient fields:
JavaCondition
JavaBlockConsequence
JavaFunctions
PythonInterp
This means whenever a rulebase is bound to JNDI tree, these java conditions and block consequences need to be reconstructed whenever a rulebase is looked up or materialized from JNDI, triggering a janino compile call.
Under high load, the majority of time is spent in the janino compile method whereas if the JavaCondition / JavaBlockConsequence was declared nontransient, the compilation step can be skipped, improving performance under load.
Must avoid rebuilding the rulebase like this each time, as it just won't scale.
NOTE: 2.5's ".ddj" compiled rules will really help this problem. So once 2.5 comes out may be a case of updating the doco.