sling-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Hummel ...@mikehummel.de>
Subject Re: [DISCUSS] Generic ServiceMap for ServiceResolver
Date Fri, 04 Oct 2013 08:30:42 GMT
Yes, I already thought about the same implemented with the adapter. But the
Adapter should return an object representing the resources information. The
ServiceMap should be used to provide services for the resource.

If you can show me a way to do the same using adaptTo() then this
discussion would be obsolete. Lets use the ResourceAccessSecurity example I
see this options:

1. as discussed ResourceAccessSecurity ras =
resource.getResourceResolver().getServices().getService(ResourceAccessSecurity.class);

2. direct via adaptTo() ResourceAccessSecurity ras =
(ResourceAccessSecurity)resource.adaptTo(ResourceAccessSecurity.class)

3. via ServiceMap and adaptTo() ResourceAccessSecurity ras =
((ServiceMap)resource.adaptTo(ServiceMap.class)).getService(ResourceAccessSecurity.class)

To have a clear coding I would prefer option 1. Number 2 is short but I'm
not sure how much overhead it is to implement an adapter for every service.





2013/10/2 Carsten Ziegeler <cziegeler@apache.org>

> Ok, so you're basically suggesting an extension mechanism comparable to the
> adapter pattern?
>
> Carsten
>
>
> 2013/10/2 Mike Hummel <mh@mikehummel.de>
>
> > In my understanding the service registry is not able to differ between
> the
> > resource implementations like mongo or jcr. If the operation is provided
> > from the resource provider it is specialised for the underlying
> > implementation.
> >
> > This is what you need for ResourceSecurityAccess or manipulating rights
> on
> > the resource - without knowledge of the underlying data store.
> >
> >
> > 2013/10/1 Carsten Ziegeler <cziegeler@apache.org>
> >
> > > Hi,
> > >
> > > I'm not sure I completely understand your proposal. What's the
> difference
> > > to looking up the MoveOperation (or other services) directly from the
> > > service registry?
> > >
> > > Carsten
> > >
> > >
> > > 2013/9/30 Mike Hummel <mh@mikehummel.de>
> > >
> > > > Hi,
> > > >
> > > > with ResourceAccessSecurity there's the first service depending on
> the
> > > > ServiceResolver and loaded by the ServiceTracker. For further
> services
> > we
> > > > should use a generic way to handle this.
> > > >
> > > > Another goal is that we can implement operations in this way for
> > > different
> > > > ServiceResolver in a generic way. For example default operations like
> > > > 'move' 'copy' 'checkout' 'checkin' can then be implemented for
> > different
> > > > Resources (jcr, mongodb).
> > > >
> > > > On next step it can be used by the post servlet to access it via
> REST.
> > > >
> > > > I implemented a try like this
> > > >
> > > > public interface ServiceMap {
> > > >
> > > >
> > > >  /**
> > > >
> > > >  * Return the instance of the Service for the requested interface
> > > >
> > > >  *
> > > >
> > > >  * @param requestedInterface The Service or null if not found
> > > >
> > > >  * @return
> > > >
> > > >  */
> > > >
> > > > <T> T getService(Class<T> requestedInterface);
> > > >
> > > >  }
> > > >
> > > > public interface ResourceResolver {
> > > >
> > > > …
> > > >
> > > >     /**
> > > >
> > > >      * Return the service map for this resolver.
> > > >
> > > >      *
> > > >
> > > >      * @return
> > > >
> > > >      */
> > > >
> > > >     ServiceMap getServiceMap();
> > > >
> > > > }
> > > >
> > > > To use a service use
> > > >
> > > > ResourceAccessSecurity  service =
> > > >
> > > >
> > >
> >
> resource.getResourceResolver().getServiceMap().getService(ResourceAccessSecurity.class);
> > > >
> > > > or maybe
> > > >
> > > > MoveOperation  service =
> > > >
> > > >
> > >
> >
> resource.getResourceResolver().getServiceMap().getService(MoveOperation.class);
> > > > service.move(resource,targetPath);
> > > >
> > > > Ok, what's the goal?
> > > >
> > > > 1. We do not need to change resource providers if we initiate a new
> > > service
> > > > for resources
> > > > 2. A generic way to access operations if the service implement an
> > > > Operation-Interface via REST / Post-Servlet
> > > >
> > > > What do you think?
> > > >
> > > > Mike
> > > >
> > >
> > >
> > >
> > > --
> > > Carsten Ziegeler
> > > cziegeler@apache.org
> > >
> >
>
>
>
> --
> Carsten Ziegeler
> cziegeler@apache.org
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message