[ 
https://issues.apache.org/jira/browse/SLING-3886?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stefan Seifert updated SLING-3886:
----------------------------------

    Attachment: 140829_SLING-3886_adapters_support.patch

after the discussion in the ticket i've enhanced the implementation of this 
feature, new patch attached: [^140829_SLING-3886_adapters_support.patch]

this is new:
* as stated by jason the previous implementation was not precise what happens 
when multiple model implementaitons of the same interface exist (the result was 
quite randomly). the new implementation introduces an "ImplementationSelector" 
interface, with one default implementation: it pics always the first storted by 
classname. but by implementating other services with this interface with lower 
service ranking it is possible to apply own strategies for detecting from 
multiple implementations - e.g. based on a tenant or application context.
* i've added an integration test as well to not rely only on the mocked osgi 
environment
* the web console plugin lists implementation selectors as well

with this enhancements i'm quite happy with the implementation and am looking 
forward to get it included - or feedback.

> Sling Models: support adapters for models different from the implementation 
> class
> ---------------------------------------------------------------------------------
>
>                 Key: SLING-3886
>                 URL: https://issues.apache.org/jira/browse/SLING-3886
>             Project: Sling
>          Issue Type: New Feature
>          Components: Extensions
>            Reporter: Stefan Seifert
>              Labels: models
>             Fix For: Sling Models Implementation 1.1.0, Sling Models API 1.1.0
>
>         Attachments: 140827_SLING-3886_adapters_support.patch, 
> 140829_SLING-3886_adapters_support.patch
>
>
> currently, as adapter (adaption target) only the implementation class itself 
> that is annotated with the @Model annotation is supported (which can be 
> either an interface or a class).
> if the model is not just a simple model but a class with more complex 
> business logic the following scenario is required:
> * a "service" interface is defined
> * this service interface ist not directly mapped to injected values, but 
> provides higher-level method
> * an implementation class with @Model annotation is implemented which gets 
> the required values injectd internally, but implements the interface for 
> outside access
> this is currently not possible with sling models.
> the attached patch extends the following features:
> * extends the @Model annotation with an optional "adapters" attribute
> * if defined, only the listed adapters are registered for the adapter 
> factory, not the implementation class itself (unless it is listed the 
> "adapters" attribute as well)
> * in the adapters attribute only the implementation class itself or 
> interfaces that it implements or superclasses can be defined
> * with this the scenario above is perfectly possible
> * unit tests included which simulate the bundle add/remove usecases which is 
> required to do the indirect implementation class mapping



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to