[
https://issues.apache.org/jira/browse/OAK-2828?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14680007#comment-14680007
]
Robert Munteanu commented on OAK-2828:
--------------------------------------
{quote}you mention needing to set/reset potential components but you use Lists
and not Sets, so this makes it possible to add the same EditorProvider instance
multiple times by accident.{quote}
Good catch, I will convert to sets ( LinkedHashSet, in case ordering is
important ).
{quote}this means that you either start with the defaults or have to wire every
existing implementation of specific editors yourself, which is very brittle (I
could not name them all if you ask me).
I'm working with the assumption that you're not looking to remove any OOTB
editors, as they are all very important, so what is missing from your POV
here?{quote}
If I recall correctly my problem started when I noticed that I can't replace
the {{SecurityProvider}}, adding a new SecurityProvider instance messed up
things big time. Rather than doing a patch just for that, I decided to 'convert
all the things'.
Given that my knowledge of how to configure a Oak/Jcr instance is not that
great, perhaps you can suggest which pieces I should leave lone? My gut feeling
says indexEditorProviders, editorProviders, commitHooks and queryIndexProviders
but I really am not sure.
{quote}about the reseting part: there's no option of removing anything, so
you're only basically adding new components{quote}
This might not be needed, as you mentioned, so let's leave it for later.
> Jcr builder class does not allow overriding most of its dependencies
> --------------------------------------------------------------------
>
> Key: OAK-2828
> URL: https://issues.apache.org/jira/browse/OAK-2828
> Project: Jackrabbit Oak
> Issue Type: Sub-task
> Components: jcr
> Affects Versions: 1.2.2
> Reporter: Robert Munteanu
> Assignee: Francesco Mari
> Labels: modularization, technical_debt
> Fix For: 1.3.5
>
> Attachments:
> 0001-OAK-2828-Jcr-builder-class-does-not-allow-overriding.patch
>
>
> The {{Jcr}} class is the entry point for configuring a JCR repository using
> an Oak backend. However, it always use a hardcoded set of dependencies (
> IndexEditorProvider, SecurityProvider, etc ) which cannot be reset, as they
> are defined in the constructor and the builder {{with}} methods eagerly
> configure the backing {{Oak}} instance with those dependencies.
> As an example
> {code:java|title=Jcr.java}
> @Nonnull
> public final Jcr with(@Nonnull SecurityProvider securityProvider) {
> oak.with(checkNotNull(securityProvider));
> this.securityProvider = securityProvider;
> return this;
> }
> {code}
> injects the security provider which in turn starts configuring the Oak
> repository provider
> {code:java|title=Oak.java}
> @Nonnull
> public Oak with(@Nonnull SecurityProvider securityProvider) {
> this.securityProvider = checkNotNull(securityProvider);
> if (securityProvider instanceof WhiteboardAware) {
> ((WhiteboardAware) securityProvider).setWhiteboard(whiteboard);
> }
> for (SecurityConfiguration sc : securityProvider.getConfigurations())
> {
> RepositoryInitializer ri = sc.getRepositoryInitializer();
> if (ri != RepositoryInitializer.DEFAULT) {
> initializers.add(ri);
> }
> }
> return this;
> }
> {code}
> Instead, the {{Jcr}} class should store the configured dependencies and only
> configure the {{Oak}} instance when {{createRepository}} is invoked.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)