You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Custom Project Stages

It's possible to provide custom project stage implementations.
Therefore, you have to provide an implementation of the ProjectStageHolder interface.

ProjectStageHolder for custom project stage implementations
public class CustomProjectStageHolder implements ProjectStageHolder
{
    public static final class CustomProjectStage extends ProjectStage
    {
        private static final long serialVersionUID = 1029094387976167179L;
    }

    public static final CustomProjectStage CustomProjectStage = new CustomProjectStage();
}

Configure your custom ProjectStageHolder in META-INF/services/org.apache.myfaces.extensions.cdi.core.api.projectstage.ProjectStageHolder. The file has to provide the fully qualified class name of the custom implementation of the ProjectStageHolder interface.

Usage of a custom project stage
ProjectStage customProjectStage;
customProjectStage = ProjectStage.valueOf("CustomProjectStage");
//or
customProjectStage = CustomProjectStageHolder.CustomProjectStage;
//or
@ProjectStageActivated(CustomProjectStageHolder.CustomProjectStage.class)

Deactivating default implementations

CDI provides the mechanism of @Alternative implementations. As soon as MyFaces CODI provides a default implementation as CDI bean, it's possible to provide a custom implementation via @Alternative (+ the corresponding std. CDI config). However, some CDI artifacts like CDI-Extensions (javax.enterprise.inject.spi.Extension) and Interceptors (javax.interceptor.Interceptor) don't support the mechanism for providing alternative implementations. Therefore, MyFaces CODI allows to create a custom implementation of the ClassDeactivator interface (or AbstractClassDeactivator).

Implementing a custom Class-Deactivator
public class CustomClassDeactivation extends AbstractClassDeactivator
{
    protected void deactivateClasses()
    {
        addDeactivatedClass(DefaultImpl.class);
        //...
    }
}

You can provide a custom ClassDeactivator via JNDI (name: java:comp/env/myfaces-codi/ClassDeactivator) or VM parameter (-D org.apache.myfaces.extensions.cdi.ClassDeactivator) or via a CODI Java-API ( ClassDeactivation#setClassDeactivator).

Hint

If you would like to filter additional beans, you can provide a custom javax.enterprise.inject.spi.Extension and observe javax.enterprise.inject.spi.ProcessAnnotatedType for calling #veto on an implementation.

  • No labels