Richard DiCroce created DELTASPIKE-599:
------------------------------------------

             Summary: CDI 1.1 friendly ViewConfig discovery
                 Key: DELTASPIKE-599
                 URL: https://issues.apache.org/jira/browse/DELTASPIKE-599
             Project: DeltaSpike
          Issue Type: Improvement
          Components: JSF-Module
    Affects Versions: 0.7
            Reporter: Richard DiCroce


CDI 1.1 introduced the "annotated" bean discovery mode. In this mode, 
ProcessAnnotatedType observers in CDI extensions are only called for classes 
that have CDI scope annotations. This is inconvenient for ViewConfigs, as it 
requires that every class (page) must be annotated with @Dependent:
{code}
public interface Pages extends ViewConfig {

        @Dependent
        class Index implements Pages {}
        
        @Secured({AuthenticatedDecisionVoter.class, 
PermissionDecisionVoter.class})
        interface SecuredByRoleAttribute extends Pages {
                @Dependent
                class TestPage implements SecuredByRoleAttribute {}
        }
        
        @Secured(AuthenticatedDecisionVoter.class)
        interface NoAuthorization extends Pages {
                @Dependent
                class TestPage implements NoAuthorization {}
        }
        
}
{code}

Another workaround would be to make a base class that is marked @Dependent and 
have all of the pages extend that class, but that's not really any better in 
terms of the amount of boilerplate.

It would be nice if there were another way to discover ViewConfig classes. One 
idea: the application provides a producer method/field with some qualifier that 
provides the outer-most ViewConfig interface (Pages.class in the above 
example). Then DS injects Instance<Class<? extends ViewConfig>> and uses 
Class.getDeclaredClasses() to walk the tree.



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

Reply via email to