[cdi-dev] Alternative producer methods
Pete Muir
pmuir at redhat.com
Mon Apr 2 05:32:09 EDT 2012
I think OWB is following the spec correctly, and you would need to redeclare the disposer, which I agree is horrid. However I don't want to reopen the can of worms that is allowing disposers on other classes, as it makes booting CDI much much more complex.
On 1 Apr 2012, at 17:42, Marius Bogoevici wrote:
> I *think* that the expected behaviour in this case should be that the original disposer is disabled and only a disposer defined on the same bean class as the alternative producer should apply.
>
> If this is a correct interpretation of the intent, it needs to make its way into the spec.
>
>
>
> On 2012-04-01, at 12:06 PM, Mark Struberg wrote:
>
>> To be more clear what I mean with the @Disposal issue please consider the following class:
>>
>> public class DefaultBeanProducer
>> {
>> public static boolean gotDumped = false;
>>
>> @Produces @QualifierProducerBased
>> public IProducedBean generateBean()
>> {
>> return new ProducedBean("default", this);
>> }
>>
>> public void dumpBean(@Disposes @QualifierProducerBased IProducedBean bean)
>> {
>> gotDumped = true;
>> }
>> }
>>
>>
>> And the following @Alternative:
>>
>> @Alternative
>> public class AlternativeOnClassAndProducerMethodBean
>> {
>> @Produces
>> @Alternative
>> @QualifierProducerBased
>> public IProducedBean generateBean2()
>> {
>> return new ProducedBean("AlternativeOnClassAndProducerMethodBean", this);
>> }
>> }
>>
>>
>>
>> In OWB this currently creates the following Exception:
>> WebBeansConfigurationException: Producer method component of the disposal method : dumpBean in class : org.apache.webbeans.newtests.concepts.alternatives.common.DefaultBeanProducer must be in the same class!
>>
>> This behaviour is exactly as defined in the current spec afaik.
>> But certainly this is not very useful...
>>
>> wdyt? Did I overlook something?
>>
>> LieGrue,
>> strub
>>
>>
>>
>>
>> ----- Original Message -----
>>> From: Mark Struberg <struberg at yahoo.de>
>>> To: cdi-dev <cdi-dev at lists.jboss.org>
>>> Cc:
>>> Sent: Sunday, April 1, 2012 3:51 PM
>>> Subject: [cdi-dev] Alternative producer methods
>>>
>>> Dear EG colleagues!
>>>
>>>
>>> I have a question about @Alternative on producer methods:
>>> consider the following class:
>>>
>>> // here is NO alternative annotation!
>>>
>>> public class AlternativeOnProducerMethodOnlyBean {
>>> @Produces @Alternative
>>> public IProducedBean generateBean2() {..}
>>> }
>>>
>>> So the class itself is NOT annotated as @Alternative
>>>
>>> I'm not sure if 5.1.1 allows this or the other way around: if this must be
>>> supported.
>>>
>>> Imo the important parts are (from 5.1.1)
>>>> Each child <class> element must specify the name of an alternative
>>> bean class.
>>>
>>>> If there is no class with the specified name, or if the class with the
>>> specified
>>>
>>>> name is not an alternative bean class, the container automatically detects
>>>
>>>> the problem and treats it as a deployment problem.
>>>
>>> The question is now how 'an alternative bean class' is to be interpreted
>>> ^^
>>> The first paragraph of 5.1.1 says:
>>>
>>>> An alternative is selected for the bean archive if either ...
>>>> * the alternative is a producer method, field or resource, and the
>>>
>>>> bean class that declares the method or field is listed, ...
>>>
>>>
>>> But does this qualify the AlternativeOnProducerMethodOnlyBean as
>>> 'alternative bean class'?
>>>
>>> Any ideas?
>>>
>>> Btw: the whole topic of disposal methods for @Alternative producers are
>>> completely unspecified...
>>>
>>> LieGrue,
>>> strub
>>>
>>> _______________________________________________
>>> cdi-dev mailing list
>>> cdi-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>
>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev
More information about the cdi-dev
mailing list