[ 
https://issues.apache.org/jira/browse/SLING-4447?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14336917#comment-14336917
 ] 

Radu Cotescu edited comment on SLING-4447 at 2/25/15 6:32 PM:
--------------------------------------------------------------

I briefly reviewed the patch. Here are my comments:

* make the provider as lazy as possible: first check if the class exists by 
querying the DCLM, then do all the checks
* be consistent when errors occur: return a {{ProviderOutcome}} initialised 
with a failure cause  - {{ProviderOutcome#failure(Throwable cause)}}
* use a provider lower than 100 and higher than 90 - we want this 
{{UseProvider}} to kick in before the {{JavaUseProvider}} but after the 
{{RenderUnitProvider}}, for performance reasons

To overcome [~jsedding]'s concern we should mark Sightly as an optional package 
import.


was (Author: radu.cotescu):
I briefly reviewed the patch. Here are my comments:

* make the provider as lazy as possible: first check if the class exists by 
querying the DCLM, then do all the checks
* be consistent when errors occur: return a {{ProviderOutcome}} initialised 
with a failure cause  - {{ProviderOutcome#failure(Throwable cause)}}
* use a provider lower than 100 and higher than 90 - we want this 
{{UseProvider}} to kick in before the {{JavaUseProvider}} but after the 
{{RenderUnitProvider}}, for performance reasons

> Improve JavaUseProvider to not fall back to a simple Pojo instanciation in 
> case a Java class with @Model annotation cannot be instanciated
> ------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SLING-4447
>                 URL: https://issues.apache.org/jira/browse/SLING-4447
>             Project: Sling
>          Issue Type: Improvement
>          Components: Scripting
>    Affects Versions: Scripting Sightly Engine 1.0.0
>            Reporter: Konrad Windszus
>            Assignee: Konrad Windszus
>         Attachments: SLING-4447-v01.patch
>
>
> Currently in case a Java class is a Sling Model (i.e. has the Model 
> annotation) and cannot be instanciated (e.g. required injections not 
> possible) Sightly falls back to instanciate those as simple Pojos.
> This is never good, since a lot of NullPointerException happen then, because 
> all injections have not been performed then.
> Therefore in the following code should be used instead 
> {code}
> if (modelFactory.isModelClass(resource, cls)) {
>   if (modelFactory.canCreateFromAdaptable(resource, cls)) {
>     obj = modelFactory.createModel(resource, cls);
>   } else if (modelFactory.canCreateFromAdaptable(request, cls)) {
>     obj = modelFactory.createModel(request, cls);
>   } else {
>     throw new IllegalStateException("Could not adapt the given Sling Model 
> from neither resource nor request: " + cls);
>   }
> }
> {code}
> That way, exceptions would be propagated in case a Sling model cannot be 
> instanciated and developers more easily see why the Sling Model does not work 
> (instead of running into NullPointerExceptions in their model because it was 
> instanciated as simple 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to