We need an async assert. This means the fact is is asserted and immediately returns. Internally there is a consumer/provider based queue that one by one asserts the stacked items into the working memory. Need ot make sure that users can handle async exceptions.
There might also be some settings to do with 2 phase commit, in that when do we call fireAllRules? Do we call it after every assertion, after a set time period, after X facts are asserted - or maybe a combination of both? Initially probably esiest to just call fireAllRules on each assertion from the Queue.
I recommend that thechannel code stuff be "borrowed" from http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/LinkedQueue.html - only take hte classes you need and refactor them for org.drools.util.concurrent.