收藏 分销(赏)

MULE学习笔记.doc

上传人:丰**** 文档编号:3131259 上传时间:2024-06-19 格式:DOC 页数:20 大小:615.50KB 下载积分:10 金币
下载 相关 举报
MULE学习笔记.doc_第1页
第1页 / 共20页
MULE学习笔记.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
Mule学习笔记 作者:郑先全 msn:zhengxianquan@ 1. 原理 请参考《Using JBI for Service-Oriented Integration (SOI)》 2. Mule介绍 2.1. 架构 2.2. 核心概念 请参考《Architecture Guid》 2.3. repository 如果想保持新鲜,访问他们的CVS是最好的办法。 cvs -d :pserver:anonymous@cvs.mule.codehaus.org:/scm/mule login (no password) cvs -d :pserver:anonymous@cvs.mule.codehaus.org:/scm/mule co mule 注意:从2006年4月14日开始,不再使用cvs,而采用svn,路径如下: https://svn.codehaus.org/mule 2.4. IDE 有自己的IDE: Download: http://docs.codehaus.org/display/MULE/Download Eclipse update site: http://dist.codehaus.org/mule/muleide/updates/ 3. Mule使用 3.1. Mule的安装 我的JDK为1.4.2_05。 下载后,解压缩,并设置MULE_HOME为解压缩目录 测试: 提供的echo例子程序是个比较好的测试工具,放在%MULE_HOME%\samples\echo下,cmd并切换到改目录的bin下,执行mule-echo.bat,即可看到如下窗口: 恭喜,说明安装成功。 Tip: 事实上,在我的环境中会提示一个关于缺少一个sax文件的错误,郁闷,通过到sax王张并下载sax2r3.zip后,把里面的xml-apis.jar解压缩到%MULE_HOME%\lib下,可以解决该问题。 3.2. echo例子分析 参考这个地址(http://mule.codehaus.org/Echo+Example)的介绍,应该会有一个比较好的开始。 3.2.1. 过程图示 描述为: 1、 通过两种方式接入(红色标识):一为System.in,另一为Soap(http)方式; 2、 每种接入都可以通过接入器(Connector)经过NMR路由转发后,进行输出,目前通过两种方式输出:一为System.out,另一为Soap(http)方式 可以通过Mule提供的工具生成配置图,如下: 3.2.2. 相关代码(The Echo Service) The echo Service is a POJO that implements an EchoService interface - public interface EchoService { public String echo(String echo); } The implementation (i.e the POJO to be managed by Mule) looks like - package ponents.simple; public class EchoComponent extends LogComponent implements EchoService { public String echo(String echo) { return echo; } } 3.2.3. 配置和说明 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mule-configuration PUBLIC "-//SymphonySoft //DTD mule-configuration XML V1.0//EN" " <!--整体配置--> <mule-configuration id="Mule_Echo_Sample" version="1.0"> <!--配置描述--> <description>描述</description> <!--连接器配置--> <connector name="SystemStreamConnector" className="org.mule.providers.stream.SystemStreamConnector"> <properties> <property name="promptMessage" value="Please enter something: "/> <property name="messageDelayTime" value="1000"/> </properties> </connector> <!--模型配置--> <model name="echoSample"> <mule-descriptor name="EchoUMO" implementation="ponents.simple.EchoComponent"> <!—接入点设置,目前为stream和axis两种类型--> <inbound-router> <endpoint address="stream://System.in"/> <endpoint address="axis:http://localhost:8081/services"/> </inbound-router> <!—输出点设置,目前为stream类型--> <outbound-router> <router className="org.mule.routing.outbound.OutboundPassThroughRouter"> <endpoint address="stream://System.out"/> </router> </outbound-router> </mule-descriptor> </model> </mule-configuration> 3.3. Webapp例子分析 这个例子其实是对原有几个例子在webapp的集成,通过使用MuleClient进行基于编码的调用。 Tips: 1、 可以通过干预web.xml,逐个加载需要揣摩的例子,便于分析; 2、 开始时,使用默认的加载方式。 3.3.1. echo例子 略 3.3.2. Hello例子 3.3.2.1. 介绍 本例子主要用于演示两个transformer、两个UMO之间的信息转换和事件交互。 Transformer: StringToNameString Transformer: NameStringToChatString GreeterUMO ChitChatUMO 3.3.2.2. 代码分析 几个java文件,说明如下: POJO/javabean: NameString.java ChatString.java SERVICE: Greeter.java ChitChatter.java Transformer: HttpRequestToString.java NameStringToChatString.java StringToNameString.java ChatStringToString.java 3.3.2.3. 配置 Web.xml <param-value>/WEB-INF/mule-config.xml, /WEB-INF/mule-echo-config.xml, /WEB-INF/mule-hello-config.xml </param-value> Mule-hello-config.xml <!--转换器à <transformers> <transformer name="StringToNameString" className="org.mule.samples.hello.StringToNameString" returnClass="org.mule.samples.hello.NameString"/> <transformer name="NameStringToChatString" className="org.mule.samples.hello.NameStringToChatString" returnClass="org.mule.samples.hello.ChatString"/> </transformers> <!-- A Mule descriptor defines all the necessary information about how your components will interact with the framework, other components in the system and external sources. Please refer to the Configuration Guide for a full description of all the parameters. --> <mule-descriptor name="GreeterUMO" implementation="org.mule.samples.hello.Greeter"> <inbound-router> <endpoint address="vm://greeter" transformers="StringToNameString"/> <endpoint address="servlet://greeter" transformers="StringToNameString"/> </inbound-router> <outbound-router> <router className="org.mule.routing.outbound.OutboundPassThroughRouter"> <endpoint address="vm://chitchatter"/> </router> </outbound-router> </mule-descriptor> <mule-descriptor name="ChitChatUMO" implementation="org.mule.samples.hello.ChitChatter"> <inbound-router> <endpoint address="vm://chitchatter" transformers="NameStringToChatString"/> </inbound-router> </mule-descriptor> Tips: 1、 endpoint 的address并没有实际的意义,但由于在整个Mule实例里面必须唯一,故可以理解为命名空间 2、 Transformer必须继承AbstractTransformer,主要实现doTransform接口方法 3.3.3. loanbroker 3.3.3.1. 介绍 异步实现: 同步实现: 3.3.3.2. 配置图 请参考:http://mule.codehaus.org/Loan+Broker+Example 3.3.3.3. 类图 3.3.3.4. 配置文件详细分析 <mule-configuration id="Loan_broker_Sync" version="1.0"> <!—定义EndPointà <endpoint-identifiers> <endpoint-identifier name="LoanBrokerRequests" value="vm://LoanBrokerRequests"/> <endpoint-identifier name="LoanBrokerQuotes" value="vm://LoanQuotes"/> <endpoint-identifier name="CreditAgency" value="axis:http://localhost:18080/mule/CreditAgencyService?method=getCreditProfile"/> <endpoint-identifier name="CreditAgencyReceiver" value="axis:http://localhost:18080/mule"/> <endpoint-identifier name="LenderService" value="vm://localhost/LenderService?method=setLenderList"/> <!-- The method parameter for the bank endpoints is added programmitcally when the bank objects are created --> <endpoint-identifier name="Bank1" value="axis:http://localhost:10080/mule"/> <endpoint-identifier name="Bank2" value="axis:http://localhost:20080/mule"/> <endpoint-identifier name="Bank3" value="axis:http://localhost:30080/mule"/> <endpoint-identifier name="Bank4" value="axis:http://localhost:40080/mule"/> <endpoint-identifier name="Bank5" value="axis:http://localhost:50080/mule"/> </endpoint-identifiers> <!-- LoanBroker Descriptorà <mule-descriptor name="LoanBroker" implementation="org.mule.samples.loanbroker.SyncLoanBroker">//说明这个类来发出请求而已,并不需要实现特殊接口 <inbound-router> <endpoint address="LoanBrokerRequests"/> </inbound-router> <outbound-router>// LoanBroker Descriptor有两个outbound,一个去访问信用代理,一个去获取贷款方列表 <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="CreditAgency"/> <filter expectedType="org.mule.samples.loanbroker.Customer" className="org.mule.routing.filters.PayloadTypeFilter"/> //信用代理,注意使用了filter,是为了确保CreditAgency的EndPoint对应的CreditAgencyService具有合适的参数 </router> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="LenderService"/> <filter expectedType="org.mule.samples.loanbroker.BankQuoteRequest" className="org.mule.routing.filters.PayloadTypeFilter"/> //贷款方代理,通过filter,使得只有类型为BankQuoteRequest的请求去访问 </router> </outbound-router> <response-router timeout="100000">//响应路由,通过聚合进行 <endpoint address="LoanBrokerQuotes"/> <router className="org.mule.samples.loanbroker.routers.BankQuotesResponseAggregator"/> </response-router> </mule-descriptor> <mule-descriptor name="CreditAgencyService"//默认获取用户信用信息的服务 inboundEndpoint="CreditAgencyReceiver" implementation="org.mule.samples.loanbroker.DefaultCreditAgencyService"> </mule-descriptor> <mule-descriptor name="LenderService"//借贷方服务 inboundEndpoint="LenderService" implementation="org.mule.samples.loanbroker.DefaultLenderService"> <outbound-router> <router className="org.mule.routing.outbound.StaticRecipientList"> <reply-to address="LoanBrokerQuotes"/>//reply-to描述了反馈的端点 <filter expression="recipients!=null" className="org.mule.routing.filters.MessagePropertyFilter"/> //这个过滤器的用处在于说明只有recipients!=null的情况下,才执行必要的逻辑 </router> </outbound-router> </mule-descriptor> <!—下面为几个银行的inbound配置,主要描述几个不同银行的输入à <mule-descriptor name="Bank1" inboundEndpoint="Bank1" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> <mule-descriptor name="Bank2" inboundEndpoint="Bank2" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> <mule-descriptor name="Bank3" inboundEndpoint="Bank3" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> <mule-descriptor name="Bank4" inboundEndpoint="Bank4" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> <mule-descriptor name="Bank5" inboundEndpoint="Bank5" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> </mule-configuration> 3.3.3.5. 通过ActiveMQ进行 上述例子是通过Axis1.3构造webservice进行的,很容易通过ActiveMQ来做,主要的调整只要重新定义Enpoint即可。 具体配置文件修改一下即可,如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mule-configuration PUBLIC "-//SymphonySoft //DTD mule-configuration XML V1.0//EN" " <mule-configuration id="Loan_broker_ASync" version="1.0"> <mule-environment-properties synchronous="false" serverUrl="" remoteSync="false"/> <!--Testing with ActiveMq--> <!-- <connector name="jmsConnector" className="org.mule.providers.jms.JmsConnector"> <properties> <property name="connectionFactoryJndiName" value="ConnectionFactory"/> <property name="jndiInitialFactory" value="org.activemq.jndi.ActiveMQInitialContextFactory"/> <property name="specification" value="1.1"/> <map name="connectionFactoryProperties"> <property name="brokerURL" value="tcp://localhost:61616"/> </map> </properties> </connector>--> <connector name="jmsConnector" className="org.mule.providers.jms.JmsConnector"> <properties> <property name="specification" value="1.1"/> <property name="connectionFactoryJndiName" value="ConnectionFactory"/> <property name="jndiInitialFactory" value="org.activemq.jndi.ActiveMQInitialContextFactory"/> <map name="connectionFactoryProperties"> <property name="brokerURL" value="vm://localhost"/> <property name="brokerXmlConfig" value="classpath:/activemq-config.xml"/> </map> </properties> </connector> <!-- testing with OpenJms --> <!--<connector name="jmsConnector" className="org.mule.providers.jms.JmsConnector">--> <!--<properties>--> <!--<property name="connectionFactoryJndiName" value="JmsQueueConnectionFactory"/>--> <!--<property name="jndiInitialFactory" value="org.exolab.jms.jndi.InitialContextFactory"/>--> <!--<property name="jndiProviderUrl" value="tcp://localhost:3035"/>--> <!--</properties>--> <!--</connector>--> <endpoint-identifiers> <endpoint-identifier name="LoanBrokerRequests" value="vm://LoanBrokerRequests"/> <endpoint-identifier name="LoanBrokerQuotes" value="jms://LoanQuotes"/> <endpoint-identifier name="CreditAgency" value="jms://CreditAgencyService"/> <endpoint-identifier name="CreditAgencyReceiver" value="jms://CreditAgencyReceiver"/> <endpoint-identifier name="LenderService" value="jms://LenderService"/> <endpoint-identifier name="Bank1" value="jms://Bank1"/> <endpoint-identifier name="Bank2" value="jms://Bank2"/> <endpoint-identifier name="Bank3" value="jms://Bank3"/> <endpoint-identifier name="Bank4" value="jms://Bank4"/> <endpoint-identifier name="Bank5" value="jms://Bank5"/> </endpoint-identifiers> <mule-descriptor name="LoanBroker" implementation="org.mule.samples.loanbroker.AsyncLoanBroker"> <inbound-router> <endpoint address="LoanBrokerRequests"/> </inbound-router> <outbound-router> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="CreditAgency"/> <filter expectedType="org.mule.samples.loanbroker.Customer" className="org.mule.routing.filters.PayloadTypeFilter"/> </router> <router className="org.mule.routing.outbound.FilteringOutboundRouter"> <endpoint address="LenderService"/> <filter expectedType="org.mule.samples.loanbroker.BankQuoteRequest" className="org.mule.routing.filters.PayloadTypeFilter"/> </router> </outbound-router> <response-router timeout="100000"> <endpoint address="LoanBrokerQuotes"/> <router className="org.mule.samples.loanbroker.routers.BankQuotesResponseAggregator"/> </response-router> </mule-descriptor> <mule-descriptor name="CreditAgencyService" inboundEndpoint="CreditAgencyReceiver" implementation="org.mule.samples.loanbroker.DefaultCreditAgencyService"> </mule-descriptor> <mule-descriptor name="LenderService" inboundEndpoint="LenderService" implementation="org.mule.samples.loanbroker.DefaultLenderService"> <outbound-router> <router className="org.mule.routing.outbound.StaticRecipientList"> <reply-to address="LoanBrokerQuotes"/> <filter expression="recipients!=null" className="org.mule.routing.filters.MessagePropertyFilter"/> </router> </outbound-router> </mule-descriptor> <mule-descriptor name="Bank1" inboundEndpoint="Bank1" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> <mule-descriptor name="Bank2" inboundEndpoint="Bank2" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> <mule-desc
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服