I've discovered that there's a timing problem using bueprint in
geronimo. Blueprint uses a separate thread to fire up the beans in a
bundle, whereas geronimo uses the calling thread to start a
configuration. This means that if a gbean needs something supplied by
a blueprint bean in an "earlier" configuration, there's no guarantee
the blueprint stuff will have been processed at all yet.
A simple way to deal with this is with a WaitForBlueprintGBean that
registers as a BlueprintListener and blocks until it gets a
BlueprintEvent indicating that the blueprint stuff either started or
failed to start.
While all comments are welcome, I'd appreciate it if Jarek or Rick
could take a look to see if I missed any events that need to be
considered. The new class is framework/modules/geronimo-blueprint/src/
main/java/org/apache/geronimo/blueprint/WaitForBlueprintGBean.java
I put this in a new module since we may not want a dependency on
blueprint-api for every module in geronimo. The only other place that
seems reasonable to me is geronimo-system but this will drag in
blueprint everywhere.
Anyway..... with the help of this gbean, slightly modified aries
blueprint, xbean-blueprint, karaf modified to use aries blueprint, and
a couple minor activemq changes to eliminate needless spring-isms, I
appear to have an activemq broker starting up under blueprint, and our
regular activemq-ra connector starting. I plan to work on getting all
these bits committed or into patches.
thanks
david jencks
- Blueprint, gbeans, and activemq David Jencks
-