You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Konrad Windszus <ko...@gmx.de> on 2021/07/29 14:55:37 UTC

Bundled Scripts: How to overlay

Hi,
With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".

How can the same be achieved with bundled scripts?
I don't want to depend on bundle loading order and have a predictable servlet resolution. 
What is the recommended way to globally overlay a bundled script from another bundle?

Thanks,
Konrad


Re: Bundled Scripts: How to overlay

Posted by Konrad Windszus <ko...@gmx.de>.
Thanks for the input, indeed the Maven Plugin creates capabilities for both absolute and relative paths.

It is probably worth to document some best practices alongside https://github.com/apache/sling-org-apache-sling-servlets-resolver/blob/master/README.md <https://github.com/apache/sling-org-apache-sling-servlets-resolver/blob/master/README.md> namely:

- Register path-based resource types with and without search path prefix
- Always extend from relative path based resource types

The latter could be enforced by the scriptingbundle-maven-plugin.
Konrad


> On 30. Jul 2021, at 11:19, Radu Cotescu <ra...@apache.org> wrote:
> 
> Like always, use relative resource types for whatever you have in the extends and requires files, so that the Servlet Resolver can still do its magic in terms of overlays.
> 
>> On 30 Jul 2021, at 10:23, Konrad Windszus <ko...@gmx.de> wrote:
>> 
>> What am I supposed to write in the extends file to support overlays?
>> How to make sure that the /apps script is preferred over the /libs script?
>> Thanks,
>> Konrad
>> 
>>> On 30. Jul 2021, at 10:07, Radu Cotescu <radu@apache.org <ma...@apache.org>> wrote:
>>> 
>>> Hi Konrad,
>>> 
>>> Take a look at this resource type [0] and the capability it generates:
>>> 
>>> sling.servlet;
>>>  sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>>>  scriptEngine=htl;
>>>  scriptExtension=html,
>>> sling.servlet;
>>>  sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>>>  scriptEngine=htl;
>>>  scriptExtension=html;
>>>  sling.servlet.selectors:List<String>=template
>>> 
>>> And also have a look at [1]. If your scripts are in a folder that starts with a search path, the plugin will generate two resource types - an absolute and a relative one. So I think that SLING-10688 is already handled. Let me know if you see otherwise.
>>> 
>>> Regards,
>>> Radu
>>> 
>>> 
>>> [0] - https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest> <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest>>
>>> [1] - https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths> <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths>>
>>> 
>>> 
>>>> On 29 Jul 2021, at 17:29, Konrad Windszus <ko...@gmx.de> wrote:
>>>> 
>>>> At least the https://github.com/apache/sling-scriptingbundle-maven-plugin <https://github.com/apache/sling-scriptingbundle-maven-plugin> always creates absolute resource types. I created https://issues.apache.org/jira/browse/SLING-10688 <https://issues.apache.org/jira/browse/SLING-10688> for also optionally creating relative resource types...
>>>> Still this would rather be a workaround because I would assume that for bundled scripts it often makes sense to provide the capability with an absolute path while requiring the capability with a relative path (to allow overlays). But that would obviously never match in OSGi....
>>>> 
>>>> Konrad
>>>> 
>>>>> On 29. Jul 2021, at 16:55, Konrad Windszus <ko...@gmx.de> wrote:
>>>>> 
>>>>> Hi,
>>>>> With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
>>>>> It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
>>>>> I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".
>>>>> 
>>>>> How can the same be achieved with bundled scripts?
>>>>> I don't want to depend on bundle loading order and have a predictable servlet resolution. 
>>>>> What is the recommended way to globally overlay a bundled script from another bundle?
>>>>> 
>>>>> Thanks,
>>>>> Konrad
> 


Re: Bundled Scripts: How to overlay

Posted by Radu Cotescu <ra...@apache.org>.
Like always, use relative resource types for whatever you have in the extends and requires files, so that the Servlet Resolver can still do its magic in terms of overlays.

