felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pierre De Rop (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FELIX-4847) Allow TemporalServiceDependency to be optional
Date Tue, 28 Apr 2015 23:35:07 GMT

    [ https://issues.apache.org/jira/browse/FELIX-4847?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14518356#comment-14518356

Pierre De Rop commented on FELIX-4847:

And what about using some java constructs instead of a temporal service dependency for your
use case ?
Indeed, you could use a CountDownLatch that could be used to wait for the Foobar service (synchronously).
something like:

public class FoobarIT {
    final CountDownLatch latch = new CountDownLatch(1);
    public TestRule testRule = new DependencyManagerTestRule() { protected Object getWrapped()
{ return FoobarIT.this; }};

    private BundleContext bundleContext;

    private Foobar foobar;

    @ServiceDependency(name = Foobar.PID)
    void bind(Foobar foobar) {
    	this.foobar = foobar;

    private ConfigurationAdmin configurationAdmin;

    @ResourceDependency(filter = "(" + ResourceHandler.PATH + "=/META-INF/"
        + Foobar.PID + ".cfg)")
    private URL url;

    Map<String, ?> init() throws IOException
        Bundle bundle = this.bundleContext.getBundle();
        String location = bundle.getLocation();
        Configuration configuration = this.configurationAdmin.getConfiguration(Foobar.PID,
        Properties properties = new Properties();
        try (InputStream inputStream = this.url.openStream();)
        configuration.update((Dictionary) properties);
        return Collections.singletonMap(Foobar.PID + ".required", Boolean.FALSE);

    public void test() {
    	latch.await(10000, TimeUnit.MILLISECONDS);

making sense ?

> Allow TemporalServiceDependency to be optional
> ----------------------------------------------
>                 Key: FELIX-4847
>                 URL: https://issues.apache.org/jira/browse/FELIX-4847
>             Project: Felix
>          Issue Type: Wish
>          Components: Dependency Manager
>    Affects Versions: dependencymanager-3.2.0
>            Reporter: Tuomas Kiviaho
>         Attachments: TemporalServiceDependencyImpl.java, dm.test.with.bndtools.tgz, dm.test.with.maven.tgz
> I wanted to use temporal service to wait for CM update thread to finish what it's doing
(because the spec doesn't have a non-parallel version). 
> Everything worked fine until JUnit test rule said that the component isn't ready yet.
I was merely checking that every required dependency was also available and to my surprise
the temporal service was marked unavailable until the CM had completed what it was doing.
> 1) Shouldn't temporal service be always available externally via available property and
keep track on the actual state only internally? This approach might not be backwards compatible.
> 2) Could temporal service be allowed to be marked as optional. This would suit my use
case, but it feels like a 'golden hammer' approach because it alters component's state machine
behavior a bit which in turn can be harmful for other use cases. 
> As a workaround I'd have to differentiate the dependencies somehow from each other, but
I see that the 4.x has removed the dedicated interface that I was thinking of relying upon

This message was sent by Atlassian JIRA

View raw message