[
https://issues.apache.org/jira/browse/ARIES-536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12983666#action_12983666
]
Guillaume Nodet commented on ARIES-536:
---------------------------------------
I'm experimenting with the following patch:
{code}
diff --git
a/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
b/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/con
index 74ea5ed..d83c3d1 100644
---
a/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
+++
b/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java
@@ -31,7 +31,6 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.atomic.AtomicReference;
import org.apache.aries.blueprint.BlueprintConstants;
import org.apache.aries.blueprint.ParserService;
@@ -54,8 +53,6 @@ import org.osgi.framework.SynchronousBundleListener;
import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.container.BlueprintEvent;
import org.osgi.util.tracker.BundleTrackerCustomizer;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -313,7 +310,14 @@ public class BlueprintExtender implements BundleActivator,
SynchronousBundleList
if (compatible) {
final BlueprintContainerImpl blueprintContainer = new
BlueprintContainerImpl(bundle.getBundleContext(), context.getBundle(),
eventDispatcher, handlers, executors,
containers.put(bundle, blueprintContainer);
- blueprintContainer.schedule();
+ String val =
context.getProperty("org.apache.aries.blueprint.synchronous");
+ if (Boolean.parseBoolean(val)) {
+ LOGGER.debug("Starting creation of blueprint bundle {}
synchronously", bundle.getSymbolicName());
+ blueprintContainer.run();
+ } else {
+ LOGGER.debug("Scheduling creation of blueprint bundle
{} asynchronously", bundle.getSymbolicName());
+ blueprintContainer.schedule();
+ }
} else {
LOGGER.info("Bundle {} is not compatible with this
blueprint extender", bundle.getSymbolicName());
}
{code}
It will simply start the initlal processing of the blueprint bundle
synchronously up to the end or any missing dependency.
> Have a way to specify a blueprint bundle should be started in sync with the
> start level service as much as possible
> -------------------------------------------------------------------------------------------------------------------
>
> Key: ARIES-536
> URL: https://issues.apache.org/jira/browse/ARIES-536
> Project: Aries
> Issue Type: New Feature
> Components: Blueprint
> Reporter: Guillaume Nodet
>
> The use case is for ordering startup using start-level. If you have a bundle
> that has an optional dependency on a service provided by blueprint, you have
> no way to raise the chances that the service will be used from the start as
> blueprint bundles are started asynchronously.
> I'd like to have a way to specifiy that the blueprint bundle should be
> started asynchronously, at least until a GRACE_PERIOD event would be fired,
> in which case, the remaning things would be done asynchronously.
> This definitely should not be used as a way to work around bad bundle
> behaviors that aren't resiliant with missing dependencies, but really to
> ensure that when the server boots up, services are started in an optimal
> order (log and configadmin should be started before the other ones if
> possible).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.