> On 30 Jul 2021, at 10:23, Konrad Windszus <ko...@gmx.de> wrote:
> 
> What am I supposed to write in the extends file to support overlays?
> How to make sure that the /apps script is preferred over the /libs script?
> Thanks,
> Konrad
> 
>> On 30. Jul 2021, at 10:07, Radu Cotescu <radu@apache.org <ma...@apache.org>> wrote:
>> 
>> Hi Konrad,
>> 
>> Take a look at this resource type [0] and the capability it generates:
>> 
>> sling.servlet;
>>   sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>>   scriptEngine=htl;
>>   scriptExtension=html,
>> sling.servlet;
>>   sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>>   scriptEngine=htl;
>>   scriptExtension=html;
>>   sling.servlet.selectors:List<String>=template
>> 
>> And also have a look at [1]. If your scripts are in a folder that starts with a search path, the plugin will generate two resource types - an absolute and a relative one. So I think that SLING-10688 is already handled. Let me know if you see otherwise.
>> 
>> Regards,
>> Radu
>> 
>> 
>> [0] - https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest> <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest>>
>> [1] - https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths> <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths>>
>> 
>> 
>>> On 29 Jul 2021, at 17:29, Konrad Windszus <ko...@gmx.de> wrote:
>>> 
>>> At least the https://github.com/apache/sling-scriptingbundle-maven-plugin <https://github.com/apache/sling-scriptingbundle-maven-plugin> always creates absolute resource types. I created https://issues.apache.org/jira/browse/SLING-10688 <https://issues.apache.org/jira/browse/SLING-10688> for also optionally creating relative resource types...
>>> Still this would rather be a workaround because I would assume that for bundled scripts it often makes sense to provide the capability with an absolute path while requiring the capability with a relative path (to allow overlays). But that would obviously never match in OSGi....
>>> 
>>> Konrad
>>> 
>>>> On 29. Jul 2021, at 16:55, Konrad Windszus <ko...@gmx.de> wrote:
>>>> 
>>>> Hi,
>>>> With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
>>>> It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
>>>> I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".
>>>> 
>>>> How can the same be achieved with bundled scripts?
>>>> I don't want to depend on bundle loading order and have a predictable servlet resolution. 
>>>> What is the recommended way to globally overlay a bundled script from another bundle?
>>>> 
>>>> Thanks,
>>>> Konrad


Re: Bundled Scripts: How to overlay

Posted by Konrad Windszus <ko...@gmx.de>.
What am I supposed to write in the extends file to support overlays?
How to make sure that the /apps script is preferred over the /libs script?
Thanks,
Konrad

> On 30. Jul 2021, at 10:07, Radu Cotescu <ra...@apache.org> wrote:
> 
> Hi Konrad,
> 
> Take a look at this resource type [0] and the capability it generates:
> 
> sling.servlet;
>    sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>    scriptEngine=htl;
>    scriptExtension=html,
> sling.servlet;
>    sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>    scriptEngine=htl;
>    scriptExtension=html;
>    sling.servlet.selectors:List<String>=template
> 
> And also have a look at [1]. If your scripts are in a folder that starts with a search path, the plugin will generate two resource types - an absolute and a relative one. So I think that SLING-10688 is already handled. Let me know if you see otherwise.
> 
> Regards,
> Radu
> 
> 
> [0] - https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest>
> [1] - https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths>
> 
> 
>> On 29 Jul 2021, at 17:29, Konrad Windszus <ko...@gmx.de> wrote:
>> 
>> At least the https://github.com/apache/sling-scriptingbundle-maven-plugin <https://github.com/apache/sling-scriptingbundle-maven-plugin> always creates absolute resource types. I created https://issues.apache.org/jira/browse/SLING-10688 <https://issues.apache.org/jira/browse/SLING-10688> for also optionally creating relative resource types...
>> Still this would rather be a workaround because I would assume that for bundled scripts it often makes sense to provide the capability with an absolute path while requiring the capability with a relative path (to allow overlays). But that would obviously never match in OSGi....
>> 
>> Konrad
>> 
>>> On 29. Jul 2021, at 16:55, Konrad Windszus <ko...@gmx.de> wrote:
>>> 
>>> Hi,
>>> With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
>>> It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
>>> I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".
>>> 
>>> How can the same be achieved with bundled scripts?
>>> I don't want to depend on bundle loading order and have a predictable servlet resolution. 
>>> What is the recommended way to globally overlay a bundled script from another bundle?
>>> 
>>> Thanks,
>>> Konrad
>>> 
>> 
> 


Re: Bundled Scripts: How to overlay

Posted by Konrad Windszus <ko...@gmx.de>.
Hi Radu,
thanks for the information. AFAIU this only affects the require-capability header. That means that the provide-capability header is always generated at compile time and can never be influenced by servletresolver.path configuration setting of the SlingServletResolver service. Probably worth documenting this in the context of (bundled) scripts as servlets do support that...

Konrad

