Reputation: 21
So i have an xml Base Config fro Spring integration I Read from databse with some specific values and i treat the data with a header-enricher after that i use a header-value-router.
so i have a publish-subscribe-channel element for evry header value. My problem heare that i want the service activator to be lunched with every pool in the channel and it's not the case i took at least 4 hours to lunch and i don't know why. The issue i have is with Send Sms Service activator
Can somone Help. This is my code:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================================== -->
<!-- fichier de config spring-integration (module core-application) -->
<!-- -->
<!-- * polling de la request queue -->
<!-- ============================================================== -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:int-jpa="http://www.springframework.org/schema/integration/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/integration/jpa http://www.springframework.org/schema/integration/jpa/spring-integration-jpa-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- Beans definitions -->
<task:executor id="imfRequestTaskExecutor" pool-size="${imf.request.queue.polling.pool.size}" keep-alive="5"/>
<task:executor id="pilproRequestTaskExecutor" pool-size="${pilpro.request.queue.polling.pool.size}" keep-alive="5"/>
<task:executor id="artemisRequestTaskExecutor" pool-size="${artemis.request.queue.polling.pool.size}" keep-alive="5"/>
<task:executor id="smsRequestTaskExecutor" pool-size="${sms.request.queue.polling.pool.size}" keep-alive="5"/>
<!--
toutes les x secondes on scrute la table core_request_queue, on prend les y premières lignes dont la colonne status vaut 'IMMEDIATE'
x = request.queue.polling.immediate.fixed.rate
y = request.queue.polling.immediate.rows.max
-->
<bean id="requestQueueImmediatePollerTrigger" parent="triggerExcludingWeeklyBlackout"
class="com.orange.cochise.core.application.schedulers.support.PeriodicTriggerExcludingWeeklyBlackout">
<constructor-arg name="period" value="${request.queue.polling.immediate.fixed.rate}" />
<property name="initialDelay" value="${request.queue.polling.immediate.initial.delay}"></property>
<property name="fixedRate" value="false"/>
</bean>
<int-jpa:inbound-channel-adapter id="requestQueueImmediateInbound"
jpa-query="SELECT r
FROM RequestQueue r
LEFT JOIN FETCH r.data
WHERE r.id IN (
SELECT MIN(sub.id)
FROM RequestQueue sub
WHERE sub.status = 'IMMEDIATE'
AND sub.creationDate = (SELECT MIN(oldest.creationDate) FROM RequestQueue oldest WHERE oldest.orderId=sub.orderId AND oldest.status='IMMEDIATE')
AND NOT EXISTS (SELECT runningWithSameOrderId FROM RequestQueue runningWithSameOrderId WHERE runningWithSameOrderId.status='RUNNING' AND sub.orderId=runningWithSameOrderId.orderId)
GROUP BY sub.orderId
)
ORDER BY r.creationDate"
entity-manager-factory="cochiseCoreEntityManagerFactory"
delete-after-poll="false"
channel="requestQueuesChannel"
max-results="${request.queue.polling.immediate.rows.max}" >
<int:poller trigger="requestQueueImmediatePollerTrigger" error-channel="requestQueueLockErrorChannel"/>
</int-jpa:inbound-channel-adapter>
<!-- max-results specifies the number of rows returned for each execution,
whereas max-messages-per-poll (on int:poller) specifies the number of times the query is executed per polling interval
Under normal circumstances, you would likely not want to set the Poller's max-messages-per-poll property when
using the JDBC Inbound Channel Adapter. Its default value is 1, which means that the JDBC Inbound
Channel Adapter's receive() method is executed exactly once for each poll interval. -->
<!--
à heure fixe (voir request.queue.polling.periodical.cron) on scrute la table core_request_queue, on prend toutes les lignes dont la colonne status vaut 'PERIODICAL'
- pas de max : tous les soirs on traite tout
-->
<bean id="requestQueuePeriodicalPollerTrigger" parent="triggerExcludingWeeklyBlackout"
class="com.orange.cochise.core.application.schedulers.support.CronTriggerExcludingWeeklyBlackout">
<constructor-arg name="cronExpression" value="${request.queue.polling.periodical.cron}" />
</bean>
<int-jpa:inbound-channel-adapter id="requestQueuePeriodicalInbound"
jpa-query="SELECT r
FROM RequestQueue r
LEFT JOIN FETCH r.data
WHERE r.id IN (
SELECT MIN(sub.id)
FROM RequestQueue sub
WHERE sub.status = 'PERIODICAL'
AND sub.creationDate = (SELECT MIN(oldest.creationDate) FROM RequestQueue oldest WHERE oldest.orderId=sub.orderId AND oldest.status='PERIODICAL')
AND NOT EXISTS (SELECT runningWithSameOrderId FROM RequestQueue runningWithSameOrderId WHERE runningWithSameOrderId.status='RUNNING' AND sub.orderId=runningWithSameOrderId.orderId)
GROUP BY sub.orderId
)
ORDER BY r.creationDate"
entity-manager-factory="cochiseCoreEntityManagerFactory"
delete-after-poll="false"
channel="requestQueuesChannel">
<int:poller trigger="requestQueuePeriodicalPollerTrigger" error-channel="requestQueueLockErrorChannel"/>
</int-jpa:inbound-channel-adapter>
<int:channel id="requestQueuesChannel">
<int:interceptors>
<int:wire-tap channel="requestQueuesLogChannel"/>
</int:interceptors>
</int:channel>
<!-- note : en G1R1C2, version du 15/04, on avait eu la mauvaise idée d'écrire dans la log "traitement de X lignes de la RequestQueue" avant d'avoir fait le lock de ces lignes -->
<!--<int:logging-channel-adapter id="requestQueuesLogChannel"
logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue"
expression="'traitement '+payload.size()+' lignes de la RequestQueue'"
level="INFO" />-->
<int:logging-channel-adapter id="requestQueuesLogChannel"
logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue"
expression="'tentative de traitement de '+payload.size()+' lignes de la RequestQueue'"
level="INFO" />
<!-- LOCK BDD : on passe le status des liens à RUNNING (pour s'assurer que l'autre serveur ne va pas traiter ces memes lignes
dans le cas ou l'autre serveur aurait fait le select en meme temps, un seule des 2 serveurs pourra passer à
RUNNING, l'autre serveur recevra une OptimisticLockException (qui sera envoyé, par défaut, vers errorChannel)
-->
<!-- update status -> RUNNING (NEW_TX_REQUIRE) -->
<int:service-activator id="requestQueueLockService"
ref="requestQueueServiceImpl"
method="lock"
input-channel="requestQueuesChannel"
output-channel="requestQueuesRunningChannel"/>
<int:channel id="requestQueuesRunningChannel">
<int:interceptors>
<int:wire-tap channel="requestQueuesRunningLogChannel"/>
</int:interceptors>
</int:channel>
<int:logging-channel-adapter id="requestQueuesRunningLogChannel"
logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue"
expression="'traitement '+payload.size()+' lignes de la RequestQueue'"
level="INFO" />
<int:splitter input-channel="requestQueuesRunningChannel" output-channel="requestQueueRunningChannel" />
<int:header-enricher id="requestQueueRunningEnricher" input-channel="requestQueueRunningChannel" output-channel="requestQueueHeaderChannel" >
<int:error-channel ref="requestQueueErrorChannel" /> <!-- on définit ici le channel d'error a utilisé (à la place de errorChannel) -->
<int:header name="queueId" expression="payload.id"/>
<int:header name="orderId" expression="payload.orderId"/>
<int:header name="requestType" expression="payload.requestType"/>
<int:header name="requestMode" expression="payload.requestMode"/>
</int:header-enricher>
<!-- default error channel -->
<int:channel id="requestQueueErrorChannel">
<int:interceptors>
<int:wire-tap channel="errorChannel"/> <!-- LOG SUPPORT -->
</int:interceptors>
</int:channel>
<int:header-enricher input-channel="requestQueueErrorChannel" output-channel="requestQueueToFail">
<int:header name="queueId" expression="payload.failedMessage.headers[queueId]"></int:header>
<int:header name="orderId" expression="payload.failedMessage.headers[orderId]"></int:header>
<int:header name="requestType" expression="payload.failedMessage.headers[requestType]"></int:header>
</int:header-enricher>
<!-- request queue to FAILED -->
<int:channel id="requestQueueToFail"/>
<!-- <int-jpa:outbound-channel-adapter id="requestFailedJpaOutboundChannelAdapter"
channel="requestQueueToFail"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status='FAILED', lastModified = NOW(), VERSION=(VERSION+1) where status = 'RUNNING' and requestType = :requestType and orderId = :orderId" >
<int-jpa:transactional transaction-manager="coreTransactionManager" propagation="REQUIRES_NEW"/>
<int-jpa:parameter name="requestType" expression="headers[requestType]" />
<int-jpa:parameter name="orderId" expression="headers[orderId]"/>
</int-jpa:outbound-channel-adapter> -->
<int-jpa:outbound-channel-adapter id="requestFailedJpaOutboundChannelAdapter"
channel="requestQueueToFail"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status='FAILED', lastModified = NOW(), VERSION=(VERSION+1) where id = :id" >
<int-jpa:transactional transaction-manager="coreTransactionManager" propagation="REQUIRES_NEW"/>
<int-jpa:parameter name="id" expression="headers[queueId]" />
</int-jpa:outbound-channel-adapter>
<!-- routeur IMF -->
<int:channel id="requestQueueHeaderChannel">
<int:interceptors>
<int:wire-tap channel="requestQueueRunningLogChannel"/>
</int:interceptors>
</int:channel>
<int:logging-channel-adapter id="requestQueueRunningLogChannel" logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue" expression="'traitement RequestQueue orderId (TODO id=) = '+ payload.orderId +' '" level="INFO" />
<!-- /!\ ATTENTION: le paramètre 'resolution-required' doit être valorisé à 'false' pour que le paramètre 'default-output-channel' soit pris en compte -->
<int:header-value-router input-channel="requestQueueHeaderChannel" header-name="requestType" default-output-channel="requestQueueToFail" resolution-required="false">
<int:mapping value="IMF_FAGAN_1" channel="requestQueueFagan1Channel"/>
<int:mapping value="IMF_FAGAN_5" channel="requestQueueFagan5Channel"/>
<int:mapping value="IMF_FAGCIB_2" channel="requestQueueFagcib2Channel"/>
<int:mapping value="PILPRO_CREER_RELANCE" channel="requestQueueCreerRelanceChannel"/>
<int:mapping value="PILPRO_CREER_TICKET" channel="requestQueueCreerTicketChannel"/>
<int:mapping value="ARTEMIS_CANCEL_ORDER" channel="requestQueueCancelOrderChannel"/>
<int:mapping value="ARTEMIS_CLOSE_AVP" channel="requestQueueCloseAvpChannel"/>
<int:mapping value="ARTEMIS_CREATE_NOTE" channel="requestQueueCreateNoteChannel"/>
<int:mapping value="ARTEMIS_RELEASE_RDV" channel="requestQueueReleaseRdvChannel"/>
<int:mapping value="ARTEMIS_REASSIGN_ROLE" channel="requestQueueReassignRoleChannel"/>
<int:mapping value="ARTEMIS_GET_TASK" channel="requestQueueGetTaskChannel"/>
<int:mapping value="SEND_SMS" channel="requestQueueSmsChannel"/>
<int:mapping value="SIMULATE_SEND_SMS" channel="requestQueueSmsSimulateChannel"/>
</int:header-value-router>
<!-- FAGAN 1 -->
<!-- PublishSubscribeChannel : new Thread Tx START -->
<int:publish-subscribe-channel id="requestQueueFagan1Channel" task-executor="imfRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="imfFagan1ServiceActivator"
ref="importImfFagan1Facade" method="callWithRetry"
input-channel="requestQueueFagan1Channel"
output-channel="requestQueueResponseChannel"/>
<!-- FAGAN 5 -->
<!-- PublishSubscribeChannel : new Thread Tx START -->
<int:publish-subscribe-channel id="requestQueueFagan5Channel" task-executor="imfRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="imfFagan5ServiceActivator"
ref="importImfFagan5Facade" method="callWithRetry"
input-channel="requestQueueFagan5Channel"
output-channel="requestQueueResponseChannel"/>
<!-- FAGCIB 2 -->
<!-- PublishSubscribeChannel : new Thread Tx START -->
<int:publish-subscribe-channel id="requestQueueFagcib2Channel" task-executor="imfRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="imfFagcib2ServiceActivator"
ref="importImfFagcib2Facade" method="callWithRetry"
input-channel="requestQueueFagcib2Channel"
output-channel="requestQueueResponseChannel"/>
<!-- PILPRO CREER RELANCE -->
<!-- PublishSubscribeChannel : new Thread Tx START -->
<int:publish-subscribe-channel id="requestQueueCreerRelanceChannel" task-executor="pilproRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="createReminderServiceActivator"
ref="pilproCreateReminderFacade" method="callWithRetry"
input-channel="requestQueueCreerRelanceChannel"
output-channel="requestQueueResponseChannel"/>
<!-- PILPRO CREER TICKET -->
<!-- PublishSubscribeChannel : new Thread Tx START -->
<int:publish-subscribe-channel id="requestQueueCreerTicketChannel" task-executor="pilproRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="creerTicketServiceActivator"
ref="pilproCreateTicketFacade" method="callWithRetry"
input-channel="requestQueueCreerTicketChannel"
output-channel="requestQueueResponseChannel"/>
<!-- ARTEMIS ANNULER COMMANDE -->
<int:publish-subscribe-channel id="requestQueueCancelOrderChannel" task-executor="artemisRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="cancelOrderServiceActivator"
ref="artemisCancelOrderFacade" method="callWithRetry"
input-channel="requestQueueCancelOrderChannel"
output-channel="requestQueueResponseChannel"/>
<!-- ARTEMIS CLOTURE AVP -->
<int:publish-subscribe-channel id="requestQueueCloseAvpChannel" task-executor="artemisRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="closeAvpServiceActivator"
ref="artemisCloseAVPFacade" method="callWithRetry"
input-channel="requestQueueCloseAvpChannel"
output-channel="requestQueueResponseChannel"/>
<!-- ARTEMIS CREATE NOTE -->
<int:publish-subscribe-channel id="requestQueueCreateNoteChannel" task-executor="artemisRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="createNoteServiceActivator"
ref="artemisCreateNoteFacade" method="callWithRetry"
input-channel="requestQueueCreateNoteChannel"
output-channel="requestQueueResponseChannel"/>
<!-- ARTEMIS RELEASE RDV -->
<int:publish-subscribe-channel id="requestQueueReleaseRdvChannel" task-executor="artemisRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="releaseRdvServiceActivator"
ref="artemisReleaseRdvFacade" method="callWithRetry"
input-channel="requestQueueReleaseRdvChannel"
output-channel="requestQueueResponseChannel"/>
<!-- ARTEMIS REASSIGN ROLE -->
<int:publish-subscribe-channel id="requestQueueReassignRoleChannel" task-executor="artemisRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="reassignRoleServiceActivator"
ref="artemisReassignRoleFacade" method="callWithRetry"
input-channel="requestQueueReassignRoleChannel"
output-channel="requestQueueResponseChannel"/>
<!-- ARTEMIS GET TASK -->
<int:publish-subscribe-channel id="requestQueueGetTaskChannel" task-executor="artemisRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="sendSms"
ref="artemisGetTaskFacade" method="callWithRetry"
input-channel="requestQueueGetTaskChannel"
output-channel="requestQueueResponseChannel"/>
<!-- SMS Send Task -->
<int:publish-subscribe-channel id="requestQueueSmsChannel" task-executor="smsRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="sendSmsServiceActivator"
ref="sendSmsServiceImpl" method="sendSms"
input-channel="requestQueueSmsChannel"
output-channel="requestQueueResponseChannel"/>
<!-- SMS Send Task -->
<int:publish-subscribe-channel id="requestQueueSmsSimulateChannel" task-executor="smsRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="sendSmsServiceActivator"
ref="sendSmsServiceImpl" method="simulateSendSms"
input-channel="requestQueueSmsSimulateChannel"
output-channel="requestQueueResponseChannel"/>
<!-- request queue handle response -->
<int:channel id="requestQueueResponseChannel"/>
<!-- /!\ ATTENTION: le paramètre 'resolution-required' doit être valorisé à 'false' pour que le paramètre 'default-output-channel' soit pris en compte -->
<int:header-value-router input-channel="requestQueueResponseChannel" header-name="requestMode" default-output-channel="requestQueueToDoneChannel" resolution-required="false">
<int:mapping value="CALL_ONLY_ONE_PERIODICAL" channel="requestQueueToReplayChannel"/>
</int:header-value-router>
<!-- Update request queue : PERIODICAL (replay) -->
<int:channel id="requestQueueToReplayChannel"/>
<!-- <int-jpa:outbound-channel-adapter id="requestPeriodicalJpaOutboundChannelAdapter"
channel="requestQueueToReplayChannel"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status='PERIODICAL', lastModified = NOW(), VERSION=(VERSION+1) where status = 'RUNNING' and requestType = :requestType and orderId = :orderId" >
<int-jpa:transactional transaction-manager="coreTransactionManager" />
<int-jpa:parameter name="requestType" expression="headers[requestType]"/>
<int-jpa:parameter name="orderId" expression="headers[orderId]"/>
</int-jpa:outbound-channel-adapter> -->
<int-jpa:outbound-channel-adapter id="requestPeriodicalJpaOutboundChannelAdapter"
channel="requestQueueToReplayChannel"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status='PERIODICAL', lastModified = NOW(), VERSION=(VERSION+1) where id = :id" >
<int-jpa:transactional transaction-manager="coreTransactionManager" />
<int-jpa:parameter name="id" expression="headers[queueId]"/>
</int-jpa:outbound-channel-adapter>
<!-- Update request queue : DONE -->
<int:channel id="requestQueueToDoneChannel"/>
<!--<int-jpa:outbound-channel-adapter id="requestDoneJpaOutboundChannelAdapter"
channel="requestQueueToDoneChannel"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status = 'DONE', lastModified = NOW(), VERSION=(VERSION+1) where status = 'RUNNING' and requestType = :requestType and orderId = :orderId" >
<int-jpa:transactional transaction-manager="coreTransactionManager" />
<int-jpa:parameter name="requestType" expression="headers[requestType]"/>
<int-jpa:parameter name="orderId" expression="headers[orderId]"/>
</int-jpa:outbound-channel-adapter>-->
<int-jpa:outbound-channel-adapter id="requestDoneJpaOutboundChannelAdapter"
channel="requestQueueToDoneChannel"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status = 'DONE', lastModified = NOW(), VERSION=(VERSION+1) where id = :id" >
<int-jpa:transactional transaction-manager="coreTransactionManager" />
<int-jpa:parameter name="id" expression="headers[queueId]"/>
</int-jpa:outbound-channel-adapter>
<!-- LOCK logger -->
<!-- permet de loguer dans supervisionError (via ErrorChannel) toutes les erreurs sauf LockException -->
<int:channel id="requestQueueLockErrorChannel"></int:channel>
<int:logging-channel-adapter id="requestQueueLockErrorLogChannel" logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue" expression="'RequestQueues vérouillées par un traitement en cours'" level="DEBUG" />
<int:exception-type-router input-channel="requestQueueLockErrorChannel" default-output-channel="errorChannel">
<int:mapping exception-type="javax.persistence.OptimisticLockException" channel="requestQueueLockErrorLogChannel"/>
<int:mapping exception-type="org.hibernate.exception.LockAcquisitionException" channel="requestQueueLockErrorLogChannel"/>
</int:exception-type-router>
<!-- Traitement RequestQueue RETRY : RUNNING -> IMMEDIATE -->
<!--
toutes les x secondes on scrute la table core_request_queue, on prend les y premières lignes de plus de z heures dont la colonne status vaut 'RUNNING',
afin de les re-passer en statut 'IMMEDIATE'
x = request.queue.polling.running.in.error.fixed.rate
y = request.queue.polling.running.in.error.rows.max
z = request.queue.polling.running.in.error.time.limit
remarque : lorsque executé en tests unitaires (sur base H2) la query ci-dessous renvoi une "Syntax error in SQL statement"
-->
<bean id="requestRunningInErrorPollerTrigger" parent="triggerExcludingWeeklyBlackout"
class="com.orange.cochise.core.application.schedulers.support.PeriodicTriggerExcludingWeeklyBlackout">
<constructor-arg name="period" value="${request.queue.polling.running.in.error.fixed.rate}" />
<property name="initialDelay" value="${request.queue.polling.running.in.error.initial.delay}"></property>
<property name="fixedRate" value="false"/>
</bean>
<int-jpa:inbound-channel-adapter id="requestQueueRunningToRetryInboud"
jpa-query="from RequestQueue where status = 'RUNNING' and lastModified < SUBTIME(CURRENT_TIMESTAMP, MAKETIME(${request.queue.polling.running.in.error.time.limit},0,0) ) order by lastModified asc"
entity-manager-factory="cochiseCoreEntityManagerFactory"
channel="requestQueuesRunningRetryChannel"
max-results="${request.queue.polling.running.in.error.rows.max}">
<int:poller trigger="requestRunningInErrorPollerTrigger"/>
</int-jpa:inbound-channel-adapter>
<int:channel id="requestQueuesRunningRetryChannel">
<int:interceptors>
<int:wire-tap channel="requestQueuesRunningRetryLogChannel"/>
</int:interceptors>
</int:channel>
<int:splitter input-channel="requestQueuesRunningRetryChannel" output-channel="requestQueueRunningRetryChannel"/>
<int:logging-channel-adapter id="requestQueuesRunningRetryLogChannel" logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue" expression="'rattrapage de '+payload.size()+' lignes de la RequestQueue'" level="INFO" />
<int:channel id="requestQueueRunningRetryChannel">
<int:interceptors>
<int:wire-tap channel="requestQueueRunningRetryLogChannel"/>
</int:interceptors>
</int:channel>
<!-- <int-jpa:outbound-channel-adapter id="requestQueueRunningToImmediateOutbound"
channel="requestQueueRunningRetryChannel"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status = 'IMMEDIATE', lastModified = NOW(), VERSION=(VERSION+1) where requestType = :requestType and orderId = :orderId and status = 'RUNNING' ">
<int-jpa:transactional transaction-manager="coreTransactionManager" propagation="REQUIRES_NEW"/>
<int-jpa:parameter name="requestType" expression="payload.requestType"/>
<int-jpa:parameter name="orderId" expression="payload.orderId"/>
</int-jpa:outbound-channel-adapter> -->
<int-jpa:outbound-channel-adapter id="requestQueueRunningToImmediateOutbound"
channel="requestQueueRunningRetryChannel"
entity-manager-factory="cochiseCoreEntityManagerFactory"
jpa-query="update RequestQueue set status = 'IMMEDIATE', lastModified = NOW(), VERSION=(VERSION+1) where id = :id">
<int-jpa:transactional transaction-manager="coreTransactionManager" propagation="REQUIRES_NEW"/>
<int-jpa:parameter name="id" expression="payload.id"/>
</int-jpa:outbound-channel-adapter>
<int:logging-channel-adapter id="requestQueueRunningRetryLogChannel" logger-name="com.orange.cochise.core.application.integration.request.logger.RequestQueue" expression="'rattrapage de la ligne : '+payload" level="INFO" />
</beans>
Upvotes: 0
Views: 69
Reputation: 21
As I mentioned that I have a problem with the send SMS part so I figured it out that I put the same seviceactivator
name for tow publish subscribe element as shown below so corrected it by changing one of them
<!-- SMS Send Task -->
<int:publish-subscribe-channel id="requestQueueSmsChannel" task-executor="smsRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="sendSmsServiceActivator"
ref="sendSmsServiceImpl" method="sendSms"
input-channel="requestQueueSmsChannel"
output-channel="requestQueueResponseChannel"/>
<!-- SMS Send Task -->
<int:publish-subscribe-channel id="requestQueueSmsSimulateChannel" task-executor="smsRequestTaskExecutor" datatype="com.orange.cochise.core.model.queue.RequestQueue"/>
<int:service-activator id="sendSmsServiceActivator"
ref="sendSmsServiceImpl" method="simulateSendSms"
input-channel="requestQueueSmsSimulateChannel"
output-channel="requestQueueResponseChannel"/>
Upvotes: 0