Skip to content

Commit b5ec46f

Browse files
Adjust to OpenTelemetry Java Contrib 1.50.0
There was a breaking change making the CloudFoundryResourceProvider final. Therefore inheritance needed to be replaced with delegation. The new implementation uses a common lazy initialization pattern to ensure the correct instance is used. Signed-off-by: Karsten Schnitter <k.schnitter@sap.com>
1 parent 15f18aa commit b5ec46f

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

cf-java-logging-support-opentelemetry-agent-extension/src/main/java/com/sap/hcf/cf/logging/opentelemetry/agent/ext/CloudFoundryResourceProvider.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,36 @@
22

33
import com.sap.hcf.cf.logging.opentelemetry.agent.ext.attributes.CloudFoundryResourceCustomizer;
44
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
5+
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
56
import io.opentelemetry.sdk.resources.Resource;
67

7-
public class CloudFoundryResourceProvider
8-
extends io.opentelemetry.contrib.cloudfoundry.resources.CloudFoundryResourceProvider {
8+
import java.util.ServiceLoader;
9+
10+
public class CloudFoundryResourceProvider implements ResourceProvider {
911

1012
private final CloudFoundryResourceCustomizer customizer = new CloudFoundryResourceCustomizer();
1113

1214
@Override
1315
public Resource createResource(ConfigProperties configProperties) {
14-
Resource original = super.createResource(configProperties);
15-
return customizer.apply(original, configProperties);
16+
ResourceProvider delegate = getDelegate();
17+
return delegate == null
18+
? Resource.empty()
19+
: customizer.apply(delegate.createResource(configProperties), configProperties);
20+
}
21+
22+
private ResourceProvider getDelegate() {
23+
return DelegateHolder.INSTANCE;
24+
}
25+
26+
private static class DelegateHolder {
27+
static final ResourceProvider INSTANCE = loadCloudFoundryResourceProvider();
28+
29+
private static ResourceProvider loadCloudFoundryResourceProvider() {
30+
ServiceLoader<ResourceProvider> loader = ServiceLoader.load(ResourceProvider.class);
31+
return loader.stream().map(ServiceLoader.Provider::get)
32+
.filter(p -> p instanceof io.opentelemetry.contrib.cloudfoundry.resources.CloudFoundryResourceProvider)
33+
.findAny().orElse(null);
34+
}
35+
1636
}
1737
}

0 commit comments

Comments
 (0)