All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.contrib.resourceproviders.CommonAppServersServiceNameDetector Maven / Gradle / Ivy

The newest version!
/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.contrib.resourceproviders;

import java.net.URL;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nullable;

/**
 * This class is just a factory that provides a ServiceNameDetector that knows how to find and parse
 * the most common application server configuration files.
 */
final class CommonAppServersServiceNameDetector {

  static ServiceNameDetector create() {
    return new DelegatingServiceNameDetector(detectors());
  }

  private CommonAppServersServiceNameDetector() {}

  private static List detectors() {
    ResourceLocator locator = new ResourceLocatorImpl();
    return Arrays.asList(
        detectorFor(new TomeeAppServer(locator)),
        detectorFor(new TomcatAppServer(locator)),
        detectorFor(new JettyAppServer(locator)),
        detectorFor(new LibertyAppService(locator)),
        detectorFor(new WildflyAppServer(locator)),
        detectorFor(new GlassfishAppServer(locator)),
        new WebSphereServiceNameDetector(new WebSphereAppServer(locator)));
  }

  private static AppServerServiceNameDetector detectorFor(AppServer appServer) {
    return new AppServerServiceNameDetector(appServer);
  }

  private static class ResourceLocatorImpl implements ResourceLocator {

    @Override
    @Nullable
    public Class findClass(String className) {
      try {
        return Class.forName(className, false, ClassLoader.getSystemClassLoader());
      } catch (ClassNotFoundException | LinkageError exception) {
        return null;
      }
    }

    @Override
    public URL getClassLocation(Class clazz) {
      return clazz.getProtectionDomain().getCodeSource().getLocation();
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy