If you have found an area where it is not thread safe, then please let us know so we can fix it. The example you have is redundant (possibly out of date), those areas are covered:

fireAllRules and fireUntilHalt both have an atomic boolean, to ensure they can never be called more than once at the same time.
if ( this.firing.compareAndSet( false, true ) ) {
           .....
}

Each method that undertakes a working memory operation; such as insert, update, retract creates a read lock on the KnowledgeBase and also a read/write lock on the session.
FactHandle insert(final Object object,
                                final boolean dynamic,
                                boolean logical,
                                final Rule rule,
                                final Activation activation) throws FactException {
            ....
            ....
            try {
                this.ruleBase.readLock();
                this.lock.lock();
                .....
            } finally {
                this.lock.unlock();
                this.ruleBase.readUnlock();
}


On 04/03/2012 04:36, Richard Calmbach wrote:
2012/3/2 Matteo Cusmai <cusmaimatteo@gmail.com>
i see that there are some other threads that insert new event and some others retract them.
How is the thread model?

Contrary to claims made on this mailing list, StatefulKnowledgeSession is not thread-safe (this may be due to bugs, but bottomline is: it's not thread-safe). In order to avoid errors due to multi-threading, don't use fireUntilHalt(), instead synchronize on the session and only call insert() and fireAllRules() while synchronized on the session:

    synchronized (session) {
        entryPoint.insert(event);
        session.fireAllRules();
    }

-Richard


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users