Подтверждение Jdbc (ACK) в Mule

Мне нравится обновлять столбец deltaprocessstatus моей базы данных как «I» после извлечения данных из базы данных.

Ниже мой код

<spring:beans> 
    <context:property-placeholder location="classpath:mule-app.properties"/>
    </spring:beans>
    <jdbc-ee:mssql-data-source name="MS_SQL_Data_Source" user="Ssssss" password="ffff" url="jdbc:sqlserver://localhost" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/>
    <jdbc-ee:connector name="ProSFDB" dataSource-ref="MS_SQL_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database" transactionPerMessage="false">
        <jdbc-ee:query key="SelectAllUser" value="SELECT top 100 * from master_user_Queue"/>
        <jdbc-ee:query key="SelectAllUser.ack" value="update master_user_Queue set DeltaProcessStatus = 'I' where MasterUserID = 1"/>
        <jdbc-ee:query key="SelectbatchWiseInfo" value="Select top 100 * from  master_user_Queue where MasterUserID between #[payload['min']] and #[payload['max']]"/>

    </jdbc-ee:connector>
    <amqp:connector name="AMQP_Connector" validateConnections="true" host="${amqp.host}" port="${amqp.port}" virtualHost="${amqp.virtualhost}" username="${amqp.username}" password="${amqp.password}" doc:name="AMQP Connector"/>

    <spring:beans>
        <spring:bean id="objectStore" name="Bean" class="org.mule.util.store.SimpleMemoryObjectStore"/>       
    </spring:beans>

    <data-mapper:config name="Map_To_Map" transformationGraphPath="map_to_map.grf" doc:name="Map_To_Map"/>

    <flow name="asi_1_user_deactivationFlow1" doc:name="asi_1_user_deactivationFlow1" processingStrategy="synchronous">
        <jdbc-ee:inbound-endpoint exchange-pattern="one-way"  queryTimeout="-1" pollingFrequency="6000" doc:name="Database" connector-ref="ProSFDB" queryKey="SelectAllUser" tracking:enable-default-events="true">
            <jdbc-ee:transaction action="ALWAYS_BEGIN"/>
        </jdbc-ee:inbound-endpoint>
</flow>

ключ запроса «SelectAllUser» работает нормально, но ключ запроса «SelectAllUser.ack» не работает после вызова «SelectAllUser». Я не знаю, где я ошибаюсь.

Заранее спасибо.


person Mangoski    schedule 07.08.2014    source источник
comment
Что происходит, когда вы запускаете его? Вы просто не получаете обновления базы данных? Что-нибудь в журнале консоли указывает на сбои?   -  person SteveS    schedule 07.08.2014
comment
@SteveS Я не получаю обновления базы данных. У меня не было сбоев при запуске потока.   -  person Mangoski    schedule 08.08.2014
comment
Итак, одни и те же строки выбираются снова и снова, верно?   -  person David Dossot    schedule 08.08.2014
comment
Да, Дэвид, но мой поток не пуст, я использую много trasformeer и обработчиков сообщений, я не включил свой полный код, чтобы избежать длинности.   -  person Mangoski    schedule 09.08.2014


Ответы (1)


В SelectAllUser отсутствует предложение where, которое сделало бы SelectAllUser.ack полезным.

Действительно, запрос подтверждения устанавливает DeltaProcessStatus = 'I', но запрос выбора не проверяет это DeltaProcessStatus != 'I'. Поэтому одни и те же строки будут выбираться снова и снова.

Также очень подозрительным является тот факт, что запрос подтверждения как предложение where с MasterUserID = 1, но не запрос выбора. Существует риск, что обновленные строки не соответствуют выбранным.

EDIT. Другая потенциальная проблема заключается в том, что вы начинаете транзакцию во входящей конечной точке, но ничто не завершает эту транзакцию, поскольку поток пуст. Можете ли вы попробовать удалить элемент транзакции? В любом случае это бесполезно, пока поток пуст...

person David Dossot    schedule 07.08.2014
comment
Спасибо за ваш ответ, Дэвид, я отредактировал свой код, но мой ack еще не вызывался автоматически. ‹jdbc-ee:имя соединителя=ProSFDB dataSource-ref=MS_SQL_Data_Source validateConnections=true queryTimeout=-1 pollingFrequency=0 doc:name=Database transactionPerMessage=false› ‹jdbc-ee:query key=SelectAllUser.ack value=update master_user_Queue set DeltaProcessStatus = 'I', где MasterUserId от 1 до 100/› ‹jdbc-ee:query key=SelectAllUser value=SELECT top 100 * FROM master_user_Queue, где DeltaProcessStatus!='I'/› - person Mangoski; 08.08.2014
comment
ОК, добавлено примечание о том, что транзакцию нужно начинать, но не завершать. - person David Dossot; 08.08.2014