[
https://issues.apache.org/jira/browse/OAK-2919?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15346142#comment-15346142
]
Robert Munteanu commented on OAK-2919:
--------------------------------------
Hm, looking back the generics serve no real purpose, since we can't use them to
avoid casting to a specific type. Further refinements of the idea:
{code:java}public abstract class DocumentNodeStoreBuilder {
public static MongoDocumentNodeStoreBuilder
getMongoDocumentStoreNodeBuilder() { ... };
public static RDBDocumentNodeStoreBuilder getRDBDocumentStoreNodeBuilder() {
... };
public static DocumentNodeStoreBuilder
getDocumentNodeStoreBuilder(Class<DocumentNodeStoreBuilder> klazz) { ... };
// contains common methods and hooks
public DocumentNodeStore getNodeStore() { ... };
}{code}
This will help with opening up the API, but just from a method signature point
of view. We still need to have some kind of registry of Class →
DocumentNodeStoreBuilder, and we can't use it to downcast to the proper
DocumentNodeStoreBuilder type.
If we decide to go that way, due to the way OSGi works the registry is better
suited to instances rather than classes, so we're going to need a separate
BuilderFactory or BuilderRegistry class which centralises and creates these
kinds of builders. The Factory/Registry is probably going to make use of OSGi
via the Whiteboard so we will be able to use the extension points for the
'internal' builders as well - Mongo, RDB, Memory.
I can look into this in addition to breaking up DocumentMK.Builder, if you
think that's something worth pursuing.
What might
> Refactor DocumentNodeStoreService and dependencies
> --------------------------------------------------
>
> Key: OAK-2919
> URL: https://issues.apache.org/jira/browse/OAK-2919
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: blob, mongomk
> Reporter: Philipp Suter
> Labels: technical_debt
>
> Change how DocumentNodeStoreService, DocumentNodeStore, DocumentStore,
> BlobStore, DocumentMK.Builder are wired. It is unclear why
> registerNodeStoreIfPossible and registerNodeStore need additional logic to
> load the right BlobStore and DocumentStore.
> - Ideally (Document)NodeStore references one DocumentStore and one BlobStore.
> Configuration for them are loaded over respective OSGi configurations.
> - Cache should be handled in (Document)NodeStore and be independent from
> DocumentStore, BlobStore.
> - DocumentMK.Builder and DocumentNodeStoreService should be obsolete.
> - DocumentNodeStore is too long and could ideally be split in smaller files.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)