Runtime that delegates to registered {@link com.graphaware.runtime.module.RuntimeModule}s to perform useful work. There must be exactly one instance of this runtime for a single {@link org.neo4j.graphdb.GraphDatabaseService}.
After all desired modules have been registered, {@link #start()} can be called in order to initialize the runtime andall its modules before the database is exposed to callers. No more modules can be registered thereafter.
If not called explicitly, the {@link #start()} method shall be called automatically by the runtime upon firsttransaction received from callers. In such case, all other transaction will be blocked until the runtime and all its modules have been initialized.
Every new {@link com.graphaware.runtime.module.RuntimeModule} whose configuration has changed since the last run willbe forced to (re-)initialize, which can lead to very long startup times, as (re-)initialization could be a global graph operation. Re-initialization will also be automatically performed for all modules, for which it has been detected that something is out-of-sync (module threw a {@link com.graphaware.runtime.module.NeedsInitializationException}).
The runtime might use special nodes for internal data storage and prevent the deletion of those nodes.