Side note: lambda are serializable technically
Le 17 oct. 2015 15:04, "John D. Ament" <john.d.ament(a)gmail.com> a écrit :
Sven,
I'm a little curious, why do they need to avoid serializable contexts? In
all honesty, I use app scoped functions, predicates in my code, at least in
a couple of places. Lambdas are specifically meant for operations, not
data, so they should be in a highly reusable scope (in my opinion at least).
On the flip side, I have a hard time justifying needing to provide
injectable beans for lambdas since good encapsulation should indicate
they're only used in a single spot.
John
On Sat, Oct 17, 2015 at 7:51 AM Sven Linstaedt <sven.linstaedt(a)gmail.com>
wrote:
> 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(a)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(a)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(a)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(a)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.