[cdi-dev] Adding Lambdas as CDI beans
Romain Manni-Bucau
rmannibucau at gmail.com
Mon Oct 19 03:19:32 EDT 2015
2015-10-19 9:17 GMT+02:00 Martin Kouba <mkouba at redhat.com>:
> Dne 19.10.2015 v 08:44 Romain Manni-Bucau napsal(a):
>
>> would be super cool to not have to write an extension for that, cant we
>> use applicationscope init event or an prioritized event at this moment -
>> avoiding the spi is a must for end user usage IMO?
>>
>
> Not possible, it's too late. ApplicationScoped init event is fired after
> the deployment validation. Well, maybe it's not that explicitly defined but
> it wouldn't make much sense to fire it before validation as you have to
> resolve a set of validated observers, usually declared on validated beans.
>
>
we speak about cdi 2.0 so all is possible, i think all places would work
but to be used it should respect the lightweight programmatic model of
business beans of CDI. The SPI is always a "let's do differently" - was
only my point.
Side note: since you add beans you should do it before the validation as
well but means you cant skip Extension which is a pain :(
>
>>
>> Romain Manni-Bucau
>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>> <http://rmannibucau.wordpress.com> | Github
>> <https://github.com/rmannibucau> | LinkedIn
>> <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> <http://www.tomitribe.com>
>>
>> 2015-10-19 8:40 GMT+02:00 Martin Kouba <mkouba at redhat.com
>> <mailto:mkouba at redhat.com>>:
>>
>> In CDI 2.0 we propose to support lambdas in the bean builder API -
>> currently available as a weld experimental feature in
>> AfterBeanDiscovery
>> and Weld SE - see also [1] and [2].
>>
>> For observers a similar builder might be useful.
>>
>> Martin
>>
>> [1]
>>
>> http://weld.cdi-spec.org/news/2015/02/25/weld-300Alpha5/#_bean_builder_api
>>
>> [2]
>>
>> https://github.com/weld/core/blob/master/tests-arquillian/src/test/java/org/jboss/weld/tests/extensions/custombeans/BuilderExtension.java
>>
>>
>>
>> Dne 17.10.2015 v 13:51 Sven Linstaedt napsal(a):
>> > Just one question: Who is on charge and is able of managing this
>> > unmanaged instances, e.g. lifecycle, serialization, concurrency
>> (e.g.
>> > when dealing with closures)?
>> >
>> > Functional programming and DI seem to be somehow disjunct in this
>> case.
>> > E.g. manually setting up observers seem to better fit extension than
>> > normal application code.
>> >
>> > On the other side, specifying producer methods or fields, that are
>> > injectable and return lambda expressions seems to be a no brainier
>> for
>> > CDI, is not it? As long as they are not scoped in a serializable
>> context.
>> >
>> > Have a nice weekend
>> > Sven
>> >
>> > -- sent by phone
>> >
>> > Am 17.10.2015 um 11:06 schrieb David Blevins <
>> david.blevins at gmail.com <mailto:david.blevins at gmail.com>
>> > <mailto:david.blevins at gmail.com <mailto:david.blevins at gmail.com
>> >>>:
>>
>> >
>> >> In brainstorming mode about fun that could be made possible with
>> Java
>> >> 8 and Java EE.
>> >>
>> >> Question in my mind is: is there some way we could make it
>> possible
>> >> for Lambdas or Method Refs to be CDI beans?
>> >>
>> >> It goes against the grain obviously as CDI creation is very much a
>> >> “Don’t call us, we’ll call you” kind of thing. The VM dynamically
>> >> creates a wrapper object around the Lambda or method reference
>> and it
>> >> implements the given interface.
>> >>
>> >> To make it work, there would need to be some non-producer method
>> way
>> >> of saying “put this thing in the context with these qualifiers”.
>> >>
>> >> Imagine a method somewhere that would allow you to:
>> >>
>> >> public <T> void addObserver(java.util.function.Consumer<T>
>> >> observer, Annotation... qualifiers);
>> >>
>> >>
>> >> Then you could take advantage as follows:
>> >>
>> >> final List<URI> uris = new ArrayList<>();
>> >> // @Observes URI
>> >> addObserver((Consumer<URI>) uris::add);
>> >>
>> >> // @Observes Thread
>> >> addObserver(Runtime.getRuntime()::addShutdownHook);
>> >>
>> >> // @Observes Runnable
>> >> addObserver((Consumer<Runnable>)
>> >> Executors.newFixedThreadPool(3)::submit);
>> >>
>> >> // @Observes URI
>> >> addObserver((Consumer<URI>) System.out::println, new
>> >> AnnotationLiteral<Fine>() {
>> >> });
>> >>
>> >> // @Observes Handler
>> >> final Logger logger = Logger.getLogger("somewhere");
>> >> addObserver(logger::addHandler); // add handlers via event
>> >>
>> >> // @Observes @Fine String
>> >> addObserver((Consumer<String>) logger::fine, new
>> >> AnnotationLiteral<Fine>() {});
>> >> }
>> >>
>> >>
>> >>
>> >> -David
>> >>
>> >>
>> >>
>> >> --
>> >> David Blevins
>> >> http://twitter.com/dblevins
>> >> http://www.tomitribe.com
>> >>
>> >> _______________________________________________
>> >> cdi-dev mailing list
>> >> cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>
>> <mailto:cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>>
>> >>https://lists.jboss.org/mailman/listinfo/cdi-dev
>> >>
>> >> Note that for all code provided on this list, the provider licenses
>> >> the code under the Apache License, Version 2
>> >> (http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>> ideas
>> >> provided on this list, the provider waives all patent and other
>> >> intellectual property rights inherent in such information.
>> >
>> >
>> > _______________________________________________
>> > cdi-dev mailing list
>> >cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>
>> >https://lists.jboss.org/mailman/listinfo/cdi-dev
>> >
>> > Note that for all code provided on this list, the provider licenses
>> the code under the Apache License, Version 2 (
>> http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>> ideas provided on this list, the provider waives all patent and
>> other intellectual property rights inherent in such information.
>> >
>>
>> --
>> Martin Kouba
>> Software Engineer
>> Red Hat, Czech Republic
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses
>> the code under the Apache License, Version 2
>> (http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>> ideas provided on this list, the provider waives all patent and
>> other intellectual property rights inherent in such information.
>>
>>
>>
> --
> Martin Kouba
> Software Engineer
> Red Hat, Czech Republic
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/cdi-dev/attachments/20151019/ceb8d036/attachment.html
More information about the cdi-dev
mailing list