This issue proposes an idea for discovering implementations of tooling for the Segment Store. Developing a tool for the Segment Store should include the following step.
- The tool compiles against the NodeStore API and the API exposed through the oak-segment-tar-tool-api. In particular, the tool uses the ToolingSupportFactory and related interfaces to instantiate a NodeStore and, optionally, a NodeState for the proc tree.
- The tool runs with an implementation-dependent uber-jar in the classpath. The uber-jar includes the ToolingSupportFactory API, its implementation, and every other class required for the implementation to work. No other JARs is required to use the ToolingSupportFactory API. The tool uses the Java's ServiceLoader to instantiate an implementation of ToolingSupportFactory. The uber-jar is the oak-segment-tar-tool module.
The patch falls short of fully implementing the use case because oak-segment-tar-tool-api is not versioned independently from Oak. This can't happen at the moment because oak-store-spi and its dependencies are not independently versioned either. The workflow described above could still work, but only because the NodeStore and NodeState API are quite stable. A cleaner solution to dependency management is required in the long run.