这两天将mule重构了一下,主要是类、包、配置文件的重命名;去除了mule的印记。其中配置文件主要是将xml文件的命名空间、顶级标签、以及xsd做了整理。大致记录如下。
类和包的命名重构很简单,在Eclipse中选择javaEE的视图,然后选中org.mule这个包名,右键选择Refactor》Rename。在对话框中将选项“Update Reference”下边的三个选项也都选中,剩下的就很简单了。
这个说起来简单,实际我也走了一段弯路。最开始没注意下边三个选项,结果一个子包一个子包的选中,然后Refactor,累个够呛。 :-) 后经人提醒才注意下边三个选项,于是一切都变得简单自然。
最复杂的是对于其配置文件的重构。在mule的xml配置文件中,第一:顶级标签必须是mule;第二:命名空间必须是类似于这样:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesource.org/schema/mule/core/2.2"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:jms="http://www.mulesource.org/schema/mule/jms/2.2"
xmlns:file="http://www.mulesource.org/schema/mule/file/2.2"
xsi:schemaLocation="
http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd
http://www.mulesource.org/schema/mule/jms/2.2 http://www.mulesource.org/schema/mule/jms/2.2/mule-jms.xsd
http://www.mulesource.org/schema/mule/file/2.2 http://www.mulesource.org/schema/mule/file/2.2/mule-file.xsd">
链接:http://www.mulesoft.org/documentation/display/MULE2USER/About+the+XML+Configuration+File
而我的目标就是不让mule这个词出现。好了,我们开始。
首先了解一下mule是如何配置的。在这个配置文件中可以看到其顶级标签是<mule>。不要误会,其实它只是采用了mule标准的Spring配置文件。(they are really just Spring configuration files with Mule-specific extensions)可以点击这里了解详细情况,感兴趣的话,你也可以利用这种机制写一套出来。只需要实现Spring的NamespaceHandlerSupport接口就行,三个方法:
init()
BeanDefinition parse(Element, ParserContext)
BeanDefinitionHolder decorate(Node, BeanDefinitionHolder, ParserContext)
具体描述参见刚才的链接,不难理解。
mule采用这样的方式实现:首先用一个抽象类AbstractMuleNamespaceHandler来封装,然后mule内部不同的命名空间再分别拓展它。譬如:MuleNamespaceHandler用来处理默认的命名空间,也就是core;JmsNamespaceHandler处理jms命名空间。
那么Spring是如何找到命名空间对应的handler的呢?在META/INF下边有两个以spring开头的文件:spring.handlers和spring.schemas.前者是用来查找namespace handler的,后者是用来查找xml schema(xsd)文件的。
spring.handlers存储的数据类似这样:
http\://www.mulesource.org/schema/mule/acegi/2.2=org.mule.module.acegi.config.AcegiNamespaceHandler
这里出现斜杠\是因为冒号需要转一下。通过这个文件,Spring就能找到在xml配置文件碰到的namespace应该用那个handler来处理。
spring.schemas存储的数据类似这样:
http\://www.mulesource.org/schema/mule/acegi/2.2/mule-acegi.xsd=META-INF/mule-acegi.xsd
通过这个文件Spring直接在META-INF下找到其xsd文件,完成对xml配置的校验。
需要注意的是,mule将这两个文件按照不同的命名空间拆分,分别放到各自的jar下面(我们都知道mule分了n个jar)。这是spring允许的。不过也给重构带来了麻烦,需要将他们分别替换,或者像我一样,把他们拷贝到一起。
明白了原理,我们就可以动手了。统一替换掉所有mule的命名空间,包括所有的xsd文件,spring.schemas与spring.handlers文件,以及default-mule-config.xml文件。重新打包,运行示例... 出错!
为什么出错呢?一种原因是替换的不干净,存在漏掉的命名空间。还有一个原因就是mule的源码需要修改一下,呵呵,在哪里改呢?在SpringXMLUtils。里边有个方法isMuleNamespace,根据声明的常量 public static final String MULE_NAMESPACE_PREFIX = "http://www.longtop.com/schema/esb/";来判断是否为mule的命名空间。解决方式很简单,把这个常量改掉,或者向我一样,直接将isMuleNamespace改为返回true。这样以后就命名空间无关了。OK,打包,运行示例,没问题。
下一个要动的是xml的顶级标签<mule>。找到mule.xsd,修改这个: <xsd:element name="mule" type="muleType">。将其name改成你想要的。然后修改default-mule-config.xml里<mule:mule>标签体,替换掉所有的mule为你刚才改的名称。打包,运行,出错。
呵呵,还要修改源码。将AbstractMuleBeanDefinitionParser中的ROOT_ELEMENT修改成新的标签名字;在MuleNamespaceHandler的init()方法的registerIgnoredElement("mule");后加一行registerIgnoredElement("yourtag");将你修改后的标签名字在这里注册一下。 打包,运行示例,OK!
接下来将所有带mule字样的配置文件都一一替换掉,注意胆大心细!
运行一下,基本已经改头换面了。
分享到:
相关推荐
Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...
Mule是一个企业服务总线(ESB)消息框架,而且Mule是一个轻量级且高度可扩展的ESB。
mule in action 和doc文档详细介绍 Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议...
mule -esb 源码
Mule in Action, Second Edition is a totally-revised guide covering Mule 3 fundamentals and best practices. It starts with a quick ESB overview and then dives into rich examples covering core concepts ...
mule,mule esb,Mule,ESB
关于在tomcat上进行mule多线程数量参数配置
Mule is the most widely used open source ESB-with millions of downloads-providing an alternative to expensive commercial options. Mule in Action is acomprehensive tutorial designed for working Java ...
Mule ESB 项目在Linux中的部署与开发与应用案例
mule入门文档 mule入门文档 mule入门文档mule入门文档
文档主要介绍了Mule ESB的使用方法,并结合具体实例加深对ESB的理解,对新手很有帮助哦!
Mule是一个以Java为核心的轻量级的消息框架和整合平台,基于EIP(Enterprise Integeration Patterns,由Hohpe和Woolf编写的一本书)而实现的。Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一...
mule基本节点解释汇总 <mule> .... ....... ..... ... </mule>
Mule原理图和ESB设计Mule原理图和ESB设计Mule原理图和ESB设计Mule原理图和ESB设计
mule的最新版本mule-standalone-3.1.1
Mule ESB应用部署 Mule ESB应用的目录结构,配置文件说明
Mule企业版、社区版功能比较