[cdi-dev] [JBoss JIRA] (CDI-721) configureAnnotatedType vs setAnnotatedType restrition is unecessarily strict

Martin Kouba (JIRA) issues at jboss.org
Sun Jan 28 17:17:00 EST 2018


    [ https://issues.jboss.org/browse/CDI-721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13524948#comment-13524948 ] 

Martin Kouba commented on CDI-721:
----------------------------------

Mark, I understand that you found a good use case where the current approach does not work. But configurators were not meant to replace {{setAnnotatedType()}} and to cover all possible use cases. A configurator instance is currently *scoped to a container lifecycle observer method invocation* and if we change this in CDI 2.x I think we would break backward compatibility. Also we would have to add some "terminal" operation to the configurator API so that it would be clear when a configurator result should be used to replace the original AT:

{code:java}
void observe(@Observes ProcessAnnotatedType<Foo> event) {
  AnnotatedTypeConfigurator<Foo> configurator = event.configureAnnotatedType().add(RequestScoped.Literal.INSTANCE);
  // At this time we cannot "terminate" the configurator!
  event.setAnnotatedType(...);
  configurator.methods().forEach(m -> m.add(Whatever.Literal.INSTANCE));
}
{code}

> configureAnnotatedType vs setAnnotatedType restrition is unecessarily strict
> ----------------------------------------------------------------------------
>
>                 Key: CDI-721
>                 URL: https://issues.jboss.org/browse/CDI-721
>             Project: CDI Specification Issues
>          Issue Type: Bug
>          Components: Portable Extensions
>    Affects Versions: 2.0 .Final
>            Reporter: Mark Struberg
>
> {noformat}
> Any observer of this event is permitted to wrap and/or replace the AnnotatedType by calling either setAnnotatedType() or configureAnnotatedType(). If both methods are called within an observer notification an IllegalStateException is thrown.
> {noformat}
> This rule is way too strict without any real reason.
> Any CDI container must support that both methods are being called on the same event payload anyway. Because we did not forbid that observerMethod1 invokes setAnnotatedType and observerMethod2 uses configureAnnoatedType. And that's good that way, otherwise the pluggability would be lost.
> We should delete this sentence without any substitution.
> The same applies to similar configurator methods like configureBeanAttributes, etc.



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the cdi-dev mailing list