Application code can run all kinds of bad queries (reading a lot of data, slow, high memory usage).
The best solution is to fix the application of course. But that can take a while, and until this is done, it would be good if bad queries can be blocked in another way. Problematic queries would either just log a warning, or be blocked (throw an exception when trying to run).
Blocking should be possible via JMX, but also via persistent configuration (in the repository), so that a restart remembers which queries are blocked.
I don't think it's needed to stop already running queries, as the traversal limit should solve this (it can be re-configured at runtime if needed). Also, reading the patterns from the repository is only needed at startup (while running, JMX can be used to temporarily add patterns).