jsr345-experts@ejb-spec.java.net

[jsr345-experts] Re: Extension of _at_DependsOn

From: Pete Muir <pmuir_at_bleepbleep.org.uk>
Date: Mon, 12 Sep 2011 09:47:04 -0400

The issue with @DependsOn for CDI is that specifying a CDI dependency using an annotation is extremely ugly. Say I have a CDI bean:

@Colored @Red
class Parrot {

}

If I wanted to depend on that using @DependsOn:

@DependsOn(type=Parrot.class, qualifiers={Colored.class, Red.class})

it's pretty nasty. We're not going to win anyone to Java EE with this.

However it get's worse.

@British @Gender(MALE)
class Person {

}

@DependsOn(type=Person.class, qualifiers={_at_DependentQualifier(British.class), @DependentQualifier(value=Gender.class, attributes={_at_DependentQualifierAttribute(name="value", value="MALE")}))

This is now basically useless, and I've yet to hear anyone say that this is a good approach.

I know that some people have proposed requiring this only works with @Named e.g.

@British @Gender(MALE)
@Named("britishMalePerson")
class Person {

}

@DependsOn("britishMalePerson")

However this cannot be included in the CDI spec as it is a complete deviation from the guiding principles of CDI.

I've yet to see a better approach - any ideas? :-D

Pete

On 12 Sep 2011, at 04:13, Antonio Goncalves wrote:

> Wouldn't it also make sense to have @DependsOn on some CDI beans (@ApplicationScoped for example) ?
>
>
> On Sat, Sep 10, 2011 at 06:25, Reza Rahman <reza_rahman_at_lycos.com> wrote:
> Adam,
>
> I hate to say this, but I'd rather focus on moving @DependsOn to CDI where name-based qualifiers would be unlikely to be used anyway.
>
> Cheers,
> Reza
>
>
>
> On 9/9/2011 7:23 PM, Marina Vatkina wrote:
> Adam,
>
> What would be the use-case for the new element?
>
> thanks,
> -marina
>
> Adam Bien wrote:
> Hi All,
>
> currently the @DependsOn annotation looks like:
> @Target(value = {ElementType.TYPE})
> @Retention(value = RetentionPolicy.RUNTIME)
> public @interface DependsOn {
>
> public String[] value();
> }
>
>
> I would like to extend it with a class element:
>
> @Target(value = {ElementType.TYPE})
> @Retention(value = RetentionPolicy.RUNTIME)
> public @interface DependsOn {
>
> public String[] value();
> *public Class[] classes() default void.class;*
> }
>
> It should be possible to specify the dependencies as simple EJB-names as well as referring directly to the classes,
>
> any thoughts?
>
> adam
>
>
>
>
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 10.0.1392 / Virus Database: 1520/3886 - Release Date: 09/09/11
>
>
>
>
>
>
> --
> Antonio Goncalves
> Software architect and Java Champion
>
> Web site | Twitter | Blog | LinkedIn | Paris JUG