Copyright (c) 2005, 2017 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2005, 2017 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.core.internal.jobs; import java.util.Hashtable; import org.eclipse.core.runtime.jobs.IJobManager; import org.eclipse.osgi.service.debug.DebugOptions; import org.eclipse.osgi.service.debug.DebugOptionsListener; import org.osgi.framework.*;
The class contains a set of helper methods for the runtime Jobs plugin. The following utility methods are supplied: - provides access to debug options - provides some bundle discovery functionality The closeServices() method should be called before the plugin is stopped.
Since:org.eclipse.core.jobs 3.2
/** * The class contains a set of helper methods for the runtime Jobs plugin. * The following utility methods are supplied: * - provides access to debug options * - provides some bundle discovery functionality * * The closeServices() method should be called before the plugin is stopped. * * @since org.eclipse.core.jobs 3.2 */
class JobOSGiUtils { private ServiceRegistration<DebugOptionsListener> debugRegistration = null; private static final JobOSGiUtils singleton = new JobOSGiUtils();
Accessor for the singleton instance
Returns:The JobOSGiUtils instance
/** * Accessor for the singleton instance * @return The JobOSGiUtils instance */
public static JobOSGiUtils getDefault() { return singleton; }
Private constructor to block instance creation.
/** * Private constructor to block instance creation. */
private JobOSGiUtils() { super(); } void openServices() { BundleContext context = JobActivator.getContext(); if (context == null) { if (JobManager.DEBUG) JobMessages.message("JobsOSGiUtils called before plugin started"); //$NON-NLS-1$ return; } // register debug options listener Hashtable<String, String> properties = new Hashtable<>(2); properties.put(DebugOptions.LISTENER_SYMBOLICNAME, JobManager.PI_JOBS); debugRegistration = context.registerService(DebugOptionsListener.class, JobManager.getInstance(), properties); } void closeServices() { if (debugRegistration != null) { debugRegistration.unregister(); debugRegistration = null; } }
Returns the bundle id of the bundle that contains the provided object, or null if the bundle could not be determined.
/** * Returns the bundle id of the bundle that contains the provided object, or * <code>null</code> if the bundle could not be determined. */
public String getBundleId(Object object) { if (object == null) return null; Bundle source = FrameworkUtil.getBundle(object.getClass()); if (source != null && source.getSymbolicName() != null) return source.getSymbolicName(); return null; }
Calculates whether the job plugin should set worker threads to be daemon threads. When workers are daemon threads, the job plugin does not need to be explicitly shut down because the VM can exit while workers are still alive.
Returns:true if all worker threads should be daemon threads, and false otherwise.
/** * Calculates whether the job plugin should set worker threads to be daemon * threads. When workers are daemon threads, the job plugin does not need * to be explicitly shut down because the VM can exit while workers are still * alive. * @return <code>true</code> if all worker threads should be daemon threads, * and <code>false</code> otherwise. */
boolean useDaemonThreads() { BundleContext context = JobActivator.getContext(); if (context == null) { //we are running stand-alone, so consult global system property String value = System.getProperty(IJobManager.PROP_USE_DAEMON_THREADS); //default to use daemon threads if property is absent if (value == null) return true; return "true".equalsIgnoreCase(value); //$NON-NLS-1$ } //only use daemon threads if the property is defined final String value = context.getProperty(IJobManager.PROP_USE_DAEMON_THREADS); //if value is absent, don't use daemon threads to maintain legacy behaviour if (value == null) return false; return "true".equalsIgnoreCase(value); //$NON-NLS-1$ } }