[ 
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)

Reply via email to