itstarting:IT进行时

想自己所想,做自己所爱

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 3 文章 :: 55 评论 :: 0 Trackbacks

从形势来看,如果应用不使用 Spring 就感觉有点落伍——说法有点别扭:好像有点过。诚然, Spring 给我们带来了太多的好处,以至于几乎大部分的产品都以声称能够整合 Spring 为荣, Mule 也不能免俗:)

从官方来看, mule spring 的结合有三种做法:

1 Using Spring as a Component Factory

How to configure the Spring Container with Mule so that Managed components and other Mule objects can be loaded from Spring.

2 Configuring the Mule Server From a Spring Context

A Mule server is just a bunch of beans! How to load a Mule instance from the Spring Container.

3 Configuring a Spring context using Mule Xml

There are lots of reasons why you might want to use Mule and Spring together, but configuring Mule in Spring bean Xml can be a verbose process. Now you can configure it using Mule Xml and mix Spring beans in the configuration.

1.1.1.          Using Spring as a Component Factory

我下面首先尝试的是第一种。

1.1.1.1.      web.xml

       <context-param>

              <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/applicationContext-mule.xml

        </param-value>

       </context-param>

 

       <listener>              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

1.1.1.2.      配置文件(举例)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

       <bean id="muleManager" class="org.mule.extras.spring.config.AutowireUMOManagerFactoryBean" destroy-method="dispose" singleton="true"/>

 

    <bean id="muleNameProcessor" class="org.mule.extras.spring.config.MuleObjectNameProcessor"/>

 

    <bean id="muleClient" class="org.mule.extras.client.MuleClient" depends-on="muleManager"/>

 

    <bean id="applicationEventMulticaster" class="org.mule.extras.spring.events.MuleEventMulticaster">

        <property name="asynchronous">

            <value>false</value>

        </property>

    </bean>

 

    <bean name="JmxAgent" class="org.mule.management.agents.JmxAgent"/>

    <bean name="JdmkAgent" class="org.mule.management.agents.JdmkAgent">

        <property name="jmxAdaptorUrl" value="http://localhost:9999"/>

    </bean>  

 

    <bean id="echoDescriptor" class="org.mule.impl.MuleDescriptor">

        <property name="inboundEndpoint">

            <ref local="echoInboundEndpoint"/>

        </property>

        <property name="implementation">

            <value>echoComponent</value>

        </property>

   </bean>

  

    <bean id="echoInboundEndpoint" singleton="false" class="org.mule.impl.endpoint.MuleEndpoint">

        <property name="endpointURI">

            <bean class="org.mule.impl.endpoint.MuleEndpointURI">

                <constructor-arg index="0">

                    <value>vm://echo</value>

                </constructor-arg>

            </bean>

        </property>

    </bean>

 

       <bean id="echoComponent" class="org.mule.components.simple.EchoComponent" singleton='false'/>

</beans>

1.1.1.3.      评价

这种方法是比较纯的 spring 配置手段 ( 注意在此使用的 DTD spring-beans.dtd) ,不利于把握 mule 的配置感觉。不推荐使用。

1.1.2.          Configuring a Spring context using Mule Xml

1.1.2.1.      Web.xml

       <context-param>

              <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/applicationContext-mule.xml,

                     /WEB-INF/ede-config.xml

        </param-value>

       </context-param>

 

       <listener>             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

 

1.1.2.2.      配置文件(举例, applicationContext-ede-core.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mule-configuration PUBLIC "-//SymphonySoft //DTD mule-configuration XML V1.0//EN" "http://www.symphonysoft.com/dtds/mule/mule-spring-configuration.dtd">

 

<mule-configuration id="EdeCore" version="2.0">

       <!-- 描述 -->

       <description>Enterprice DataExpress</description>   

       <mule-environment-properties synchronous="true" serverUrl="tcp://localhost:9999">

              <queue-profile maxOutstandingMessages="1000" persistent="true"/>

       </mule-environment-properties>

 

    <agents>

        <agent name="JmxAgent" className="org.mule.management.agents.JmxAgent"/>

        <agent name="JdmkAgent" className="org.mule.management.agents.JdmkAgent"/>

              <properties>

                     <property name="jmxAdaptorUrl" value="http://localhost:9999"/>

              </properties>

    </agents>

 

       <model name="Nothing"></model>

</mule-configuration>

1.1.2.3.      配置文件(举例, applicationContext-ede-extend.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mule-configuration PUBLIC "-//SymphonySoft //DTD mule-configuration XML V1.0//EN" "http://www.symphonysoft.com/dtds/mule/mule-spring-configuration.dtd">

 

<mule-configuration id="EDE" version="1.0">

       <!--

       <description>Enterprice DataExpress</description>   

       <mule-environment-properties synchronous="true" serverUrl="tcp://localhost:9999">

       <queue-profile maxOutstandingMessages="1000" persistent="true"/>

       </mule-environment-properties>-->

      

    <mule-descriptor name="echoUMO" implementation="echoComponent">

        <inbound-router>

            <endpoint address="vm://echo"/>

        </inbound-router>

    </mule-descriptor>

 

       <bean id="echoComponent" class="org.mule.components.simple.EchoComponent" singleton="false"/>

</mule-configuration>

1.1.2.4.      评价

这种方法是比较 Mule-friendly 的配置手段 ( 注意在此使用的 DTD mule-spring-configuration.dtd) ,从整体感觉来看,与一般的纯 Mule 配置感觉类似。

推荐使用。

1.1.3.          自定义方式

从产品研发来看,自定义模型配置加载方式有着诸多的好处,这里不讲。

我们的自定义模型配置加载方式的目标是:

1、              可以兼容标准的基于 mule 配置文件配置的模型,同时也要兼容根据其他定义方式(如基于数据库)的可编程式模型加载;

2、              可以更多的干预系统默认的加载方式。

1.1.3.1.      Web.xml

<context-param>

        <param-name>com.nci.ede.config</param-name>

        <param-value>applicationContext-ede-core.xml,

                     applicationContext-ede-extend.xml,

                     applicationContext-sample-echo2.xml

        </param-value>

    </context-param>

 

    <listener>

        <listener-class>com.nci.ede.system.config.EdeBuilderContextListener</listener-class>

    </listener>

 

这里有一个重要的 Listener ,用来在系统启动的时候自动加载配置信息,其核心代码如下:

public void contextInitialized(ServletContextEvent event)

    {

        String config = event.getServletContext().getInitParameter(CONFIG_INIT_PARAMETER);

        if (config == null) {

            config = getDefaultConfigResource();

        }

        try {

            createManager(config, event.getServletContext());

        } catch (ConfigurationException e) {

            event.getServletContext().log(e.getMessage(), e);

        }

    }

    protected UMOManager createManager(String configResource, ServletContext context) throws ConfigurationException{

        //WebappMuleXmlConfigurationBuilder builder = new WebappMuleXmlConfigurationBuilder(context);

        SpringConfigurationBuilder builder = new SpringConfigurationBuilder();

        UMOManager manager = builder.configure(configResource);       

        try {

           // 通过 spring bean factory 获取

           EdeConfigurationLoader loader = (EdeConfigurationLoader)SpringHelper.getBean(manager,"edeConfigurationLoader");

           loader.loadConfig();

                   } catch (ObjectNotFoundException e1) {

                            e1.printStackTrace();

                   } catch (EdeException e) {

                            e.printStackTrace();

                   }

        return manager;

    }

其中所调用的自定义加载器 edeConfigurationLoader 可以在 spring 中注入。

posted on 2006-08-29 16:00 IT进行时 阅读(6132) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: