|
296 | 296 | import org.flowable.job.service.impl.asyncexecutor.ExecuteAsyncRunnableFactory; |
297 | 297 | import org.flowable.job.service.impl.asyncexecutor.FailedJobCommandFactory; |
298 | 298 | import org.flowable.job.service.impl.asyncexecutor.JobManager; |
| 299 | +import org.flowable.common.engine.impl.cfg.mail.DefaultMailClientProvider; |
299 | 300 | import org.flowable.mail.common.api.client.FlowableMailClient; |
| 301 | +import org.flowable.mail.common.api.client.MailClientProvider; |
300 | 302 | import org.flowable.task.service.InternalTaskAssignmentManager; |
301 | 303 | import org.flowable.task.service.InternalTaskVariableScopeResolver; |
302 | 304 | import org.flowable.task.service.TaskPostProcessor; |
@@ -526,11 +528,10 @@ public class CmmnEngineConfiguration extends AbstractBuildableEngineConfiguratio |
526 | 528 | protected HttpClientConfig httpClientConfig = new HttpClientConfig(); |
527 | 529 |
|
528 | 530 | // Email |
529 | | - protected FlowableMailClient defaultMailClient; |
| 531 | + protected MailClientProvider mailClientProvider = new DefaultMailClientProvider(); |
530 | 532 | protected MailServerInfo defaultMailServer; |
531 | 533 | protected String mailSessionJndi; |
532 | 534 | protected Map<String, MailServerInfo> mailServers = new HashMap<>(); |
533 | | - protected Map<String, FlowableMailClient> mailClients = new HashMap<>(); |
534 | 535 | protected Map<String, String> mailSessionsJndi = new HashMap<>(); |
535 | 536 |
|
536 | 537 | // Async executor |
@@ -929,24 +930,31 @@ public void initExpressionManager() { |
929 | 930 | } |
930 | 931 |
|
931 | 932 | public void initMailClients() { |
932 | | - if (defaultMailClient == null) { |
| 933 | + if (mailClientProvider == null) { |
| 934 | + mailClientProvider = new DefaultMailClientProvider(); |
| 935 | + } |
| 936 | + if (!(mailClientProvider instanceof DefaultMailClientProvider defaultMailClientProvider)) { |
| 937 | + return; // custom provider handles resolution at runtime |
| 938 | + } |
| 939 | + if (defaultMailClientProvider.getDefaultMailClient() == null) { |
933 | 940 | String sessionJndi = getMailSessionJndi(); |
934 | 941 | if (sessionJndi != null) { |
935 | | - defaultMailClient = FlowableMailClientCreator.createSessionClient(sessionJndi, getDefaultMailServer()); |
| 942 | + defaultMailClientProvider.setDefaultMailClient(FlowableMailClientCreator.createSessionClient(sessionJndi, getDefaultMailServer())); |
936 | 943 | } else { |
937 | 944 | MailServerInfo mailServer = getDefaultMailServer(); |
938 | 945 | String host = mailServer.getMailServerHost(); |
939 | 946 | if (host == null) { |
940 | 947 | throw new FlowableException("no SMTP host is configured for the default mail server"); |
941 | 948 | } |
942 | | - defaultMailClient = FlowableMailClientCreator.createHostClient(host, mailServer); |
| 949 | + defaultMailClientProvider.setDefaultMailClient(FlowableMailClientCreator.createHostClient(host, mailServer)); |
943 | 950 | } |
944 | 951 | } |
945 | 952 |
|
946 | 953 | Collection<String> tenantIds = new HashSet<>(mailSessionsJndi.keySet()); |
947 | 954 | tenantIds.addAll(mailServers.keySet()); |
948 | 955 |
|
949 | 956 | if (!tenantIds.isEmpty()) { |
| 957 | + Map<String, FlowableMailClient> mailClients = defaultMailClientProvider.getMailClients(); |
950 | 958 | MailServerInfo defaultMailServer = getDefaultMailServer(); |
951 | 959 | for (String tenantId : tenantIds) { |
952 | 960 | if (mailClients.containsKey(tenantId)) { |
@@ -4078,12 +4086,34 @@ public CmmnEngineConfiguration setHttpClientConfig(HttpClientConfig httpClientCo |
4078 | 4086 | return this; |
4079 | 4087 | } |
4080 | 4088 |
|
| 4089 | + public MailClientProvider getMailClientProvider() { |
| 4090 | + return mailClientProvider; |
| 4091 | + } |
| 4092 | + |
| 4093 | + public CmmnEngineConfiguration setMailClientProvider(MailClientProvider mailClientProvider) { |
| 4094 | + this.mailClientProvider = mailClientProvider; |
| 4095 | + return this; |
| 4096 | + } |
| 4097 | + |
| 4098 | + /** |
| 4099 | + * @deprecated use {@link #getMailClientProvider()} and {@link MailClientProvider#getMailClient(String)} with tenantId {@code null} instead |
| 4100 | + */ |
| 4101 | + @Deprecated |
4081 | 4102 | public FlowableMailClient getDefaultMailClient() { |
4082 | | - return defaultMailClient; |
| 4103 | + return mailClientProvider.getMailClient(null); |
4083 | 4104 | } |
4084 | 4105 |
|
| 4106 | + /** |
| 4107 | + * @deprecated use {@link #setMailClientProvider(MailClientProvider)} instead |
| 4108 | + */ |
| 4109 | + @Deprecated |
4085 | 4110 | public CmmnEngineConfiguration setDefaultMailClient(FlowableMailClient defaultMailClient) { |
4086 | | - this.defaultMailClient = defaultMailClient; |
| 4111 | + if (mailClientProvider instanceof DefaultMailClientProvider defaultProvider) { |
| 4112 | + defaultProvider.setDefaultMailClient(defaultMailClient); |
| 4113 | + } else { |
| 4114 | + throw new FlowableException("The mail client provider is not an instance of DefaultMailClientProvider. " |
| 4115 | + + "Use setMailClientProvider instead."); |
| 4116 | + } |
4087 | 4117 | return this; |
4088 | 4118 | } |
4089 | 4119 |
|
@@ -4219,17 +4249,37 @@ public MailServerInfo getMailServer(String tenantId) { |
4219 | 4249 | return mailServers.get(tenantId); |
4220 | 4250 | } |
4221 | 4251 |
|
| 4252 | + /** |
| 4253 | + * @deprecated use {@link #getMailClientProvider()} instead |
| 4254 | + */ |
| 4255 | + @Deprecated |
4222 | 4256 | public Map<String, FlowableMailClient> getMailClients() { |
4223 | | - return mailClients; |
| 4257 | + if (mailClientProvider instanceof DefaultMailClientProvider defaultProvider) { |
| 4258 | + return defaultProvider.getMailClients(); |
| 4259 | + } |
| 4260 | + return Collections.emptyMap(); |
4224 | 4261 | } |
4225 | 4262 |
|
| 4263 | + /** |
| 4264 | + * @deprecated use {@link #setMailClientProvider(MailClientProvider)} instead |
| 4265 | + */ |
| 4266 | + @Deprecated |
4226 | 4267 | public CmmnEngineConfiguration setMailClients(Map<String, FlowableMailClient> mailClients) { |
4227 | | - this.mailClients = mailClients; |
| 4268 | + if (this.mailClientProvider instanceof DefaultMailClientProvider defaultProvider) { |
| 4269 | + defaultProvider.getMailClients().putAll(mailClients); |
| 4270 | + } else { |
| 4271 | + throw new FlowableException("The mail client provider is not an instance of DefaultMailClientProvider. " |
| 4272 | + + "Use setMailClientProvider instead."); |
| 4273 | + } |
4228 | 4274 | return this; |
4229 | 4275 | } |
4230 | 4276 |
|
| 4277 | + /** |
| 4278 | + * @deprecated use {@link #getMailClientProvider().getMailClient(String)} instead |
| 4279 | + */ |
| 4280 | + @Deprecated |
4231 | 4281 | public FlowableMailClient getMailClient(String tenantId) { |
4232 | | - return mailClients.get(tenantId); |
| 4282 | + return mailClientProvider.getMailClient(tenantId); |
4233 | 4283 | } |
4234 | 4284 |
|
4235 | 4285 | public Map<String, String> getMailSessionsJndi() { |
|
0 commit comments