It looks like ResourceDecorators are ordered by service.ranking property
in ascending order.
@Properties({
@Property(name = Constants.SERVICE_RANKING, intValue = 10)
})
public class Apple implements ResourceDecorator {
...
}
@Properties({
@Property(name = Constants.SERVICE_RANKING, intValue = 20)
})
public class Orange implements ResourceDecorator {
...
}
Given above, Apple is executed first, then Orange, according to:
http://svn.apache.org/repos/asf/sling/trunk/bundles/commons/osgi/src/main/java/org/apache/sling/commons/osgi/ServiceUtil.java
This is sort of unintuitive to me because there is this:
http://www.osgi.org/javadoc/r2/org/osgi/framework/Constants.html#SERVICE_RANKING
The default ranking is 0. A service with a ranking of Integer.MAX_VALUE is
very likely to be returned as the default service, whereas a service with a
ranking of Integer.MIN_VALUE is very unlikely to be returned.
Maybe ResourceDecorators should be sorted descending order so that
decorators with higher service.ranking will be executed first?
On Thu, Jun 28, 2012 at 5:19 PM, sam ” <[email protected]> wrote:
> Created the ticket: https://issues.apache.org/jira/browse/SLING-2526
>
> Are all registered and Active ResourceDecorators called?
> What if I have more than one ResourceDecorator that sets resourceType of
> a certain resource(s)? Which decorator wins?
>
>
>
>
> On Wed, Jun 27, 2012 at 4:19 PM, Justin Edelson
> <[email protected]>wrote:
>
>> Hi Sam,
>>
>> On Jun 27, 2012 3:56 PM, "sam ”" <[email protected]> wrote:
>> >
>> > Thanks Justin.
>> > Works well!
>>
>> Glad to hear.
>>
>> >
>> > =8<=
>> > @Override
>> > public Resource decorate(Resource resource, HttpServletRequest
>> request)
>> > {
>> > final String resourceType = resource.getResourceType();
>> > if ("old/handler".equals(resourceType)) {
>> > return new ResourceWrapper(resource) {
>> > @Override
>> > public String getResourceType() {
>> > return "new/handler";
>> > }
>> > };
>> > }
>> > return resource;
>> > }
>> >
>> > =>8=
>> >
>> >
>> > Is there a way to register my ResourceDecorator service for certain
>> > resource types only instead of that if conditional above?
>>
>> Not AFAIK, but this seems like it would be a useful feature. Can you
>> create
>> a JIRA issue?
>>
>> Justin
>> >
>> >
>> >
>> >
>> >
>> >
>> > On Wed, Jun 27, 2012 at 3:06 PM, Justin Edelson <
>> [email protected]
>> >wrote:
>> >
>> > > Hi Sam,
>> > > ResoureDecorators must be registered add OSGi services.
>> > >
>> > > Justin
>> > > On Jun 27, 2012 3:00 PM, "sam ”" <[email protected]> wrote:
>> > >
>> > > > Ah thanks.
>> > > >
>> > > > Is there a way to provide ResourceDecorator implementation in script
>> > > (jsp)?
>> > > > Or, do I have to provide OSGi bundle/component?
>> > > >
>> > > >
>> > > > On Wed, Jun 27, 2012 at 2:34 PM, Justin Edelson <
>> [email protected]
>> > > > >wrote:
>> > > >
>> > > > > Hi Sam,
>> > > > > You should be able to do this with a ResourceDecorator service to
>> > > change
>> > > > > the resource type at runtime.
>> > > > >
>> > > > > Regards,
>> > > > > Justin
>> > > > > On Jun 27, 2012 2:25 PM, "sam ”" <[email protected]> wrote:
>> > > > >
>> > > > > > Hey,
>> > > > > >
>> > > > > > I have a large number of resources with sling:resourceType =
>> > > > old/handler
>> > > > > >
>> > > > > > I don't want to modify their sling:resourceType property. But,
>> I
>> > > want
>> > > > to
>> > > > > > have old/handler actually resolve to /apps/new/handler
>> > > > > >
>> > > > > > For example, given a resource:
>> > > > > > /content/mypage
>> > > > > > whose sling:resourceType = old/hander,
>> > > > > >
>> > > > > > GET /content/mypage.html
>> > > > > > is handled by:
>> > > > > > /apps/old/handler/html.jsp
>> > > > > >
>> > > > > >
>> > > > > > Without modifying /content/mypage, can I have the same GET
>> request
>> > > be
>> > > > > > handled by:
>> > > > > > /apps/new/handler/html.jsp ?
>> > > > > >
>> > > > > > I tried /etc/maps/oldToNew
>> > > > > > sling:internalRedirect = /apps/new/handler$1
>> > > > > > sling:match = .*/apps/old/handler(.*)
>> > > > > >
>> > > > > > GET /apps/old/handler
>> > > > > > does redirect to /apps/new/handler.
>> > > > > > But, script resolution doesn't seem to use /etc/maps.
>> > > > > >
>> > > > >
>> > > >
>> > >
>>
>
>