[cdi-dev] Challenge TCK test for indirect specialization rules
Mark Struberg
struberg at yahoo.de
Fri Jun 6 05:10:10 EDT 2014
you are wrong in quite a few ways imo:
> Non-transitive case:
> A is enabled. B is specialized by A this B is not enabled. C is only
> specialized by B, which is *not enabled* thus C remains enabled. Now
> having both A and C enabled at the same time is clearly wrong and goes
> against the whole purpose of specialization. Instead of replacing C with
> A we end up we both beans enabled.
wrong, A still (indirectly) extends C, thus C is not enabled.
The same is btw true if you have
As -> B -> C -> D
(s indicates @Specialized)
In this case A is the only enabled one. B, C and D are all disabled.
This doesn't need anything special regarding indirect specialization.
> The way indirect specialization is defined in the spec is equivalent to
> saying that "specialization" relation is transitive.
4.3.1 does explicitly rule out transitivity for @Specialized layers 'in-between'...
If you have
As -> Bs -> C -> D
then only As and C account for the name and qualifier evaluation.
LieGrue,
strub
On Friday, 6 June 2014, 10:17, Jozef Hartinger <jharting at redhat.com> wrote:
>
>
>
>On 06/03/2014 11:48 AM, Matus Abaffy wrote:
>> If the intention was not to ignore the beans in-between, then the rule for indirect specialization seems quite redundant to me.
>
>The way indirect specialization is defined in the spec is equivalent to
>saying that "specialization" relation is transitive. Having
>
>A specializes B
>
>and
>B specializes C
>
>that means that also
>"A specializes C"
>holds true.
>
>I agree that when looking at qualifiers and name only, this "A
>specializes C" relation may seem redundant. Relations "A specializes B"
>and "B specializes C" themselves guarantee
>that B contains all the qualifiers of C, A contains all the qualifiers
>of B (and thus also those from C).
>
>However, there are other parts of the specification for which the fact
>that both "A specializes B" and "A specializes C" hold true is
>important. For example, take section 5.1.2.
>It says:
>
>"A bean is said to be enabled if it is not specialized by any other
>enabled bean".
>
>Now it makes a difference whether we consider specialization transitive
>(A specializes C relation exists) or not as it influences whether C ends
>up being enabled or not.
>
>Transitive case:
>Both B and C are specialized by A and thus only A remains enabled.
>
>Non-transitive case:
>A is enabled. B is specialized by A this B is not enabled. C is only
>specialized by B, which is *not enabled* thus C remains enabled. Now
>having both A and C enabled at the same time is clearly wrong and goes
>against the whole purpose of specialization. Instead of replacing C with
>A we end up we both beans enabled.
>
>I think there is no doubt now that non-transitive specialization does
>not fit the CDI spec. In addition, I hope this makes it clear why
>transitivity of specialization is not redundant.
>
>Jozef
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/cdi-dev/attachments/20140606/b544c599/attachment-0001.html
More information about the cdi-dev
mailing list