Context listener will ensure that it is called before webapps will be deployed. So the process engines will be properly initialized before they can be used.
In the javadocs of ProcessEngines needs to be documented that the context listener must be configured. There will not be lazy initialization of the process engines (as that would enforce a synchronized block).
In the API intro section of the docs point out that the are 2 strategies to get hold of a ProcessEngine:
1) the basic way is to build the process engine
2) ProcessEngines provides an extra convenience layer for usage in webapp/server environment