Skip to content

Commit 2e7a394

Browse files
authored
fix(multiple database): added exclusive description of the subticket (#2762)
* added description of the subticket * Convert the description from I18N to L10N * modify the format * Remove redundant code * Modified according to pr requirements * add getLocalMessage method * Modify the English translation according to the copy requirements * Modify the English translation according to the copy requirements
1 parent 8f4b930 commit 2e7a394

11 files changed

Lines changed: 127 additions & 26 deletions

File tree

server/integration-test/src/test/java/com/oceanbase/odc/service/notification/helper/MessageTemplateProcessorTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,36 @@ public void testReplaceVariables_VariableNotExists_ReplaceEmptyString() {
6161

6262
Assert.assertEquals(expected, actual);
6363
}
64+
65+
@Test
66+
public void testGetLocalMessage_NullLocale_ReturnTemplate() {
67+
String template = "fake template";
68+
String message = MessageTemplateProcessor.getLocalMessage(null, template);
69+
Assert.assertEquals(template, message);
70+
}
71+
72+
@Test
73+
public void testGetLocalMessage_VariousLocale_Success() {
74+
Locale locale1 = new Locale("en", "US");
75+
String template1 = "${com.oceanbase.odc.builtin-resource.collaboration.environment.dev.name}";
76+
String message1 = MessageTemplateProcessor.getLocalMessage(locale1, template1);
77+
Assert.assertEquals("dev", message1);
78+
Locale locale2 = new Locale("zh", "TW");
79+
String template2 = "${com.oceanbase.odc.builtin-resource.collaboration.environment.dev.name}";
80+
String message2 = MessageTemplateProcessor.getLocalMessage(locale2, template2);
81+
Assert.assertEquals("開發", message2);
82+
Locale locale3 = new Locale("zh", "CN");
83+
String template3 = "${com.oceanbase.odc.builtin-resource.collaboration.environment.dev.name}";
84+
String message3 = MessageTemplateProcessor.getLocalMessage(locale3, template3);
85+
Assert.assertEquals("开发", message3);
86+
}
87+
88+
@Test
89+
public void testGetLocalMessage_NullTemplate_ReturnNull() {
90+
Locale locale = new Locale("zh", "CN");
91+
String template = null;
92+
String message = MessageTemplateProcessor.getLocalMessage(locale, template);
93+
Assert.assertEquals(null, message);
94+
}
95+
6496
}

server/odc-common/src/main/java/com/oceanbase/odc/common/i18n/I18nOutputSerializer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
package com.oceanbase.odc.common.i18n;
1717

1818
import java.io.IOException;
19-
import java.util.HashMap;
2019
import java.util.Locale;
2120
import java.util.Map;
21+
import java.util.concurrent.ConcurrentHashMap;
2222
import java.util.regex.Matcher;
2323
import java.util.regex.Pattern;
2424

@@ -31,7 +31,7 @@
3131

