Pierre De Rop created FELIX-5425:
------------------------------------
Summary: Add support for OSGi Promise in DM-lambda
Key: FELIX-5425
URL: https://issues.apache.org/jira/browse/FELIX-5425
Project: Felix
Issue Type: New Feature
Components: Dependency Manager Lambda
Affects Versions: org.apache.felix.dependencymanager-r8
Reporter: Pierre De Rop
Assignee: Pierre De Rop
Priority: Minor
When you use the new DM-lambda API, and when a component needs to get the
result of an asynchronous operation before being activated and registered in
the OSGi service registry, you can now use a new "future dependency" which
allows to define a CompletableFuture (jdk8), and when the CF completes, then
the result is injected in the component (like if it was a ServiceDependency),
then the component is started and registered.
For example, if your component needs to download a web page before being
activated and registered, you can do this:
{code}
public class Activator extends DependencyManagerActivator {
public void init(BundleContext ctx, DependencyManager dm) throws Exception {
// Download a web page asynchronously, using a CompletableFuture:
String url = "http://felix.apache.org/";
CompletableFuture<String> page = CompletableFuture.supplyAsync(() ->
downloadSite(url));
// The component depends on a log service and on the content of the Felix
site.
// The lambda passed to the "withFuture" method configures the callback
that is
// invoked with the result of the CompletableFuture (the page content).
component(comp -> comp
.provides(MyService.class)
.impl(MyComponent.class)
.withService(LogService.class)
.withFuture(page, result -> result.complete(MyComponent::setPage)));
}
}
public class MyComponent implements MyService {
volatile LogService log; // injected.
void setPage(String page) {
// injected by the FutureDependency.
}
void start() {
// the web page has been downloaded and we can now register in the OSGI
registry.
}
@Override
void doService() {
...
}
}
{code}
Now, it should be investigated if the DM-lambda API could also support the OSGI
Promise API (in addition to the jdk8 CompletableFuture).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)