[FINERACT-1678] Spring Batch JMS support
This commit is contained in:
committed by
Arnold Gálovics
parent
02c19c963e
commit
340516c1a3
@@ -36,6 +36,8 @@ dependencies {
|
|||||||
'org.springframework.batch:spring-batch-integration',
|
'org.springframework.batch:spring-batch-integration',
|
||||||
'org.springframework.boot:spring-boot-starter-integration',
|
'org.springframework.boot:spring-boot-starter-integration',
|
||||||
'org.springframework.integration:spring-integration-event',
|
'org.springframework.integration:spring-integration-event',
|
||||||
|
'org.springframework.integration:spring-integration-jms',
|
||||||
|
|
||||||
|
|
||||||
'jakarta.ws.rs:jakarta.ws.rs-api',
|
'jakarta.ws.rs:jakarta.ws.rs-api',
|
||||||
'org.glassfish.jersey.media:jersey-media-multipart',
|
'org.glassfish.jersey.media:jersey-media-multipart',
|
||||||
|
|||||||
@@ -23,26 +23,12 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.integration.channel.DirectChannel;
|
import org.springframework.integration.channel.DirectChannel;
|
||||||
import org.springframework.integration.dsl.IntegrationFlow;
|
|
||||||
import org.springframework.integration.dsl.IntegrationFlows;
|
|
||||||
import org.springframework.integration.event.outbound.ApplicationEventPublishingMessageHandler;
|
|
||||||
import org.springframework.integration.handler.LoggingHandler;
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableBatchIntegration
|
@EnableBatchIntegration
|
||||||
@ConditionalOnProperty(value = "fineract.mode.batch-manager-enabled", havingValue = "true")
|
@ConditionalOnProperty(value = "fineract.mode.batch-manager-enabled", havingValue = "true")
|
||||||
public class COBManagerConfig {
|
public class COBManagerConfig {
|
||||||
|
|
||||||
@Bean
|
|
||||||
public IntegrationFlow outboundFlow() {
|
|
||||||
ApplicationEventPublishingMessageHandler handler = new ApplicationEventPublishingMessageHandler();
|
|
||||||
return IntegrationFlows.from(outboundRequests()) //
|
|
||||||
.intercept(outputInterceptor()) //
|
|
||||||
.log(LoggingHandler.Level.DEBUG) //
|
|
||||||
.handle(handler) //
|
|
||||||
.get(); //
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public DirectChannel outboundRequests() {
|
public DirectChannel outboundRequests() {
|
||||||
return new DirectChannel();
|
return new DirectChannel();
|
||||||
|
|||||||
@@ -22,32 +22,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.integration.channel.QueueChannel;
|
import org.springframework.integration.channel.QueueChannel;
|
||||||
import org.springframework.integration.dsl.IntegrationFlow;
|
|
||||||
import org.springframework.integration.dsl.IntegrationFlows;
|
|
||||||
import org.springframework.integration.event.core.MessagingEvent;
|
|
||||||
import org.springframework.integration.event.inbound.ApplicationEventListeningMessageProducer;
|
|
||||||
import org.springframework.integration.handler.LoggingHandler;
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnProperty(value = "fineract.mode.batch-worker-enabled", havingValue = "true")
|
@ConditionalOnProperty(value = "fineract.mode.batch-worker-enabled", havingValue = "true")
|
||||||
public class COBWorkerConfig {
|
public class COBWorkerConfig {
|
||||||
|
|
||||||
@Bean
|
|
||||||
public IntegrationFlow inboundFlow() {
|
|
||||||
return IntegrationFlows.from(eventListener()) //
|
|
||||||
.log(LoggingHandler.Level.DEBUG) //
|
|
||||||
.channel(inboundRequests()) //
|
|
||||||
.intercept(inputInterceptor()) //
|
|
||||||
.get(); //
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public ApplicationEventListeningMessageProducer eventListener() {
|
|
||||||
ApplicationEventListeningMessageProducer producer = new ApplicationEventListeningMessageProducer();
|
|
||||||
producer.setEventTypes(MessagingEvent.class);
|
|
||||||
return producer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public QueueChannel inboundRequests() {
|
public QueueChannel inboundRequests() {
|
||||||
return new QueueChannel();
|
return new QueueChannel();
|
||||||
|
|||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler;
|
||||||
|
|
||||||
|
import javax.jms.ConnectionFactory;
|
||||||
|
import org.apache.fineract.cob.COBOutputChannelInterceptor;
|
||||||
|
import org.apache.fineract.cob.messagehandler.conditions.JmsManagerCondition;
|
||||||
|
import org.apache.fineract.infrastructure.core.config.FineractProperties;
|
||||||
|
import org.springframework.batch.integration.config.annotation.EnableBatchIntegration;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.integration.channel.DirectChannel;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlow;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlows;
|
||||||
|
import org.springframework.integration.handler.LoggingHandler;
|
||||||
|
import org.springframework.integration.jms.dsl.Jms;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableBatchIntegration
|
||||||
|
@Conditional(JmsManagerCondition.class)
|
||||||
|
public class COBJmsManagerConfig {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DirectChannel outboundRequests;
|
||||||
|
@Autowired
|
||||||
|
private COBOutputChannelInterceptor outputInterceptor;
|
||||||
|
@Autowired
|
||||||
|
private ConnectionFactory connectionFactory;
|
||||||
|
@Autowired
|
||||||
|
private FineractProperties fineractProperties;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public IntegrationFlow outboundFlow() {
|
||||||
|
return IntegrationFlows.from(outboundRequests) //
|
||||||
|
.intercept(outputInterceptor) //
|
||||||
|
.log(LoggingHandler.Level.DEBUG) //
|
||||||
|
.handle(Jms.outboundGateway(connectionFactory)
|
||||||
|
.requestDestination(fineractProperties.getRemoteJobMessageHandler().getJms().getRequestQueueName()))
|
||||||
|
.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
+56
@@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler;
|
||||||
|
|
||||||
|
import javax.jms.ConnectionFactory;
|
||||||
|
import org.apache.fineract.cob.messagehandler.conditions.JmsWorkerCondition;
|
||||||
|
import org.apache.fineract.infrastructure.core.config.FineractProperties;
|
||||||
|
import org.springframework.batch.integration.config.annotation.EnableBatchIntegration;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.integration.channel.QueueChannel;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlow;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlows;
|
||||||
|
import org.springframework.integration.handler.LoggingHandler;
|
||||||
|
import org.springframework.integration.jms.dsl.Jms;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableBatchIntegration
|
||||||
|
@Conditional(JmsWorkerCondition.class)
|
||||||
|
public class COBJmsWorkerConfig {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConnectionFactory connectionFactory;
|
||||||
|
@Autowired
|
||||||
|
private QueueChannel inboundRequests;
|
||||||
|
@Autowired
|
||||||
|
private FineractProperties fineractProperties;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public IntegrationFlow inboundFlow() {
|
||||||
|
return IntegrationFlows.from(Jms.messageDrivenChannelAdapter(connectionFactory) //
|
||||||
|
.configureListenerContainer(c -> c.subscriptionDurable(true)) //
|
||||||
|
.destination(fineractProperties.getRemoteJobMessageHandler().getJms().getRequestQueueName())) //
|
||||||
|
.channel(inboundRequests) //
|
||||||
|
.log(LoggingHandler.Level.DEBUG) //
|
||||||
|
.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
+53
@@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler;
|
||||||
|
|
||||||
|
import org.apache.fineract.cob.COBOutputChannelInterceptor;
|
||||||
|
import org.apache.fineract.cob.messagehandler.conditions.SpringEventManagerCondition;
|
||||||
|
import org.springframework.batch.integration.config.annotation.EnableBatchIntegration;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.integration.channel.DirectChannel;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlow;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlows;
|
||||||
|
import org.springframework.integration.event.outbound.ApplicationEventPublishingMessageHandler;
|
||||||
|
import org.springframework.integration.handler.LoggingHandler;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableBatchIntegration
|
||||||
|
@Conditional(SpringEventManagerCondition.class)
|
||||||
|
public class COBSpringEventManagerConfig {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DirectChannel outboundRequests;
|
||||||
|
@Autowired
|
||||||
|
private COBOutputChannelInterceptor outputInterceptor;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public IntegrationFlow outboundFlow() {
|
||||||
|
ApplicationEventPublishingMessageHandler handler = new ApplicationEventPublishingMessageHandler();
|
||||||
|
return IntegrationFlows.from(outboundRequests) //
|
||||||
|
.intercept(outputInterceptor) //
|
||||||
|
.log(LoggingHandler.Level.DEBUG) //
|
||||||
|
.handle(handler) //
|
||||||
|
.get(); //
|
||||||
|
}
|
||||||
|
}
|
||||||
+60
@@ -0,0 +1,60 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler;
|
||||||
|
|
||||||
|
import org.apache.fineract.cob.COBInputChannelInterceptor;
|
||||||
|
import org.apache.fineract.cob.messagehandler.conditions.SpringEventWorkerCondition;
|
||||||
|
import org.springframework.batch.integration.config.annotation.EnableBatchIntegration;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.integration.channel.QueueChannel;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlow;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlows;
|
||||||
|
import org.springframework.integration.event.core.MessagingEvent;
|
||||||
|
import org.springframework.integration.event.inbound.ApplicationEventListeningMessageProducer;
|
||||||
|
import org.springframework.integration.handler.LoggingHandler;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableBatchIntegration
|
||||||
|
@Conditional(SpringEventWorkerCondition.class)
|
||||||
|
public class COBSpringEventWorkerConfig {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private QueueChannel inboundRequests;
|
||||||
|
@Autowired
|
||||||
|
private COBInputChannelInterceptor inputInterceptor;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public IntegrationFlow inboundFlow() {
|
||||||
|
return IntegrationFlows.from(eventListener()) //
|
||||||
|
.log(LoggingHandler.Level.DEBUG) //
|
||||||
|
.channel(inboundRequests) //
|
||||||
|
.intercept(inputInterceptor) //
|
||||||
|
.get(); //
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ApplicationEventListeningMessageProducer eventListener() {
|
||||||
|
ApplicationEventListeningMessageProducer producer = new ApplicationEventListeningMessageProducer();
|
||||||
|
producer.setEventTypes(MessagingEvent.class);
|
||||||
|
return producer;
|
||||||
|
}
|
||||||
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler.conditions;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
|
||||||
|
public class JmsManagerCondition extends AllNestedConditions {
|
||||||
|
|
||||||
|
public JmsManagerCondition() {
|
||||||
|
super(ConfigurationPhase.PARSE_CONFIGURATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.mode.batch-manager-enabled", havingValue = "true")
|
||||||
|
static class ManagerCondition {}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.remote-job-message-handler.jms.enabled", havingValue = "true")
|
||||||
|
static class JmsCondition {}
|
||||||
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler.conditions;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
|
||||||
|
public class JmsWorkerCondition extends AllNestedConditions {
|
||||||
|
|
||||||
|
public JmsWorkerCondition() {
|
||||||
|
super(ConfigurationPhase.PARSE_CONFIGURATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.mode.batch-worker-enabled", havingValue = "true")
|
||||||
|
static class WorkerCondition {}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.remote-job-message-handler.jms.enabled", havingValue = "true")
|
||||||
|
static class JmsCondition {}
|
||||||
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler.conditions;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
|
||||||
|
public class SpringEventManagerCondition extends AllNestedConditions {
|
||||||
|
|
||||||
|
public SpringEventManagerCondition() {
|
||||||
|
super(ConfigurationPhase.PARSE_CONFIGURATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.mode.batch-manager-enabled", havingValue = "true")
|
||||||
|
static class ManagerCondition {}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.remote-job-message-handler.spring-events.enabled", havingValue = "true")
|
||||||
|
static class SpringEventCondition {}
|
||||||
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.cob.messagehandler.conditions;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
|
||||||
|
public class SpringEventWorkerCondition extends AllNestedConditions {
|
||||||
|
|
||||||
|
public SpringEventWorkerCondition() {
|
||||||
|
super(ConfigurationPhase.PARSE_CONFIGURATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.mode.batch-worker-enabled", havingValue = "true")
|
||||||
|
static class WorkerCondition {}
|
||||||
|
|
||||||
|
@ConditionalOnProperty(value = "fineract.remote-job-message-handler.spring-events.enabled", havingValue = "true")
|
||||||
|
static class SpringEventCondition {}
|
||||||
|
}
|
||||||
+9
@@ -101,6 +101,7 @@ public class FineractProperties {
|
|||||||
public static class FineractRemoteJobMessageHandlerProperties {
|
public static class FineractRemoteJobMessageHandlerProperties {
|
||||||
|
|
||||||
private FineractRemoteJobMessageHandlerSpringEventsProperties springEvents;
|
private FineractRemoteJobMessageHandlerSpringEventsProperties springEvents;
|
||||||
|
private FineractRemoteJobMessageHandlerJmsProperties jms;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -109,4 +110,12 @@ public class FineractProperties {
|
|||||||
|
|
||||||
private boolean enabled;
|
private boolean enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class FineractRemoteJobMessageHandlerJmsProperties {
|
||||||
|
|
||||||
|
private boolean enabled;
|
||||||
|
private String requestQueueName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-6
@@ -33,19 +33,26 @@ public class FineractRemoteJobMessageHandlerCondition implements Condition {
|
|||||||
.ofNullable(
|
.ofNullable(
|
||||||
context.getEnvironment().getProperty("fineract.remote-job-message-handler.spring-events.enabled", Boolean.class))
|
context.getEnvironment().getProperty("fineract.remote-job-message-handler.spring-events.enabled", Boolean.class))
|
||||||
.orElse(true);
|
.orElse(true);
|
||||||
|
boolean isJmsEnabled = Optional
|
||||||
|
.ofNullable(context.getEnvironment().getProperty("fineract.remote-job-message-handler.jms.enabled", Boolean.class))
|
||||||
|
.orElse(true);
|
||||||
boolean isBatchManagerModeEnabled = Optional
|
boolean isBatchManagerModeEnabled = Optional
|
||||||
.ofNullable(context.getEnvironment().getProperty("fineract.mode.batch-manager-enabled", Boolean.class)).orElse(true);
|
.ofNullable(context.getEnvironment().getProperty("fineract.mode.batch-manager-enabled", Boolean.class)).orElse(true);
|
||||||
boolean isBatchWorkerModeEnabled = Optional
|
boolean isBatchWorkerModeEnabled = Optional
|
||||||
.ofNullable(context.getEnvironment().getProperty("fineract.mode.batch-worker-enabled", Boolean.class)).orElse(true);
|
.ofNullable(context.getEnvironment().getProperty("fineract.mode.batch-worker-enabled", Boolean.class)).orElse(true);
|
||||||
// TODO extend this expression with other message handlers in the future
|
// TODO extend this expression with other message handlers in the future
|
||||||
boolean isMessageHandlerCountFails = !isSpringEventsEnabled;
|
boolean conditionFails = false;
|
||||||
boolean isSpringEventValidationFails = !(isSpringEventsEnabled && isBatchManagerModeEnabled && isBatchWorkerModeEnabled);
|
boolean onlyOneMessageHandlerEnabled = isSpringEventsEnabled ^ isJmsEnabled;
|
||||||
if (isMessageHandlerCountFails) {
|
if (!onlyOneMessageHandlerEnabled) {
|
||||||
|
conditionFails = true;
|
||||||
log.error("For remote partitioning jobs exactly one Message Handler must be enabled.");
|
log.error("For remote partitioning jobs exactly one Message Handler must be enabled.");
|
||||||
}
|
}
|
||||||
if (isSpringEventValidationFails) {
|
if (isSpringEventsEnabled) {
|
||||||
log.error("If Spring Event Message Handler is enabled, the instance must be Batch Manager and Batch Worker too.");
|
if (!(isBatchManagerModeEnabled && isBatchWorkerModeEnabled)) {
|
||||||
|
conditionFails = true;
|
||||||
|
log.error("If Spring Event Message Handler is enabled, the instance must be Batch Manager and Batch Worker too.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return isMessageHandlerCountFails || isSpringEventValidationFails;
|
return conditionFails;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ fineract.partitioned-job.partitioned-job-properties[0].partition-size=${LOAN_COB
|
|||||||
fineract.partitioned-job.partitioned-job-properties[0].thread-count=${LOAN_COB_THREAD_COUNT:1}
|
fineract.partitioned-job.partitioned-job-properties[0].thread-count=${LOAN_COB_THREAD_COUNT:1}
|
||||||
|
|
||||||
fineract.remote-job-message-handler.spring-events.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_SPRING_EVENTS_ENABLED:true}
|
fineract.remote-job-message-handler.spring-events.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_SPRING_EVENTS_ENABLED:true}
|
||||||
|
fineract.remote-job-message-handler.jms.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_JMS_ENABLED:false}
|
||||||
|
fineract.remote-job-message-handler.jms.request-queue-name=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_JMS_QUEUE_NAME:JMS-request-queue}
|
||||||
|
|
||||||
# Logging pattern for the console
|
# Logging pattern for the console
|
||||||
logging.pattern.console=${CONSOLE_LOG_PATTERN:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(%replace([%X{correlationId}]){'\\[\\]', ''}) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}
|
logging.pattern.console=${CONSOLE_LOG_PATTERN:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(%replace([%X{correlationId}]){'\\[\\]', ''}) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ fineract.partitioned-job.partitioned-job-properties[0].chunk-size=100
|
|||||||
fineract.partitioned-job.partitioned-job-properties[0].partition-size=100
|
fineract.partitioned-job.partitioned-job-properties[0].partition-size=100
|
||||||
fineract.partitioned-job.partitioned-job-properties[0].thread-count=1
|
fineract.partitioned-job.partitioned-job-properties[0].thread-count=1
|
||||||
|
|
||||||
|
fineract.remote-job-message-handler.spring-events.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_SPRING_EVENTS_ENABLED:true}
|
||||||
|
fineract.remote-job-message-handler.jms.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_JMS_ENABLED:false}
|
||||||
|
fineract.remote-job-message-handler.jms.request-queue-name=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_JMS_QUEUE_NAME:JMS-request-queue}
|
||||||
|
|
||||||
management.health.jms.enabled=false
|
management.health.jms.enabled=false
|
||||||
|
|
||||||
# FINERACT 1296
|
# FINERACT 1296
|
||||||
|
|||||||
Reference in New Issue
Block a user