[
https://issues.apache.org/jira/browse/ARIES-1201?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Gormley updated ARIES-1201:
---------------------------------
Attachment: BlueprintStartOrder.diff
> Blueprint start can hang when using reference-listeners
> -------------------------------------------------------
>
> Key: ARIES-1201
> URL: https://issues.apache.org/jira/browse/ARIES-1201
> Project: Aries
> Issue Type: Bug
> Components: Blueprint
> Reporter: Simon Gormley
> Attachments: BlueprintStartOrder.diff
>
>
> Blueprint startup can hang if a reference listener uses the same bean as it
> is tracking.
> For the blueprints included below, blueprints 1 and 2 start processing on
> different threads. Blueprint 2 tries to get the service from blueprint 1, but
> blocks as blueprint 1's bean is waiting for the reference to become
> available. Blueprint 1 runs, tries to create the reference, and so needs to
> create the bean, but can't as blueprint 2 has started this, and so blueprint
> 1 can't complete to release blueprint 2.
> Essentially, this happens as the blueprint service is registered before it is
> completely ready to be used. If the eager components were created before
> registering, the service would be ready to be used straight away. Section
> 121.6 of the OSGi spec indicates that a blueprint service shouldn't be
> registered before it is ready.
> Blueprint 1:
> <reference id="i" interface="api.Interface">
> <reference-listener ref="AImplBeanBean" unbind-method="unbound"/>
> </reference>
> <bean id="AImplBeanBean" class="bundle2.AImplBean" init-method="init">
> <property name="i" ref="i"/>
> </bean>
> <service id="ASrv" ref="AImplBeanBean" interface="api.InterfaceA"
> activation="eager"></service>
> Blueprint 2:
> <bean id="BImplBeanBean" class="bundle3.BImplBean"
> init-method="init" activation="lazy">
> <property name="a" ref="A"/>
> </bean>
> <service id="BImplBeanBeanService" ref="BImplBeanBean"
> interface="api.InterfaceB" />
> <reference interface="api.InterfaceA" id="A"/>
> Blueprint 3:
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
> default-activation="lazy">
> <bean id="InterfaceImplBean" class="pmr40452.impl.InterfaceImpl" />
> <service id="Impl" ref="InterfaceImplBean"
> interface="api.Interface" />
> </blueprint>
--
This message was sent by Atlassian JIRA
(v6.2#6252)