前面介绍Mule ESB使用的系列文章中咱们使用了自定义的Java Transformer和Java Component,用于接收和处理Mule Message。然而咱们使用的Transformer和Component都必须实现AbstractTransformer接口或者org.mule.api.lifecycle.Callable接口,这使得普通的POJO对象没法直接被Mule ESB流程引用,必须填写实现接口的代码。这样不只增长了代码开发的工做量,并且进行单元测试时没法脱离Mule ESB Container进行,具备很大的局限性。api
从Mule ESB 3开始,引入了entry point resolver机制,Mule Flow在引用自定义Component时,同时定义对应的entry point resolver, 使得在Component没有实现接口的前提下,Mule ESB能够准确匹配到Component对应方法,将Mule Message传送给这些方法处理。Mule ESB将这一策略称为entry-point resolution strategy(EPRS),下图显示了Mule ESB如何使用EPRS进行Mule Message传递(Mule in Action 第二版的6.1中原来有配图,不过它基于Mule ESB 3.3版本,已经不适用于当前Mule ESB 3.8版本,所以我从新绘制了流程图)单元测试
1)当消息到达Flow中定义的Component时,Mule会检查是否认义了EPRS(能够定义在Flow级别,Component级别,后者定义的entry-point resolver能够覆盖前者定义的entry-point resolver),若是没有定义,Mule会使用默认的entry-point resolver。测试
2)Mule根据entry-point resolver寻找匹配的entry point,若是没有找到,会抛出Failed find entry point for component的异常消息。若是找到匹配的entry point,不论有多少个,会执行第一个匹配的entry point。component
Mule ESB中定义的entry point resolver有如下几种:orm
下面将对这些Entry Point Resolver进行逐一介绍对象