日期:2014-05-20  浏览次数:20759 次

用过mule-esb的请进来一下 (via TranXcode)
mule-esb中的file构建可以设置文件夹路经path,当mule启动后会自动地会对该path路径进行监控。
不知道各位有没有用过这个file构件,如果用过的话,有没有实现过通过程序自动更改path路经,并且立即见效。因为我现在能想到的方法就是更改xml文件,然后重新启动mule服务,这样更新一次path路径生效速度将很慢。不知道有哪位大侠对mule进行研究过,是否知道mule里面提供没提供更改file构件中path路径中的方法。

感激不尽。
XML code
<flow name="File1">
        <file:inbound-endpoint connector-ref="input"
            path="C:\file">
            <file:filename-wildcard-filter pattern="*.*" />
        </file:inbound-endpoint>
        <log-component />
        <component>
            <singleton-object class="com.tt.MessageEngineFileClient" />
        </component>
    </flow>


------解决方案--------------------
我是LZ。

没想到竟然一个用户只能连续回复3次,CSDN真不够热情。连个顶帖的都没有,只能上另外一个号了。

还是自己把问题解决了。下面说下我的解决办法,万一有人碰到类似的问题也算是个方法吧。
------解决方案--------------------
先说思路:由于mule服务装载到Spring的过程是这样的:先根据xml文件创建builder,然后再把Spring上下文context设为builder的父级上下文,然后再根据builder来创建mule上下文,这样mule就启动并且自动装载到Spring中去了。

现在我要先修改mule-config.xml文件(JDom),修改xml文件之后必须重新创建一个builder,重新创建builder之后又得放到Spring上下文context中去,所以context要设为静态变量。builder重新创建之后就得重新创建一个muleContext,这里我是直接用了原来的muleContext,所以muleContext也设为静态的了,先把muleContext Stop之后设为null,然后再创建一个新的 start。这样mule服务就实现了重新启动。 

上代码:
Java code

private static MuleContext muleContext;

private static ApplicationContext context;

/**
 * 停止mule上下文服务
 * 
 * @throws MuleException
 */
private static void stopMuleContext() throws MuleException {
    if (muleContext != null) {
        muleContext.stop();
        muleContext = null;
    }
}

/**
 * 启动mule上下文服务
 * 
 * @throws MuleException
 */
private static void startMuleContext() throws MuleException {
    SpringXmlConfigurationBuilder builder = new SpringXmlConfigurationBuilder(
            "mule-config.xml");
    builder.setParentContext(context);
    muleContext = new DefaultMuleContextFactory()
            .createMuleContext(builder);
    muleContext.start();
}

/**
 * 重新启动mule服务
 * 
 * @param sendDir
 */
public static void restartMuleService(String sendDir) {
    try {
        MuleLoader.stopMuleContext();
        logger.info("ESB关闭成功");
    } catch (MuleException e) {
        e.printStackTrace();
        logger.error("ESB关闭失败");
    }
    try {
        JdomForXml.modifyMuleConfigXml(sendDir);
    } catch (Exception e1) {
        e1.printStackTrace();
        logger.error("'mule-config.xml'配置文件中File构件的path路径更改异常");
    }
    try {
        MuleLoader.startMuleContext();
        logger.info("ESB重启成功");

    } catch (MuleException e) {
        e.printStackTrace();
        logger.error("ESB重启失败");
    }
}

------解决方案--------------------
大伙啊,给点热情。我也遇到同样的问题了