| /* |
| * Copyright 2015 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.brooklyn.util.core.osgi; |
| |
| import org.apache.brooklyn.api.mgmt.ManagementContext; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.FrameworkUtil; |
| import org.osgi.util.tracker.ServiceTracker; |
| |
| /** |
| * Compatibility methods between karaf launcher and monolithic launcher. |
| * |
| * @todo Remove after transition to karaf launcher. |
| */ |
| public class Compat { |
| |
| /* synchronized by class initialization */ |
| private static class SingletonHolder { |
| |
| private static final Compat instance = new Compat(); |
| } |
| |
| public static Compat getInstance() { |
| return SingletonHolder.instance; |
| } |
| |
| private final ServiceTracker managementContextTracker; |
| |
| private Compat() { |
| Bundle bundle = FrameworkUtil.getBundle(Compat.class); |
| if (bundle != null) { |
| BundleContext bundleContext = bundle.getBundleContext(); |
| managementContextTracker = new ServiceTracker(bundleContext, ManagementContext.class, null); |
| managementContextTracker.open(); |
| } else { |
| managementContextTracker = null; |
| } |
| } |
| |
| /** |
| * Provides the management context service. |
| * |
| * Either from the encompassing OSGi framework or from the servlet context, depending on which launcher was used. |
| * |
| * @todo This does not allow ungetting the service after usage, so the bundle will remain blocked until all dependent bundles are |
| * stopped. |
| * @fixme Drop this for good after switching to karaf launcher. |
| */ |
| public ManagementContext getManagementContext() { |
| if (managementContextTracker != null) { |
| return (ManagementContext) managementContextTracker.getService(); |
| } |
| return null; |
| } |
| } |