2013-03-12 2 views
1

У меня поток Mule с 2 запросами. Первое просто проверяет, дублируется ли имя пользователя.Использовать переменную результата SQL в потоке Mule

ли что-то вроде этого: SELECT COUNT (*) AS TOTAL FROM user_tests WHERE имя пользователя = # [JSON: имя пользователя] И test_message_title = # [JSON: test_message_title]

Второй делает INSERT, если TOTAL = 0.

Теперь я хочу использовать переменную «TOTAL» в выборе внутри того же потока. Как это сделать?

Пробовал # [TOTAL = 0], попробовал # [variable: TOTAL = 0] и многие другие, но не смог заставить его работать.

EDITED: Я создал компонент java, который извлекает «0» или любое другое количество из полезной нагрузки. Как сделать выражение выбора для сравнения?

Пробовал использовать Integer.valueOf (message.payload) = 0 в выражении выбора, но я получаю исключение InvalidExpressionException.

Это весь мой поток:

<flow name="ADMIN_INSERT_TEST_FILE" doc:name="ADMIN_INSERT_TEST_FILE"> 
    <ajax:servlet-inbound-endpoint channel="/admin/save_test_message" responseTimeout="10000" doc:name="Ajax"/> 
    <set-variable variableName="#['saved_payload']" value="#[payload]" doc:name="Save original payload"/> 
    <jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="validate_test_name" queryTimeout="-1" connector-ref="ExtendedRoutingConnector" doc:name="validate duplicated test name"> 
     <jdbc:query key="validate_test_name" value="SELECT count(*) AS TOTAL FROM user_tests WHERE username = #[json:username] AND test_message_title = #[json:test_message_title]"/> 
    </jdbc:outbound-endpoint> 
    <logger message="#[message.payload[0].TOTAL]" level="INFO" category="Total" doc:name="Logger"/> 
    <choice doc:name="Choice"> 
     <when expression="#[message.payload[0].TOTAL == 0]"> 
      <processor-chain> 
       <set-payload value="#[variable:saved_payload]" doc:name="Save Payload"/> 
       <jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="insert_user_test_message" queryTimeout="-1" connector-ref="ExtendedRoutingConnector" doc:name="insert user test message"> 
        <jdbc:query key="insert_user_test_message" value="INSERT INTO user_tests (username, test_message_title, user_test_message) VALUES (#[json:username], #[json:test_message_title], #[json:message])"/> 
       </jdbc:outbound-endpoint> 
      </processor-chain> 
     </when> 
     <otherwise> 
      <processor-chain> 
       <logger message="Name #[json:test_message_title] already exists" level="INFO" doc:name="Logger"/> 
      </processor-chain> 
     </otherwise> 
    </choice> 
</flow> 

Спасибо заранее.

+0

Заменить 'variableName =" # ['saved_payload'] "' с 'variableName =" saved_payload "'. –

ответ

5

Использование MEL:

#[message.payload[0].TOTAL == 0] 

Это будет получать значение TOTAL столбца из первой строки, возвращаемой селектов запроса.

+0

Обнаружили ошибку Вызвал: [Ошибка: не удалось получить доступ к собственности: message.payload [0] .TOTAL]; parent = null: message.payload [0] .TOTAL]] [Near: {... Unknown ....}] Могу ли я сделать что-то вроде: # [message.payload [0] .TOTAL] = 0 ?? – msqar

+0

Показать конфигурацию конечной точки потока/SQL, иначе вам не поможет. –

+0

Отредактировано всем потоком Мула;) спасибо за помощь Дэвида и быстрый ответ. – msqar

Смежные вопросы