Skip to content

Commit 94fbdaf

Browse files
aliskugemini-code-assist[bot]triskill
authored
#6 - otel cannot be disabled - otel enabled or disabled is not driven by zenbpm.otelEnabled but by otel.sdk.disabled (#7)
* #6 - otel cannot be disabled - otel enabled or disabled is not driven by zenbpm.otelEnabled but by otel.sdk.disabled - Increase Spring version to 3.5.13 - Increase Java version from 8 to 21 * Update zenbpm-spring-boot-starter/src/main/java/org/zenbpm/ZenbpmClientAutoConfiguration.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * Update zenbpm-spring-boot-starter/src/main/java/org/zenbpm/grpc/ZenbpmJobWorkerManager.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * #6 - otel cannot be disabled - revert to original JDK8 and Spring 2.7.x versions * remove PostConstruct due to Springboot cross-version compatibility --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: triskill <borbot@email.cz>
1 parent c69c074 commit 94fbdaf

6 files changed

Lines changed: 60 additions & 58 deletions

File tree

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
55
## Features
66

7+
* Project uses JDK 8+ and Spring Boot 2.7+ to support legacy systems, but can be easily adjusted to the newest JDK and Spring versions (see pom.xml).
78
* Spring Boot auto-configuration (drop-in starter)
89
* REST client (`ApiClient` + typed APIs generated from OpenAPI)
910
* gRPC job workers via `@JobWorker` and ZenbpmJobWorkerManager
@@ -47,7 +48,8 @@ zenbpm:
4748
grpcPlaintext: true
4849
grpcLoggingEnabled: true
4950
jobWorkerEnabled: true
50-
otelEnabled: true
51+
52+
otel.sdk.disabled: true
5153

5254
logging:
5355
level:

zenbpm-spring-boot-starter/pom.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
<properties>
1515
<spring-boot.version>2.7.18</spring-boot.version>
16-
<spring-boot-configuration-processor.version>2.7.18</spring-boot-configuration-processor.version>
1716
<maven.compiler.source>${java.version}</maven.compiler.source>
1817
<maven.compiler.target>${java.version}</maven.compiler.target>
1918
<opentelemetry.version>1.58.0</opentelemetry.version>
@@ -35,7 +34,7 @@
3534
<dependency>
3635
<groupId>org.springframework.boot</groupId>
3736
<artifactId>spring-boot-configuration-processor</artifactId>
38-
<version>${spring-boot-configuration-processor.version}</version>
37+
<version>${spring-boot.version}</version>
3938
<optional>true</optional>
4039
</dependency>
4140
<dependency>

zenbpm-spring-boot-starter/src/main/java/org/zenbpm/ZenbpmClientAutoConfiguration.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,30 @@
22

33
import io.opentelemetry.api.OpenTelemetry;
44
import org.springframework.beans.factory.ObjectProvider;
5+
import org.springframework.beans.factory.annotation.Value;
56
import org.springframework.boot.autoconfigure.AutoConfiguration;
6-
import org.springframework.context.annotation.Bean;
77
import org.springframework.boot.context.properties.EnableConfigurationProperties;
8+
import org.springframework.context.annotation.Bean;
89
import org.zenbpm.grpc.ZenbpmJobWorkerManager;
910
import org.zenbpm.rest.ZenbpmClientService;
1011

