蓝图强制依赖于强制依赖

时间:2015-08-20 18:01:21

标签: osgi blueprint-osgi

请帮我解决一个问题。我有一个osgi包。 Blueprint配置看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <bean class="test.SomeBean">
        <argument>
            <reference-list availability="mandatory" member-type="service-object" interface="test.Service1"/>
        </argument>
    </bean>

    <service interface="test.Service1">
        <bean class="test.Service1Impl">
            <argument>
                <reference-list availability="mandatory" member-type="service-object" interface="test.Service2"/>
            </argument>
        </bean>
    </service>

    <service interface="test.Service2">
        <bean class="test.Service2Impl"/>
    </service>

</blueprint>

部署后,我得到一个java.util.concurrent.TimeoutException。如果我将Service2声明移动到另一个包或将可用性更改为可选的所有工作正常。为什么呢?

1 个答案:

答案 0 :(得分:0)

原因是您依赖于您提供的服务。 BLueprint无法为强制性服务执行此操作。

原因是每当蓝图命中强制引用时,它确保在开始之前解决依赖关系。只有在解决了所有强制性引用后,才会发布上下文的服务。