3232
public class I18nOutputSerializer extends JsonSerializer<String> {
3333
private static final Pattern I18N_RESOURCE_PATTERN = Pattern.compile("\\$\\{([^{^}]*)\\}");
34-
private static final Map<Locale, Map<String, String>> MESSAGES_MAP = new HashMap<>();
34+
private static final Map<Locale, Map<String, String>> MESSAGES_MAP = new ConcurrentHashMap<>();
3535

3636
@Override
3737
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
@@ -49,9 +49,8 @@ protected String convertString(String resource) {
4949
if (!matcher.find()) {
5050
return resource;
5151
}
52-
5352
Locale currentLocale = LocaleContextHolder.getLocale();
54-
MESSAGES_MAP.putIfAbsent(currentLocale, new HashMap<>());
53+
MESSAGES_MAP.putIfAbsent(currentLocale, new ConcurrentHashMap<>());
5554
int cursor = 0;
5655
while (matcher.find(cursor)) {
5756
String key = matcher.group();

server/odc-core/src/main/java/com/oceanbase/odc/core/shared/constant/Symbols.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ public enum Symbols implements Translatable {
3535
/**
3636
* ]
3737
*/
38-
RIGHT_BRACKET;
38+
RIGHT_BRACKET,
39+
/**
40+
* ,
41+
*/
42+
COMMA;
3943

4044
@Override
4145
public String code() {

server/odc-core/src/main/resources/i18n/BusinessMessages.properties

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ com.oceanbase.odc.ResourceType.ODC_NOTIFICATION_CHANNEL=Notification Channel
8080
com.oceanbase.odc.ResourceType.ODC_NOTIFICATION_POLICY=Notification Policy
8181
com.oceanbase.odc.ResourceType.ODC_NOTIFICATION_MESSAGE=Notification Message
8282
com.oceanbase.odc.ResourceType.ODC_STRUCTURE_COMPARISON_TASK=Structure Comparison Task
83-
com.oceanbase.odc.ResourceType.ODC_DATABASE_CHANGE_ORDER_TEMPLATE=Database change order template
83+
com.oceanbase.odc.ResourceType.ODC_DATABASE_CHANGE_ORDER_TEMPLATE=Database Change Order Template
8484

8585
#
8686
# Batch Import
@@ -109,6 +109,7 @@ com.oceanbase.odc.FieldName.USER_DESCRIPTION=Comment
109109

110110
com.oceanbase.odc.Symbols.LEFT_BRACKET=[
111111
com.oceanbase.odc.Symbols.RIGHT_BRACKET=]
112+
com.oceanbase.odc.Symbols.COMMA=,
112113

113114

114115
#
@@ -194,7 +195,7 @@ com.oceanbase.odc.AuditEventAction.EXECUTE_TASK=Execute task
194195
com.oceanbase.odc.AuditEventAction.APPROVE=Approve
195196
com.oceanbase.odc.AuditEventAction.REJECT=Reject
196197
com.oceanbase.odc.AuditEventAction.CREATE_ASYNC_TASK=Create database change task
197-
com.oceanbase.odc.AuditEventAction.CREATE_MULTIPLE_ASYNC_TASK=Create multiple database change task
198+
com.oceanbase.odc.AuditEventAction.CREATE_MULTIPLE_ASYNC_TASK=Create batch database change task
198199
com.oceanbase.odc.AuditEventAction.CREATE_MOCKDATA_TASK=Create mock data task
199200
com.oceanbase.odc.AuditEventAction.CREATE_IMPORT_TASK=Create import task
200201
com.oceanbase.odc.AuditEventAction.CREATE_EXPORT_TASK=Create export task
@@ -208,7 +209,7 @@ com.oceanbase.odc.AuditEventAction.CREATE_ONLINE_SCHEMA_CHANGE_TASK=Create onlin
208209
com.oceanbase.odc.AuditEventAction.CREATE_APPLY_PROJECT_PERMISSION_TASK=Create apply project permission task
209210
com.oceanbase.odc.AuditEventAction.CREATE_APPLY_DATABASE_PERMISSION_TASK=Create apply database permission task
210211
com.oceanbase.odc.AuditEventAction.STOP_ASYNC_TASK=Stop database change task
211-
com.oceanbase.odc.AuditEventAction.STOP_MULTIPLE_ASYNC_TASK=Stop multiple database change task
212+
com.oceanbase.odc.AuditEventAction.STOP_MULTIPLE_ASYNC_TASK=Stop batch database change task
212213
com.oceanbase.odc.AuditEventAction.STOP_MOCKDATA_TASK=Stop mock data task
213214
com.oceanbase.odc.AuditEventAction.STOP_IMPORT_TASK=Stop import task
214215
com.oceanbase.odc.AuditEventAction.STOP_EXPORT_TASK=Stop export task
@@ -221,7 +222,7 @@ com.oceanbase.odc.AuditEventAction.STOP_ONLINE_SCHEMA_CHANGE_TASK=Stop online sc
221222
com.oceanbase.odc.AuditEventAction.STOP_APPLY_PROJECT_PERMISSION_TASK=Stop apply project permission task
222223
com.oceanbase.odc.AuditEventAction.STOP_APPLY_DATABASE_PERMISSION_TASK=Stop apply database permission task
223224
com.oceanbase.odc.AuditEventAction.EXECUTE_ASYNC_TASK=Execute database change task
224-
com.oceanbase.odc.AuditEventAction.EXECUTE_MULTIPLE_ASYNC_TASK=Execute multiple database change task
225+
com.oceanbase.odc.AuditEventAction.EXECUTE_MULTIPLE_ASYNC_TASK=Execute batch database change task
225226
com.oceanbase.odc.AuditEventAction.EXECUTE_MOCKDATA_TASK=Execute mock data task
226227
com.oceanbase.odc.AuditEventAction.EXECUTE_IMPORT_TASK=Execute import task
227228
com.oceanbase.odc.AuditEventAction.EXECUTE_EXPORT_TASK=Execute export task
@@ -232,7 +233,7 @@ com.oceanbase.odc.AuditEventAction.EXECUTE_PARTITION_PLAN_TASK=Execute partition
232233
com.oceanbase.odc.AuditEventAction.EXECUTE_ALTER_SCHEDULE_TASK=Execute alter schedule task
233234
com.oceanbase.odc.AuditEventAction.EXECUTE_ONLINE_SCHEMA_CHANGE_TASK=Execute online schema change task
234235
com.oceanbase.odc.AuditEventAction.APPROVE_ASYNC_TASK=Approve database change task
235-
com.oceanbase.odc.AuditEventAction.APPROVE_MULTIPLE_ASYNC_TASK=Approve multiple database change task
236+
com.oceanbase.odc.AuditEventAction.APPROVE_MULTIPLE_ASYNC_TASK=Approve batch database change task
236237
com.oceanbase.odc.AuditEventAction.APPROVE_MOCKDATA_TASK=Approve mock data task
237238
com.oceanbase.odc.AuditEventAction.APPROVE_IMPORT_TASK=Approve import task
238239
com.oceanbase.odc.AuditEventAction.APPROVE_EXPORT_TASK=Approve export task
@@ -246,7 +247,7 @@ com.oceanbase.odc.AuditEventAction.APPROVE_ONLINE_SCHEMA_CHANGE_TASK=Approve onl
246247
com.oceanbase.odc.AuditEventAction.APPROVE_APPLY_PROJECT_PERMISSION_TASK=Approve apply project permission task
247248
com.oceanbase.odc.AuditEventAction.APPROVE_APPLY_DATABASE_PERMISSION_TASK=Approve apply database permission task
248249
com.oceanbase.odc.AuditEventAction.REJECT_ASYNC_TASK=Reject database change task
249-
com.oceanbase.odc.AuditEventAction.REJECT_MULTIPLE_ASYNC_TASK=Reject multiple database change task
250+
com.oceanbase.odc.AuditEventAction.REJECT_MULTIPLE_ASYNC_TASK=Reject batch database change task
250251
com.oceanbase.odc.AuditEventAction.REJECT_MOCKDATA_TASK=Reject mock data task
251252
com.oceanbase.odc.AuditEventAction.REJECT_IMPORT_TASK=Reject import task
252253
com.oceanbase.odc.AuditEventAction.REJECT_EXPORT_TASK=Reject export task
@@ -299,9 +300,9 @@ com.oceanbase.odc.AuditEventAction.BATCH_UPDATE_SENSITIVE_COLUMNS=Batch update s
299300
com.oceanbase.odc.AuditEventAction.BATCH_DELETE_SENSITIVE_COLUMNS=Batch delete sensitive columns
300301
com.oceanbase.odc.AuditEventAction.ENABLE_SENSITIVE_COLUMN=Enable sensitive column
301302
com.oceanbase.odc.AuditEventAction.DISABLE_SENSITIVE_COLUMN=Disable sensitive column
302-
com.oceanbase.odc.AuditEventAction.CREATE_DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE=Create database change changing order template
303-
com.oceanbase.odc.AuditEventAction.UPDATE_DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE=Update database change changing order template
304-
com.oceanbase.odc.AuditEventAction.DELETE_DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE=Delete database change changing order template
303+
com.oceanbase.odc.AuditEventAction.CREATE_DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE=Create database change order template
304+
com.oceanbase.odc.AuditEventAction.UPDATE_DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE=Update database change order template
305+
com.oceanbase.odc.AuditEventAction.DELETE_DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE=Delete database change order template
305306

306307

307308
#
@@ -317,7 +318,7 @@ com.oceanbase.odc.AuditEventType.RESOURCE_GROUP_MANAGEMENT=Resource group manage
317318
com.oceanbase.odc.AuditEventType.MEMBER_MANAGEMENT=Member management
318319
com.oceanbase.odc.AuditEventType.AUDIT_EVENT=Audit event
319320
com.oceanbase.odc.AuditEventType.FLOW_CONFIG=Flow config
320-
com.oceanbase.odc.AuditEventType.MULTIPLE_ASYNC=Multiple database Change
321+
com.oceanbase.odc.AuditEventType.MULTIPLE_ASYNC=Batch database change
321322
com.oceanbase.odc.AuditEventType.ASYNC=Database change
322323
com.oceanbase.odc.AuditEventType.MOCKDATA=Mock data
323324
com.oceanbase.odc.AuditEventType.IMPORT=Import
@@ -343,7 +344,7 @@ com.oceanbase.odc.AuditEventType.AUTOMATION_RULE_MANAGEMENT=Automation rule mana
343344
com.oceanbase.odc.AuditEventType.NOTIFICATION_MANAGEMENT=Notification management
344345
com.oceanbase.odc.AuditEventType.SENSITIVE_COLUMN_MANAGEMENT=Sensitive column management
345346
com.oceanbase.odc.AuditEventType.STRUCTURE_COMPARISON=Structure comparison
346-
com.oceanbase.odc.AuditEventType.DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE_MANAGEMENT=Database change changing order template management
347+
com.oceanbase.odc.AuditEventType.DATABASE_CHANGE_CHANGING_ORDER_TEMPLATE_MANAGEMENT=Database change order template management
347348

348349

349350
#
@@ -804,7 +805,7 @@ com.oceanbase.odc.OBInstanceType.ORACLE_TENANT=Oracle Tenant
804805
#
805806
# TaskType
806807
#
807-
com.oceanbase.odc.TaskType.MULTIPLE_ASYNC=Multiple Database Change
808+
com.oceanbase.odc.TaskType.MULTIPLE_ASYNC=Batch Database Change
808809
com.oceanbase.odc.TaskType.ASYNC=Database Change
809810
com.oceanbase.odc.TaskType.IMPORT=Import
810811
com.oceanbase.odc.TaskType.EXPORT=Export
@@ -850,6 +851,11 @@ com.oceanbase.odc.notification.channel-test-message=【ODC】Channel verificatio
850851
com.oceanbase.odc.builtin-resource.permission-apply.project.description=Requesting [{1}] permissions for project [{0}]
851852
com.oceanbase.odc.builtin-resource.permission-apply.database.description=Requesting [{0}] permissions for databases
852853

854+
#
855+
# Multiple Async
856+
#
857+
com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description=[{0}]batch database change {1} batch no.{2} {3}.{4}
858+
853859
#
854860
# ResourceRoleName
855861
#

server/odc-core/src/main/resources/i18n/BusinessMessages_zh_CN.properties

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ com.oceanbase.odc.FieldName.USER_DESCRIPTION=备注
109109

110110
com.oceanbase.odc.Symbols.LEFT_BRACKET=
111111
com.oceanbase.odc.Symbols.RIGHT_BRACKET=
112+
com.oceanbase.odc.Symbols.COMMA=
112113

113114
#
114115
# LimitMetric
@@ -787,6 +788,11 @@ com.oceanbase.odc.notification.channel-test-message=【ODC】消息通道验证
787788
com.oceanbase.odc.builtin-resource.permission-apply.project.description=申请项目【{0}】的【{1}】权限
788789
com.oceanbase.odc.builtin-resource.permission-apply.database.description=申请数据库的【{0}】权限
789790

791+
#
792+
# Multiple Async
793+
#
794+
com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description=【{0}】多库变更 {1} 第{2}批 {3}.{4}
795+
790796
#
791797
# ResourceRoleName
792798
#
@@ -811,5 +817,4 @@ com.oceanbase.odc.DatabasePermissionType.EXPORT=导出
811817
com.oceanbase.odc.PartitionPlanVariableKey.INTERVAL=间隔
812818
com.oceanbase.odc.PartitionPlanVariableKey.LAST_PARTITION_VALUE=最后一个分区规则对应位置表达式的值
813819
com.oceanbase.odc.partitionplan.TimeDataType=时间类型
814-
com.oceanbase.odc.partitionplan.NumberDataType=数字类型
815-
820+
com.oceanbase.odc.partitionplan.NumberDataType=数字类型

server/odc-core/src/main/resources/i18n/BusinessMessages_zh_TW.properties

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ com.oceanbase.odc.FieldName.USER_DESCRIPTION=備註
109109

110110
com.oceanbase.odc.Symbols.LEFT_BRACKET=
111111
com.oceanbase.odc.Symbols.RIGHT_BRACKET=
112+
com.oceanbase.odc.Symbols.COMMA=
112113

113114
#
114115
# LimitMetric
@@ -856,6 +857,11 @@ com.oceanbase.odc.notification.channel-test-message=【ODC】消息通道驗證
856857
com.oceanbase.odc.builtin-resource.permission-apply.project.description=申請項目【{0}】的【{1}】權限
857858
com.oceanbase.odc.builtin-resource.permission-apply.database.description=申請數據庫的【{0}】權限
858859

860+
#
861+
# Multiple Async
862+
#
863+
com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description=【{0}】多庫變更 {1} 第{2}批 {3}.{4}
864+
859865
#
860866
# ResourceRoleName
861867
#

server/odc-service/src/main/java/com/oceanbase/odc/service/databasechange/MultipleDatabaseChangePreprocessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@
1616
package com.oceanbase.odc.service.databasechange;
1717

1818
import java.util.List;
19+
import java.util.Locale;
1920
import java.util.Objects;
2021
import java.util.stream.Collectors;
2122

2223
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.context.i18n.LocaleContextHolder;
2325

2426
import com.oceanbase.odc.core.shared.PreConditions;
2527
import com.oceanbase.odc.core.shared.constant.ErrorCodes;
@@ -87,6 +89,9 @@ public void process(CreateFlowInstanceReq req) {
8789
req.setProjectId(parameters.getProjectId());
8890
req.setProjectName(project.getName());
8991
DescriptionGenerator.generateDescription(req);
92+
// Localization of father-son ticket is consistent
93+
Locale locale = LocaleContextHolder.getLocale();
94+
parameters.setLocale(locale);
9095
}
9196

9297
}

server/odc-service/src/main/java/com/oceanbase/odc/service/flow/task/MultipleDatabaseChangeRuntimeFlowableTask.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
import java.util.ArrayList;
1919
import java.util.List;
20+
import java.util.Locale;
2021
import java.util.Map;
22+
import java.util.function.Function;
2123
import java.util.stream.Collectors;
2224

2325
import org.flowable.engine.delegate.DelegateExecution;
@@ -26,6 +28,7 @@
2628
import org.springframework.data.domain.Page;
2729
import org.springframework.data.domain.Pageable;
2830

31+
import com.oceanbase.odc.common.i18n.I18n;
2932
import com.oceanbase.odc.common.json.JsonUtils;
3033
import com.oceanbase.odc.core.shared.constant.FlowStatus;
3134
import com.oceanbase.odc.core.shared.constant.TaskErrorStrategy;
@@ -49,6 +52,7 @@
4952
import com.oceanbase.odc.service.flow.util.FlowTaskUtil;
5053
import com.oceanbase.odc.service.iam.model.User;
5154
import com.oceanbase.odc.service.iam.util.SecurityContextUtils;
55+
import com.oceanbase.odc.service.notification.helper.MessageTemplateProcessor;
5256
import com.oceanbase.odc.service.task.TaskService;
5357

5458
import lombok.extern.slf4j.Slf4j;
@@ -134,6 +138,9 @@ protected Void start(Long taskId, TaskService taskService, DelegateExecution exe
134138
multipleDatabaseChangeParameters.getOrderedDatabaseIds().get(this.batchId);
135139
List<Long> flowInstanceIds = new ArrayList<>();
136140
this.taskCreator = FlowTaskUtil.getTaskCreator(execution);
141+
Map<Long, DatabaseChangeDatabase> map = multipleDatabaseChangeParameters.getDatabases().stream()
142+
.collect(Collectors.toMap(DatabaseChangeDatabase::getId, Function.identity()));
143+
Locale locale = multipleDatabaseChangeParameters.getLocale();
137144
for (Long batchDatabaseId : batchDatabaseIds) {
138145
CreateFlowInstanceReq createFlowInstanceReq = new CreateFlowInstanceReq();
139146
createFlowInstanceReq.setDatabaseId(batchDatabaseId);
@@ -142,6 +149,8 @@ protected Void start(Long taskId, TaskService taskService, DelegateExecution exe
142149
createFlowInstanceReq.setParentFlowInstanceId(FlowTaskUtil.getFlowInstanceId(execution));
143150
createFlowInstanceReq.setParameters(multipleDatabaseChangeParameters
144151
.convertIntoDatabaseChangeParameters(multipleDatabaseChangeParameters));
152+
createFlowInstanceReq.setDescription(
153+
generateDescription(locale, map.get(batchDatabaseId), getFlowInstanceId(), this.batchId));
145154
List<FlowInstanceDetailResp> individualFlowInstance = flowInstanceService.createWithoutApprovalNode(
146155
createFlowInstanceReq);
147156
flowInstanceIds.add(individualFlowInstance.get(0).getId());
@@ -324,4 +333,15 @@ public List<Class<? extends ExecutionListener>> getExecutionListenerClasses() {
324333
return null;
325334
}
326335

336+
private String generateDescription(Locale locale, DatabaseChangeDatabase database, Long flowInstanceId,
337+
Integer batchId) {
338+
String i18nKey = "com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description";
339+
String description = I18n.translate(
340+
i18nKey,
341+
new Object[] {database.getEnvironment().getName(),
342+
flowInstanceId, batchId + 1,
343+
database.getDataSource().getName(), database.getName()},
344+
locale);
345+
return MessageTemplateProcessor.getLocalMessage(locale, description);
346+
}
327347
}

server/odc-service/src/main/java/com/oceanbase/odc/service/flow/task/model/MultipleDatabaseChangeParameters.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.oceanbase.odc.service.flow.task.model;
1717

1818
import java.util.List;
19+
import java.util.Locale;
1920

2021
import com.oceanbase.odc.core.shared.constant.TaskErrorStrategy;
2122
import com.oceanbase.odc.service.databasechange.model.DatabaseChangeDatabase;
@@ -53,6 +54,10 @@ public class MultipleDatabaseChangeParameters extends DatabaseChangeParameters {
5354
* TimeoutMillis in multiple databases manual execution mode
5455
*/
5556
private Long manualTimeoutMillis = 1000 * 60 * 60 * 24 * 2L;// 2d for default
57+
/**
58+
* Use the same locale to localize parent and child ticket‘s description
59+
*/
60+
private Locale locale;
5661

5762
private FlowTaskExecutionStrategy flowTaskExecutionStrategy;
5863

0 commit comments

Comments
 (0)