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 weekendSven-- sent by phone_______________________________________________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
_______________________________________________
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.
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.