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@gmail.com
> <mailto:david.blevins@gmail.com>>:
>> cdi-dev@lists.jboss.org <mailto:cdi-dev@lists.jboss.org>>
>> 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
>> 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@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@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.