Details
-
Type:
Feature Request
-
Status: Resolved (View Workflow)
-
Priority:
Major
-
Resolution: Done
-
Affects Version/s: 3.0.2
-
Fix Version/s: 3.1.0.Beta4
-
Component/s: None
-
Labels:None
Description
Hey all,
I think it would be a great enhancement if Seam Faces could support activation of beans only in specific JSF project stages. MyFaces CODI supports a similar feature with the @ProjectStageActivated annotation.
Examples:
@ProductionStage
|
@ApplicationScoped
|
public class ProductionEntityManagerProducer {
|
...
|
}
|
|
|
@DevelopmentStage
|
@ApplicationScoped
|
public class DevelopmentEntityManagerProducer {
|
...
|
}
|
Another very interesting usecase would be to enable specific interceptors/decorators only in development stage. This could be used for debugging stuff that is only interesting during development.
I think this could be easily implenented using an CDI extension that vetos beans that do not match the active project stage. The only problem I'm seeing is that we will need the JSF project stage in an very early stage during application startup (actually before JSF started up). This means that we would have to determine the project stage JSF will use ourselves.
The JSF spec describes that the project stage can either be set with a servlet context parameter or using JNDI. If the latter one is uses, we could simply do a JNDI lookup in the extension. No problem here. If the developer uses a servlet context parameter the situation will become more problematic, because we will need a reference to the ServletContext in the extension.
What do you think of this feature? Would it be useful? Any further ideas for the implementation?
This would be a great feature to add!
In terms of looking up the project stage from the context param, we could always look in the web.xml manually from within the CDI extension.