请帮我解决一个问题。我有一个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声明移动到另一个包或将可用性更改为可选的所有工作正常。为什么呢?
答案 0 :(得分:0)
原因是您依赖于您提供的服务。 BLueprint无法为强制性服务执行此操作。
原因是每当蓝图命中强制引用时,它确保在开始之前解决依赖关系。只有在解决了所有强制性引用后,才会发布上下文的服务。