final String slstr = syscontext.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL);
final Integer beginningStartLevel = Integer.parseInt(slstr != null ? slstr : "1");
try {
final BundleManagerService bundleManager = injectedBundleManager.getValue();
final ServiceContainer serviceContainer = serviceController.getServiceContainer();
serviceTarget = context.getChildTarget();
ServerEnvironment serverEnvironment = injectedEnvironment.getValue();
bundlesDir = serverEnvironment.getBundlesDir();
if (bundlesDir.isDirectory() == false)
throw MESSAGES.cannotFindBundleDir(bundlesDir);
injectedSubsystemState.getValue().addObserver(this);
List<OSGiCapability> configcaps = new ArrayList<OSGiCapability>();
configcaps.add(new OSGiCapability("org.osgi.enterprise", null));
configcaps.addAll(injectedSubsystemState.getValue().getCapabilities());
for (OSGiCapability moduleMetaData : configcaps) {
ServiceName serviceName = installModule(bundleManager, moduleMetaData);
if (serviceName != null) {
installedServices.put(serviceName, moduleMetaData);
if (moduleMetaData.getStartLevel() <= beginningStartLevel) {
resolvableServices.add(serviceName);
}
}
}
// Install a service that starts the bundles
ServiceBuilder<Void> builder = serviceTarget.addService(Services.AUTOINSTALL_PROVIDER_COMPLETE, new AbstractService<Void>() {
public void start(StartContext context) throws StartException {
// Resolve all bundles up until and including the Framework beginning start level
// [AS7-2434] Incremental bundle resolution approach may lead to unresolvable user bundles
Set<Bundle> resolvableBundles = new LinkedHashSet<Bundle>();
for (ServiceName serviceName : resolvableServices) {
ServiceController<?> requiredService = serviceContainer.getRequiredService(serviceName);
resolvableBundles.add((Bundle) requiredService.getValue());
}
Bundle[] bundleArr = resolvableBundles.toArray(new Bundle[resolvableBundles.size()]);
PackageAdmin packageAdmin = injectedPackageAdmin.getValue();
packageAdmin.resolveBundles(bundleArr);