Skip to content

Commit 0b8cb81

Browse files
Merge pull request #31460 from mkouba/scheduler-new-devui
Scheduler - new Dev UI - first iteration
2 parents 41921fa + 662458a commit 0b8cb81

File tree

13 files changed

+647
-21
lines changed

13 files changed

+647
-21
lines changed

extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
import io.quarkus.scheduler.common.runtime.AbstractJobDefinition;
7575
import io.quarkus.scheduler.common.runtime.DefaultInvoker;
7676
import io.quarkus.scheduler.common.runtime.ScheduledInvoker;
77-
import io.quarkus.scheduler.common.runtime.ScheduledMethodMetadata;
77+
import io.quarkus.scheduler.common.runtime.ScheduledMethod;
7878
import io.quarkus.scheduler.common.runtime.SchedulerContext;
7979
import io.quarkus.scheduler.common.runtime.SyntheticScheduled;
8080
import io.quarkus.scheduler.common.runtime.util.SchedulerUtils;
@@ -183,7 +183,7 @@ public QuartzSchedulerImpl(SchedulerContext context, QuartzSupport quartzSupport
183183
if (transaction != null) {
184184
transaction.begin();
185185
}
186-
for (ScheduledMethodMetadata method : context.getScheduledMethods()) {
186+
for (ScheduledMethod method : context.getScheduledMethods()) {
187187
int nameSequence = 0;
188188

189189
for (Scheduled scheduled : method.getSchedules()) {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.quarkus.scheduler.common.runtime;
2+
3+
import java.util.List;
4+
import java.util.Objects;
5+
6+
import io.quarkus.scheduler.Scheduled;
7+
8+
public final class ImmutableScheduledMethod implements ScheduledMethod {
9+
10+
private final String invokerClassName;
11+
private final String declaringClassName;
12+
private final String methodName;
13+
private final List<Scheduled> schedules;
14+
15+
public ImmutableScheduledMethod(String invokerClassName, String declaringClassName, String methodName,
16+
List<Scheduled> schedules) {
17+
this.invokerClassName = Objects.requireNonNull(invokerClassName);
18+
this.declaringClassName = Objects.requireNonNull(declaringClassName);
19+
this.methodName = Objects.requireNonNull(methodName);
20+
this.schedules = List.copyOf(schedules);
21+
}
22+
23+
public String getInvokerClassName() {
24+
return invokerClassName;
25+
}
26+
27+
public String getDeclaringClassName() {
28+
return declaringClassName;
29+
}
30+
31+
public String getMethodName() {
32+
return methodName;
33+
}
34+
35+
public List<Scheduled> getSchedules() {
36+
return schedules;
37+
}
38+
39+
}
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
import io.quarkus.scheduler.Scheduled;
66

7-
public class ScheduledMethodMetadata {
7+
// This class is mutable so that it can be serialized in a recorder method
8+
public class MutableScheduledMethod implements ScheduledMethod {
89

910
private String invokerClassName;
1011
private String declaringClassName;
@@ -19,10 +20,6 @@ public void setInvokerClassName(String invokerClassName) {
1920
this.invokerClassName = invokerClassName;
2021
}
2122

22-
public String getMethodDescription() {
23-
return declaringClassName + "#" + methodName;
24-
}
25-
2623
public String getDeclaringClassName() {
2724
return declaringClassName;
2825
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.quarkus.scheduler.common.runtime;
2+
3+
import java.util.List;
4+
5+
import io.quarkus.scheduler.Scheduled;
6+
7+
/**
8+
* Scheduled method metadata.
9+
*
10+
*/
11+
public interface ScheduledMethod {
12+
13+
String getInvokerClassName();
14+
15+
String getDeclaringClassName();
16+
17+
String getMethodName();
18+
19+
List<Scheduled> getSchedules();
20+
21+
default String getMethodDescription() {
22+
return getDeclaringClassName() + "#" + getMethodName();
23+
}
24+
25+
}

extensions/scheduler/common/src/main/java/io/quarkus/scheduler/common/runtime/SchedulerContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public interface SchedulerContext {
99

1010
CronType getCronType();
1111

12-
List<ScheduledMethodMetadata> getScheduledMethods();
12+
List<ScheduledMethod> getScheduledMethods();
1313

1414
@SuppressWarnings("unchecked")
1515
default ScheduledInvoker createInvoker(String invokerClassName) {

extensions/scheduler/deployment/src/main/java/io/quarkus/scheduler/deployment/SchedulerProcessor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
import io.quarkus.scheduler.ScheduledExecution;
8484
import io.quarkus.scheduler.Scheduler;
8585
import io.quarkus.scheduler.common.runtime.DefaultInvoker;
86-
import io.quarkus.scheduler.common.runtime.ScheduledMethodMetadata;
86+
import io.quarkus.scheduler.common.runtime.MutableScheduledMethod;
8787
import io.quarkus.scheduler.common.runtime.SchedulerContext;
8888
import io.quarkus.scheduler.common.runtime.util.SchedulerUtils;
8989
import io.quarkus.scheduler.runtime.SchedulerConfig;
@@ -279,7 +279,7 @@ public FeatureBuildItem build(SchedulerConfig config, BuildProducer<SyntheticBea
279279
BuildProducer<GeneratedClassBuildItem> generatedClasses, BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
280280
AnnotationProxyBuildItem annotationProxy) {
281281

282-
List<ScheduledMethodMetadata> scheduledMetadata = new ArrayList<>();
282+
List<MutableScheduledMethod> scheduledMetadata = new ArrayList<>();
283283
ClassOutput classOutput = new GeneratedClassGizmoAdaptor(generatedClasses, new Function<String, String>() {
284284
@Override
285285
public String apply(String name) {
@@ -296,9 +296,9 @@ public String apply(String name) {
296296
});
297297

298298
for (ScheduledBusinessMethodItem scheduledMethod : scheduledMethods) {
299-
ScheduledMethodMetadata metadata = new ScheduledMethodMetadata();
299+
MutableScheduledMethod metadata = new MutableScheduledMethod();
300300
String invokerClass = generateInvoker(scheduledMethod, classOutput);
301-
reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, invokerClass));
301+
reflectiveClass.produce(ReflectiveClassBuildItem.builder(invokerClass).constructors().methods().fields().build());
302302
metadata.setInvokerClassName(invokerClass);
303303
List<Scheduled> schedules = new ArrayList<>();
304304
for (AnnotationInstance scheduled : scheduledMethod.getSchedules()) {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.quarkus.scheduler.deployment.devui;
2+
3+
import java.util.List;
4+
5+
import io.quarkus.deployment.IsDevelopment;
6+
import io.quarkus.deployment.annotations.BuildStep;
7+
import io.quarkus.devui.spi.JsonRPCProvidersBuildItem;
8+
import io.quarkus.devui.spi.page.CardPageBuildItem;
9+
import io.quarkus.devui.spi.page.Page;
10+
import io.quarkus.scheduler.deployment.ScheduledBusinessMethodItem;
11+
import io.quarkus.scheduler.runtime.devui.SchedulerJsonRPCService;
12+
13+
public class SchedulerDevUIProcessor {
14+
15+
@BuildStep(onlyIf = IsDevelopment.class)
16+
CardPageBuildItem page(List<ScheduledBusinessMethodItem> scheduledMethods) {
17+
18+
CardPageBuildItem pageBuildItem = new CardPageBuildItem("Scheduler");
19+
20+
pageBuildItem.addPage(Page.webComponentPageBuilder()
21+
.icon("font-awesome-solid:clock")
22+
.componentLink("qwc-scheduler-scheduled-methods.js")
23+
.staticLabel(String.valueOf(scheduledMethods.size())));
24+
25+
return pageBuildItem;
26+
}
27+
28+
@BuildStep(onlyIf = IsDevelopment.class)
29+
JsonRPCProvidersBuildItem rpcProvider() {
30+
return new JsonRPCProvidersBuildItem("Scheduler", SchedulerJsonRPCService.class);
31+
}
32+
33+
}

0 commit comments

Comments
 (0)