1112
@AutoConfiguration
1213
@EnableConfigurationProperties(ZenbpmClientProperties.class)
1314
public class ZenbpmClientAutoConfiguration {
1415

16+
private final boolean isOtelDisabled;
17+
18+
public ZenbpmClientAutoConfiguration(@Value("${otel.sdk.disabled:false}") boolean isOtelDisabled) {
19+
this.isOtelDisabled = isOtelDisabled;
20+
}
21+
1522
@Bean
1623
public ZenbpmClientService zenbpmApiClient(ZenbpmClientProperties props, ObjectProvider<OpenTelemetry> openTelemetry) {
17-
return new ZenbpmClientService(props, openTelemetry);
24+
return new ZenbpmClientService(props, openTelemetry, isOtelDisabled);
1825
}
1926

2027
@Bean
21-
ZenbpmJobWorkerManager zenbpmJobWorkerManager(ZenbpmClientProperties props, ObjectProvider<OpenTelemetry> openTelemetry) {
22-
return new ZenbpmJobWorkerManager(props, openTelemetry);
28+
public ZenbpmJobWorkerManager zenbpmJobWorkerManager(ZenbpmClientProperties props, ObjectProvider<OpenTelemetry> openTelemetry) {
29+
return new ZenbpmJobWorkerManager(props, openTelemetry, isOtelDisabled);
2330
}
2431
}

zenbpm-spring-boot-starter/src/main/java/org/zenbpm/ZenbpmClientProperties.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ public class ZenbpmClientProperties {
1616
private boolean grpcLoggingEnabled = true;
1717
private boolean jobWorkerEnabled = true;
1818

19-
// opentelemetry
20-
private boolean otelEnabled = true;
21-
2219
public String getRestUrl() {
2320
return restUrl;
2421
}
@@ -75,11 +72,4 @@ public void setJobWorkerEnabled(boolean jobWorkerEnabled) {
7572
this.jobWorkerEnabled = jobWorkerEnabled;
7673
}
7774

78-
public boolean isOtelEnabled() {
79-
return otelEnabled;
80-
}
81-
82-
public void setOtelEnabled(boolean otelEnabled) {
83-
this.otelEnabled = otelEnabled;
84-
}
8575
}

zenbpm-spring-boot-starter/src/main/java/org/zenbpm/grpc/ZenbpmJobWorkerManager.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import io.opentelemetry.api.trace.Tracer;
1515
import io.opentelemetry.context.Scope;
1616
import org.jetbrains.annotations.NotNull;
17+
import org.slf4j.Logger;
18+
import org.slf4j.LoggerFactory;
1719
import org.slf4j.MDC;
1820
import org.springframework.beans.BeansException;
1921
import org.springframework.beans.factory.ObjectProvider;
@@ -30,15 +32,13 @@
3032
import java.util.concurrent.TimeUnit;
3133
import java.util.concurrent.atomic.AtomicBoolean;
3234

33-
import org.slf4j.Logger;
34-
import org.slf4j.LoggerFactory;
35-
3635
public class ZenbpmJobWorkerManager implements BeanPostProcessor, SmartLifecycle {
3736

3837
private static final Logger log = LoggerFactory.getLogger(ZenbpmJobWorkerManager.class);
3938
private static final TypeReference<HashMap<String,Object>> MAP_TYPE_REF = new TypeReference<HashMap<String,Object>>() {};
4039
private final ZenbpmClientProperties properties;
4140
private final ObjectProvider<OpenTelemetry> openTelemetry;
41+
private final boolean isOtelDisabled;
4242

4343
private final Map<String, Handler> handlers = new ConcurrentHashMap<>();
4444

@@ -49,9 +49,14 @@ public class ZenbpmJobWorkerManager implements BeanPostProcessor, SmartLifecycle
4949

5050
private final ObjectMapper objectMapper = new ObjectMapper();
5151

52-
public ZenbpmJobWorkerManager(ZenbpmClientProperties properties, ObjectProvider<OpenTelemetry> openTelemetry) {
52+
public ZenbpmJobWorkerManager(
53+
ZenbpmClientProperties properties,
54+
ObjectProvider<OpenTelemetry> openTelemetry,
55+
boolean isOtelDisabled
56+
) {
5357
this.properties = properties;
5458
this.openTelemetry = openTelemetry;
59+
this.isOtelDisabled = isOtelDisabled;
5560
}
5661

5762
@Override
@@ -136,7 +141,7 @@ private void dispatchJob(Zenbpm.WaitingJob job) {
136141
return;
137142
}
138143

139-
OpenTelemetry otel = properties.isOtelEnabled() ? openTelemetry.getIfAvailable() : null;
144+
OpenTelemetry otel = !isOtelDisabled ? openTelemetry.getIfAvailable() : null;
140145
Tracer tracer = (otel != null) ? otel.getTracer("org.zenbpm.grpc") : null;
141146

142147
Span span = (tracer != null)
@@ -165,8 +170,7 @@ private void dispatchJob(Zenbpm.WaitingJob job) {
165170
JobContext context = new JobContext(job, variables);
166171
result = handler.method.invoke(handler.bean, context);
167172
} else if (paramTypes.length == 1 && paramTypes[0].isAssignableFrom(Map.class)) {
168-
TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {};
169-
Map<String, Object> variables = objectMapper.readValue(job.getVariables().newInput(), typeRef);
173+
Map<String, Object> variables = objectMapper.readValue(job.getVariables().newInput(), MAP_TYPE_REF);
170174
result = handler.method.invoke(handler.bean, variables);
171175
} else {
172176
throw new IllegalArgumentException("@JobWorker method must have 0 params or a single WaitingJob/JobContext/Map<String, Object> param");

zenbpm-spring-boot-starter/src/main/java/org/zenbpm/rest/ZenbpmClientService.java

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,59 +6,59 @@
66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
88
import org.springframework.beans.factory.ObjectProvider;
9-
import org.springframework.stereotype.Service;
109
import org.zenbpm.ZenbpmClientProperties;
1110
import org.zenbpm.client.ApiClient;
1211

13-
import javax.annotation.PostConstruct;
14-
15-
@Service
1612
public class ZenbpmClientService {
1713

1814
private static final Logger log = LoggerFactory.getLogger(ZenbpmClientService.class);
1915

2016
private final ZenbpmClientProperties properties;
2117
private final ObjectProvider<OpenTelemetry> openTelemetry;
18+
private final boolean isOtelDisabled;
2219

2320
private ApiClient apiClient;
2421

25-
public ZenbpmClientService(ZenbpmClientProperties properties, ObjectProvider<OpenTelemetry> openTelemetry) {
26-
this.properties = properties;
27-
this.openTelemetry = openTelemetry;
28-
}
29-
30-
@PostConstruct
31-
private void init() {
22+
public ApiClient getApiClient() {
3223
initApiClient();
24+
return apiClient;
3325
}
3426

35-
public ApiClient getApiClient() {
36-
return apiClient;
27+
public ZenbpmClientService(
28+
ZenbpmClientProperties properties,
29+
ObjectProvider<OpenTelemetry> openTelemetry,
30+
boolean isOtelDisabled
31+
) {
32+
this.properties = properties;
33+
this.openTelemetry = openTelemetry;
34+
this.isOtelDisabled = isOtelDisabled;
3735
}
3836

3937
private void initApiClient() {
40-
apiClient = new ApiClient();
41-
apiClient.setBasePath(properties.getRestUrl());
42-
43-
OkHttpClient.Builder builder = apiClient.getHttpClient().newBuilder();
44-
45-
OpenTelemetry otel = openTelemetry.getIfAvailable();
46-
if (properties.isOtelEnabled() && otel != null) {
47-
builder.addInterceptor(new ZenbpmOkHttpOtelInterceptor(otel));
48-
}
49-
50-
if (properties.isRestLoggingEnabled()) {
51-
HttpLoggingInterceptor.Logger slf4jLogger = this::logHttpMessage;
52-
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(slf4jLogger);
53-
interceptor.setLevel(
54-
log.isTraceEnabled()
55-
? HttpLoggingInterceptor.Level.BODY
56-
: HttpLoggingInterceptor.Level.BASIC
57-
);
58-
builder.addInterceptor(interceptor);
38+
if (apiClient == null) {
39+
apiClient = new ApiClient();
40+
apiClient.setBasePath(properties.getRestUrl());
41+
42+
OkHttpClient.Builder builder = apiClient.getHttpClient().newBuilder();
43+
44+
OpenTelemetry otel = openTelemetry.getIfAvailable();
45+
if (!isOtelDisabled && otel != null) {
46+
builder.addInterceptor(new ZenbpmOkHttpOtelInterceptor(otel));
47+
}
48+
49+
if (properties.isRestLoggingEnabled()) {
50+
HttpLoggingInterceptor.Logger slf4jLogger = this::logHttpMessage;
51+
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(slf4jLogger);
52+
interceptor.setLevel(
53+
log.isTraceEnabled()
54+
? HttpLoggingInterceptor.Level.BODY
55+
: HttpLoggingInterceptor.Level.BASIC
56+
);
57+
builder.addInterceptor(interceptor);
58+
}
59+
60+
apiClient.setHttpClient(builder.build());
5961
}
60-
61-
apiClient.setHttpClient(builder.build());
6262
}
6363

6464
private void logHttpMessage(String message) {

0 commit comments

Comments
 (0)