[英]Save value from database in a session variable Mule esb
我用mysql作為數據庫在mule esb和Im中開發了一個示例bookstare。 我的數據庫中有一個名為“庫存”的表,該表具有我在表格上提供的注冊書籍的2 attr(isbn和數量)。 我想要的是通過表格檢查客戶要求的書數,不要增加我數據庫中存在的書(數量)以進行訂購。
我有這樣的流程:
<flow name="Facturacion" doc:name="Facturacion">
<composite-source doc:name="Composite Source">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8086" doc:name="HTTP" path="Facturacion" transformer-refs="HttpToPedido"/>
<file:inbound-endpoint responseTimeout="10000" doc:name="File" moveToDirectory="tmp" path="tmp/pedidos"/>
</composite-source>
<component doc:name="Generar Pedido" class="org.mule.components.GenerarPedido"/>
<set-session-variable variableName="dataTemp" value="#[message.payload.cantidadPedida]" doc:name="Session Variable"/>
<db:select config-ref="MySQL_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[SELECT cantidad FROM stock WHERE isbn = #[payload.isbn]]]></db:parameterized-query>
</db:select>
<collection-splitter doc:name="Collection Splitter"/>
<choice doc:name="Choice">
<when expression="#[sessionVars['dataTemp'] >= payload.cantidadPedida]">
<vm:outbound-endpoint exchange-pattern="one-way" path="procesarPedido" doc:name="Procesar Pedido Disponible"/>
</when>
<otherwise>
<vm:outbound-endpoint exchange-pattern="one-way" path="rechazarStock" doc:name="Rechazar por falta en Stock"/>
</otherwise>
</choice>
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
<set-payload value="#[payload];" doc:name="Set Payload"/>
</flow>
有什么解決辦法嗎? 我需要的是按順序比較有效負載中的書籍數量的值與數據庫中“庫存表”中的值。
謝謝!
我不確切知道您要實現的目標,但是要將數據庫查詢的結果存儲在會話變量中,您需要使用的只是一個擴充程序,您可以在其中指定目標為會話變量:
<enricher target="#[sessionVars.test]" doc:name="Message Enricher">
<!-- database call -->
</enricher>
如果這不是您想要的,則可以透露有關用例的更多信息。
怎樣使用過濾器?
以下應用:
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" />
<db:mysql-config name="MySQL_Configuration" url="jdbc:mysql://localhost:3306/esb?user=root&amp;password=" />
<flow name="databasetestsFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" />
<db:select config-ref="MySQL_Configuration" >
<db:parameterized-query><![CDATA[select name from test where id=#[message.inboundProperties.'http.query.params'.id]]]></db:parameterized-query>
</db:select>
<expression-filter expression="#[payload.size()==1 && payload[0].name=="one"]" />
<set-payload value="PROCESSED" />
</flow>
僅當id為1時才返回“ PROCESSED”,例如:
curl http://localhost:8081\?id\=1
您可以將過濾器表達式更改為:
#[sessionVars['dataTemp'] >= payload[0].cantidadPedida]
您還可以通過使用db:select
處理器中的target
屬性將數據庫結果存儲在會話var中,例如:
target="#[sessionVars.results]"
HTH,馬科斯
<db:select config-ref="MySQL_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[SELECT cantidad FROM stock WHERE isbn = #[payload.isbn]]]></db:parameterized-query>
</db:select>
<set-session-variable variableName="dataTemp" value="#[payload.cantidad]" doc:name="dataTemp"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.