package jenkins.util;
import hudson.WebAppMain;
import javax.servlet.ServletContextEvent;
import jenkins.model.Jenkins;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
/**
* A utility class to identify if the current JVM is the one that is running {@link Jenkins}
*
* @since TODO
*/
public class JenkinsJVM {
/**
* Flag to identify the JVM running {@link Jenkins}.
*/
private static boolean jenkinsJVM;
/**
* Protect against people instantiating this class.
*/
@Restricted(NoExternalUse.class)
protected JenkinsJVM() {
throw new IllegalAccessError("Utility class");
}
/**
* Identify whether the classloader that loaded this class is the classloader from which {@link Jenkins} has been
* started.
*
* @return {@code true} if this is the classloader on the JVM that started {@link Jenkins} otherwise {@code false}
*/
public static boolean isJenkinsJVM() {
return jenkinsJVM;
}
/**
* Verify that the classloader that loaded this class is the classloader from which {@link Jenkins} has been
* started.
*
* @throws IllegalStateException if this is not the classloader on the JVM that started {@link Jenkins}.
*/
public static void checkJenkinsJVM() {
if (!isJenkinsJVM()) {
throw new IllegalStateException("Not running on the Jenkins master JVM");
}
}
/**
* Verify that the classloader that loaded this class is not the classloader from which {@link Jenkins} has been
* started.
*
* @throws IllegalStateException if this is the classloader on the JVM that started {@link Jenkins}.
*/
public static void checkNotJenkinsJVM() {
if (isJenkinsJVM()) {
throw new IllegalStateException("Running on the Jenkins master JVM");
}
}
/**
* Used by {@link WebAppMain#contextInitialized(ServletContextEvent)} and
* {@link WebAppMain#contextDestroyed(ServletContextEvent)} to identify the classloader and JVM which started
* {@link Jenkins}
*
* @param jenkinsJVM {@code true} if and only if this is the classloader and JVM that started {@link Jenkins}.
*/
@Restricted(NoExternalUse.class)
protected static void setJenkinsJVM(boolean jenkinsJVM) {
JenkinsJVM.jenkinsJVM = jenkinsJVM;
}
}