opentelemetry-java-instrume.../javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/HelperResources.java

45 lines
1.4 KiB
Java

/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.bootstrap;
import static io.opentelemetry.javaagent.instrumentation.api.WeakMap.Provider.newWeakMap;
import io.opentelemetry.javaagent.instrumentation.api.WeakMap;
import java.net.URL;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* A holder of resources needed by instrumentation. We store them in the bootstrap classloader so
* instrumentation can store from the agent classloader and apps can retrieve from the app
* classloader.
*/
public final class HelperResources {
private static final WeakMap<ClassLoader, Map<String, URL>> RESOURCES = newWeakMap();
/** Registers the {@code payload} to be available to instrumentation at {@code path}. */
public static void register(ClassLoader classLoader, String path, URL url) {
RESOURCES.putIfAbsent(classLoader, new ConcurrentHashMap<String, URL>());
RESOURCES.get(classLoader).put(path, url);
}
/**
* Returns a {@link URL} that can be used to retrieve the content of the resource at {@code path},
* or {@code null} if no resource could be found at {@code path}.
*/
public static URL load(ClassLoader classLoader, String path) {
Map<String, URL> map = RESOURCES.get(classLoader);
if (map == null) {
return null;
}
return map.get(path);
}
private HelperResources() {}
}