`
adamzhao
  • 浏览: 100944 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mule改头换面历程

    博客分类:
  • Java
阅读更多
       这两天将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 IDE (mule ESB)

    Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...

    mule -esb 源码

    《深入解析Mule ESB源码》 Mule ESB(Enterprise Service Bus,企业服务总线)是一款开源的集成平台,旨在简化企业级应用之间的数据交互。本文将围绕Mule ESB的源码进行深入探讨,揭示其核心设计理念与工作原理。 ...

    mule文档详解 mule

    **Mule ESB详解** Mule ESB,全称为Mule Enterprise Service Bus,是由MuleSoft公司开发的一款强大且灵活的企业服务总线。它是一种中间件,旨在促进不同应用程序之间的数据交换,通过提供一个集成平台来连接各种...

    mule开发环境搭建和部署

    "Mule开发环境搭建和部署" Mule是当前流行的企业服务总线(Enterprise Service Bus, ESB),它提供了一个灵活、可扩展、高性能的集成平台。构建Mule开发环境是Mule应用程序的基础,以下将对Mule开发环境的搭建和...

    Mule企业版、社区版功能比较

    Mule 企业版和社区版功能比较 Mule 企业版和社区版是两种不同的Mule版本,主要区别在于功能、安全性和可靠性等方面。本文将对Mule 企业版和社区版的功能进行比较,帮助用户选择合适的Mule版本。 一、功能框架 ...

    mule-standalone-3.9.0.zip

    Mule ESB(企业服务总线)是一款强大的集成平台,由Mulesoft公司开发,用于构建和管理企业级的应用程序网络。"mule-standalone-3.9.0.zip"是一个包含Mule ESB独立运行时环境的压缩包,版本为3.9.0。在本文中,我们将...

    mule web service exsample

    【Mule Web Service 示例】 Mule ESB(Enterprise Service Bus)是一种强大的集成平台,它允许开发者轻松地构建和部署分布式应用程序。在这个示例中,我们将深入探讨如何使用Mule来发布Web服务,这是一种允许不同...

    MULE ESB-4.1企业版运行环境

    MULE ESB(Mule Enterprise Service Bus)是Anypoint Platform的核心组件,它是一个强大的、全面集成的企业服务总线(ESB),专为构建、部署和管理API和集成解决方案而设计。MULE ESB-4.1是MuleSoft公司推出的企业版...

    mule in action 即mule实战源码

    《Mule in Action》是关于Mule ESB的实战指南,该书深入浅出地介绍了如何使用Mule这一强大的企业服务总线(ESB)进行应用程序集成。Mule ESB以其用户基数庞大、文档详尽以及社区活跃而备受赞誉,是企业级集成解决...

    Mule ESB手册-中文版

    根据提供的文件内容,以下是关于Mule ESB手册-中文版的知识点: 1. Mule ESB简介 Mule ESB(Enterprise Service Bus)是MuleSoft公司开发的一款企业服务总线产品,它允许企业内部和不同企业之间的服务进行集成,...

    MULE ESB-4.1社区办运行环境

    **MULE ESB-4.1社区版运行环境详解** MULE ESB(Message Broker Enterprise Service Bus)是一款强大的企业级服务总线,由Mulesoft公司开发,它提供了一个集成平台,用于连接各种应用程序和服务,实现数据的高效...

    Mule与MQ集成

    【Mule与MQ集成】是关于整合Mule ESB(企业服务总线)与消息中间件,如Apache ActiveMQ的开发文档。Mule是一个开源的ESB,它提供了一个平台来连接各种应用系统,实现数据交换和服务集成。而ActiveMQ则是Apache软件...

    Mule3.4入门学习

    "Mule3.4入门学习" 本文将对Mule3.4进行入门学习,涵盖Mule环境搭建、Webservice的发布、JMS消息通信、ftp、File应用、协议转换等知识点。 一、Mule环境搭建 Mule环境的搭建需要JDK的支持,包括下载、安装、配置...

    mule-社区版-3.8.1.rar

    mule号称开源ESB的最好实现,一个以Java为核心的轻量级的消息框架和整合平台。它使得开发人员可以快速,简单的连接多个应用。 目前许多公司都使用了Mule,比如Walmart,HP,Sony,Deutsche Bank 以及 CitiBank等公司。...

    MULE用户指南3.3

    **MULE用户指南3.3** 是一份针对MULE企业服务总线(ESB)的官方文档,旨在帮助用户理解并有效地使用MULE 3.3版本。MULE ESB是一个开源的企业级集成平台,它提供了灵活且强大的工具来连接各种系统、应用程序和服务,...

    Mule 实现路由分发

    在IT行业中,Mule是一个强大的企业服务总线(ESB)和集成平台,它允许开发者构建和部署可扩展的应用程序和服务。"Mule实现路由分发"这一主题涉及到Mule如何处理消息的传递和定向,这在分布式系统和微服务架构中是至...

    MuleESB帮助文档

    《Mule ESB详解——构建企业级集成解决方案》 Mule ESB,全称为Mule Enterprise Service Bus,是一款强大的开源企业服务总线,用于构建灵活、可扩展的企业级集成解决方案。Mule ESB的核心功能是作为不同应用系统...

Global site tag (gtag.js) - Google Analytics