> On 30. Jul 2021, at 10:07, Radu Cotescu <ra...@apache.org> wrote:
> 
> Hi Konrad,
> 
> Take a look at this resource type [0] and the capability it generates:
> 
> sling.servlet;
>    sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>    scriptEngine=htl;
>    scriptExtension=html,
> sling.servlet;
>    sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
>    scriptEngine=htl;
>    scriptExtension=html;
>    sling.servlet.selectors:List<String>=template
> 
> And also have a look at [1]. If your scripts are in a folder that starts with a search path, the plugin will generate two resource types - an absolute and a relative one. So I think that SLING-10688 is already handled. Let me know if you see otherwise.
> 
> Regards,
> Radu
> 
> 
> [0] - https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest>
> [1] - https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths>
> 
> 
>> On 29 Jul 2021, at 17:29, Konrad Windszus <ko...@gmx.de> wrote:
>> 
>> At least the https://github.com/apache/sling-scriptingbundle-maven-plugin <https://github.com/apache/sling-scriptingbundle-maven-plugin> always creates absolute resource types. I created https://issues.apache.org/jira/browse/SLING-10688 <https://issues.apache.org/jira/browse/SLING-10688> for also optionally creating relative resource types...
>> Still this would rather be a workaround because I would assume that for bundled scripts it often makes sense to provide the capability with an absolute path while requiring the capability with a relative path (to allow overlays). But that would obviously never match in OSGi....
>> 
>> Konrad
>> 
>>> On 29. Jul 2021, at 16:55, Konrad Windszus <ko...@gmx.de> wrote:
>>> 
>>> Hi,
>>> With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
>>> It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
>>> I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".
>>> 
>>> How can the same be achieved with bundled scripts?
>>> I don't want to depend on bundle loading order and have a predictable servlet resolution. 
>>> What is the recommended way to globally overlay a bundled script from another bundle?
>>> 
>>> Thanks,
>>> Konrad
>>> 
>> 
> 


Re: Bundled Scripts: How to overlay

Posted by Radu Cotescu <ra...@apache.org>.
Hi Konrad,

Take a look at this resource type [0] and the capability it generates:

sling.servlet;
    sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
    scriptEngine=htl;
    scriptExtension=html,
sling.servlet;
    sling.servlet.resourceTypes:List<String>="/apps/sling/scripting/examplebundle/precompiled/ttest,sling/scripting/examplebundle/precompiled/ttest";
    scriptEngine=htl;
    scriptExtension=html;
    sling.servlet.selectors:List<String>=template

And also have a look at [1]. If your scripts are in a folder that starts with a search path, the plugin will generate two resource types - an absolute and a relative one. So I think that SLING-10688 is already handled. Let me know if you see otherwise.

Regards,
Radu


[0] - https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest <https://github.com/apache/sling-org-apache-sling-scripting-bundle-tracker-it/tree/master/examples/org-apache-sling-scripting-examplebundle-precompiled/src/main/scripts/apps/sling/scripting/examplebundle/precompiled/ttest>
[1] - https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths <https://sling.apache.org/components/scriptingbundle-maven-plugin/metadata-mojo.html#searchPaths>


> On 29 Jul 2021, at 17:29, Konrad Windszus <ko...@gmx.de> wrote:
> 
> At least the https://github.com/apache/sling-scriptingbundle-maven-plugin <https://github.com/apache/sling-scriptingbundle-maven-plugin> always creates absolute resource types. I created https://issues.apache.org/jira/browse/SLING-10688 <https://issues.apache.org/jira/browse/SLING-10688> for also optionally creating relative resource types...
> Still this would rather be a workaround because I would assume that for bundled scripts it often makes sense to provide the capability with an absolute path while requiring the capability with a relative path (to allow overlays). But that would obviously never match in OSGi....
> 
> Konrad
> 
>> On 29. Jul 2021, at 16:55, Konrad Windszus <ko...@gmx.de> wrote:
>> 
>> Hi,
>> With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
>> It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
>> I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".
>> 
>> How can the same be achieved with bundled scripts?
>> I don't want to depend on bundle loading order and have a predictable servlet resolution. 
>> What is the recommended way to globally overlay a bundled script from another bundle?
>> 
>> Thanks,
>> Konrad
>> 
> 


Re: Bundled Scripts: How to overlay

Posted by Konrad Windszus <ko...@gmx.de>.
At least the https://github.com/apache/sling-scriptingbundle-maven-plugin <https://github.com/apache/sling-scriptingbundle-maven-plugin> always creates absolute resource types. I created https://issues.apache.org/jira/browse/SLING-10688 <https://issues.apache.org/jira/browse/SLING-10688> for also optionally creating relative resource types...
Still this would rather be a workaround because I would assume that for bundled scripts it often makes sense to provide the capability with an absolute path while requiring the capability with a relative path (to allow overlays). But that would obviously never match in OSGi....

Konrad

> On 29. Jul 2021, at 16:55, Konrad Windszus <ko...@gmx.de> wrote:
> 
> Hi,
> With bundled scripts the extends attribute of the sling.servlet capability defines the resource type one extends (https://github.com/apache/sling-org-apache-sling-servlets-resolver#how <https://github.com/apache/sling-org-apache-sling-servlets-resolver#how>).
> It is not specified though if the resource type should be absolute (i.e. start with a "/") or can be relative (and is looked up by prefixing it with any of the resource resolver search paths) but I guess it is the former.
> I know that resource resolver search paths are not directly related to servlet resolving from bundles but they are extremely handy as they allow to overlay scripts from "/libs" in "/apps".
> 
> How can the same be achieved with bundled scripts?
> I don't want to depend on bundle loading order and have a predictable servlet resolution. 
> What is the recommended way to globally overlay a bundled script from another bundle?
> 
> Thanks,
> Konrad
>