本文在我的javaeyeblog地址如下:
http://lcllcl987.javaeye.com/blog/350502
同步更新。
繼續在mule的xml汪洋中遨遊。
向一個vm:queue發送map訊息, mule根據map資訊, 動態執行sql, 並返回資料.select 的查詢mule預設返回map資料.
設定檔:
<?xml version="1.0" encoding="UTF-8"?><br /><mule xmlns="http://www.mulesource.org/schema/mule/core/2.1"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xmlns:jdbc="http://www.mulesource.com/schema/mule/jdbc/2.1"<br /> xmlns:spring="http://www.springframework.org/schema/beans"<br /> xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.1"<br /> xsi:schemaLocation="<br /> http://www.mulesource.com/schema/mule/jdbc/2.1 http://www.mulesource.com/schema/mule/jdbc/2.1/mule-jdbc-ee.xsd<br /> http://www.mulesource.org/schema/mule/core/2.1 http://www.mulesource.org/schema/mule/core/2.1/mule.xsd<br /> http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br /> http://www.mulesource.org/schema/mule/vm/2.1 http://www.mulesource.org/schema/mule/vm/2.1/mule-vm.xsd"><br /> <spring:bean id="dataSource"<br /> class="org.apache.commons.dbcp.BasicDataSource"<br /> destroy-method="close"><br /> <spring:property name="driverClassName"<br /> value="com.mysql.jdbc.Driver" /><br /> <spring:property name="url"<br /> value="jdbc:mysql://192.168.10.120/sand_res" /><br /> <spring:property name="username" value="username" /><br /> <spring:property name="password" value="888" /><br /> <spring:property name="maxActive" value="30" /><br /> <spring:property name="maxIdle" value="10" /><br /> <spring:property name="maxWait" value="1000" /><br /> <spring:property name="defaultAutoCommit" value="true" /><br /> </spring:bean><br /> <jdbc:connector name="jdbcConnector" dataSource-ref="dataSource"><br /> <jdbc:query key="selectUser"<br /> value="SELECT first_name,last_name FROM app_user where first_name=#[map-payload:firstName]" /><br /> <jdbc:query key="insertUser"<br /> value="insert into app_user<br /> (id,first_name,last_name ) values(#[map-payload:id], #[map-payload:firstName], #[map-payload:lastName])" /><br /> </jdbc:connector></p><p> <!--<br /> The Mule model initialises and manages your UMO components<br /> --><br /> <model name="databaseModel"><br /> <service name="insertUMO"><br /> <!-- any number of endpoints can be added to an inbound router --><br /> <inbound><br /> <vm:inbound-endpoint path="query"/><br /> </inbound><br /> <!--<br /> An outbound router can have one or more router configurations that can be<br /> invoked depending on business rules, message contents, headers or any other<br /> criteria. The pass-through-router is a router that automatically passes<br /> on every message it receives<br /> --><br /> <outbound><br /> <pass-through-router><br /> <jdbc:outbound-endpoint queryKey="selectUser" synchronous="true"/><br /> </pass-through-router><br /> </outbound><br /> </service><br /> </model><br /></mule>
注意: 如果mule採用2.1, jdbc transport的namespase尾碼為com, 而不是org, 如果寫錯,IDE不會提示,程式異常也很奇怪,讓我折騰了一個下午:(
測試程式:
public class MyMuleClientTest<br />{<br /> public static void main(String[] args) throws MuleException<br /> {<br /> // create mule<br /> MuleContext muleContext;<br /> String config = "my-mule-jdbc-config.xml";<br /> muleContext = new DefaultMuleContextFactory().createMuleContext(config);<br /> muleContext.start();<br /> // creat mule client<br /> MuleClient client = new MuleClient();<br /> Map map = new HashMap();<br /> map.put("firstName", "feng");<br /> MuleMessage response = client.send("vm://query", map, null);<br /> System.out.println("response = " + response.getPayload());<br /> }<br />}
執行的sql為:
SELECT first_name,last_name FROM app_user where first_name="feng"
insert的執行類似,只需修改如下:
<outbound><br /> <pass-through-router><br /> <jdbc:outbound-endpoint queryKey="insertUser" synchronous="true"/><br /> </pass-through-router><br /> </outbound>
感覺mule的jdbc transtort, 就是畏縮版的ibatis,