What’s in a pool ?
OpenWFE process instances are available to the engine through a pool concept which is backed up by a store.
Out of the box, OpenWFE uses a cached expression pool which keeps in memory a certain number of expressions (pieces of process instances) and takes care of swapping out old (least recently used) expressions to the store.
The default store is an XmlExpressionStore which serializes the expressions as XML documents in filesystem set of directories (under work/engine/pool).
Upon migrating an engine from 1.5.x to 1.6.x for a customer, we realized we needed a tool to visualize the content of the pool (well the store) and the links between the expressions. Expressions are organized in trees (lists of lists). The 1.5.x and 1.6.x contained certain optimizations making this scheme a bit fragile, 1.7.x won’t contain those ‘optimizations’ (what’s the benefit is code is harder to maintain ?).
Flaws in the migration process had left inconsistent links between some expressions of certain process instances, those problems are hard to track, there has to be a way to tackle them… The first step is to ‘see’ what the problem really is.
Having XML serialized expressions makes it easy to intervene and fix the problem in the pool (as the engine is stopped though), it’s a bit of XML pool surgery.
So, getting back by train, I wrote this visualization tool and named it ‘pool-grapher’, it could have been named ‘store-dumper’, but I want to make it clear that it’s about the expression pool and that it somehow shows the graph / tree formed by the expression (well, maybe I could have called it ‘pool-timber’ as it’s about trees).