代码之家  ›  专栏  ›  技术社区  ›  sirophim

蓝图强制依赖性到强制依赖性

  •  0
  • sirophim  · 技术社区  · 9 年前

    请帮我解决一个问题。我有一个osgi包。蓝图配置如下

    <?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 回复  |  直到 8 年前
        1
  •  0
  •   Christian Schneider    9 年前

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

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