]
Antoine Sabot-Durand updated CDI-490:
-------------------------------------
Sprint: Sprint 1
Clarify what happens when an interceptor/decorator is enabled using
both @Priority and beans.xml
------------------------------------------------------------------------------------------------
Key: CDI-490
URL:
https://issues.jboss.org/browse/CDI-490
Project: CDI Specification Issues
Issue Type: Clarification
Components: Decorators, Interceptors
Affects Versions: 1.2.Final
Reporter: Jozef Hartinger
Labels: F2F2016
Fix For: 2.0 .Final
Suppose an InterceptorA has @Priority and is also listed in the beans.xml file of a
particular BDA. Such interceptor is for sure enabled because:
{quote}An interceptor is said to be enabled if it is enabled in at least one bean archive
or is listed in the final
list of interceptors for the application, as defined in Section 11.5.2,
“AfterTypeDiscovery event”.{quote}
it matches both parts of the statement.
As for ordering, the following statement defines invocation order:
{quote}Interceptors enabled using @Priority are called before interceptors enabled using
beans.xml.{quote}
Since InterceptorA is enabled by both @Priority and beans.xml, the following applies:
"Interceptors enabled using @Priority" = \{ InterceptorA \}
"interceptors enabled using beans.xml" = \{ InterceptorA \}
We can perform substitution in the statement and we get:
*\{ InterceptorA \} are called before \{ InterceptorA \}*
which does not seem right.
The specification should explicitly address this scenario. There are several options
(some of them are better, some are worse):
1) Invoke the interceptor twice - each time in the corresponding order given by priority
and position in beans.xml
2) Invoke the interceptor once in the @Priority part of the invocation chain (@Priority
has precedence)
3) Invoke the interceptor once in the beans.xml part of the invocation chain (beans.xml
has precedence)
4) Forbid an interceptor to be enabled by both @Priority and beans.xml