当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

对schema文件修改后不需要重启workbench的解决方法

发表于: 2009-09-18   作者:dinguangx   来源:转载   浏览次数:
摘要: 在使用mondrian的workbench进行schema文件设计的时候,由于workbench会对打开的schema文件进行缓存,所以在每次修改完schema文件后,都需要重新启动workbench才能保证在进行MDX query时得到正确的处理结果.这对于开发和测试来说就显得非常的不方便了.通过查找mondrian GUI的源代码,最终找到了解决的方法:当在mdx query查询界面中点击&q
在使用mondrian的workbench进行schema文件设计的时候,由于workbench会对打开的schema文件进行缓存,所以在每次修改完schema文件后,都需要重新启动workbench才能保证在进行MDX query时得到正确的处理结果.这对于开发和测试来说就显得非常的不方便了.通过查找mondrian GUI的源代码,最终找到了解决的方法:当在mdx query查询界面中点击"connect"按钮时,将mondrian缓存中的缓存信息清除,重新创建一个连接,这样就可以达到修改schema文件后不需要重启workbench的目的了.
具体的源码修改过程如下:
在类mondrian.gui.QueryPanel中找到connectButton的事件处理函数connectButtonActionPerformed(),找到获取连接的代码
Connection con = DriverManager.getConnection(connectString, null);
在其上面增加下面的代码
if(evt != null){// 由于这个方法会在打开query界面的时候被调用,增加这个判断是为了保证是在单击过connectButton之后才进行缓存的清理
	            LOGGER.debug("dinguangx:remove the cache.>connectionstring ->"+connectString+"");
	            PropertyList property = Util.parseConnectString(connectString);
	            String jdbcUser = SchemaUtil.getJdbcUser(property);
	            String connectionKey = SchemaUtil.getConnectionKey(property);
	            String catalogUrl = SchemaUtil.getCatalogUrl(property);
	            String strDataSource = SchemaUtil.getStrDataSource(property);
            	new CacheControlImpl().flushSchema(catalogUrl,connectionKey,jdbcUser, strDataSource);
            }
        	//end.
            Connection con = DriverManager.getConnection(connectString, null);

其中用到了一个类是SchemaUtil,这个类中的代码是从mondrian的源代码中提取出来的,整个SchemaUtil类的代码如下:
public class SchemaUtil {
        public static String getConnectionKey(PropertyList pl){

		String jdbcConnectString = pl.get(RolapConnectionProperties.Jdbc.name());
		String connectionKey = jdbcConnectString+getJdbcProperties(pl).toString();
		return connectionKey;
	}
	
	public static String getJdbcUser(PropertyList pl){

		return pl.get(RolapConnectionProperties.JdbcUser.name());
	}
	public static String getStrDataSource(PropertyList pl){

		return pl.get(RolapConnectionProperties.DataSource.name());
	}
	public static String getCatalogUrl(PropertyList pl){
		
		return pl.get(RolapConnectionProperties.Catalog.name());
	}
	
	private static Properties getJdbcProperties(Util.PropertyList connectInfo)
	{
		Properties jdbcProperties = new Properties();
		for (Pair<String, String> entry : connectInfo)
		{
			if (entry.left
					.startsWith(RolapConnectionProperties.JdbcPropertyPrefix))
			{
				jdbcProperties.put(entry.left
						.substring(RolapConnectionProperties.JdbcPropertyPrefix
								.length()), entry.right);
			}
		}
		return jdbcProperties;
	}
}

对schema文件修改后不需要重启workbench的解决方法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
大家知道,asp.net中,如果我们修改了配置文件只要把它保存之后,就会立刻反应到程序中, 并不需要
转自:http://www.shootsoft.net/110 今日用MySQL Workbench进行数据库的管理更新时,执行一个更新
在Eclipse切换perspective时出现错误:“unable to read workbench state ...”,解决方法如下: 删
使用普通用户编辑nginx.conf 等配置文件: 保存的时 候会提示:没有Root Permission 可以用如下方法
客户端报错(配图): 出现问题环境:在新建一个表之后,又想添加一个字段保存表,提示错误。 解决方案
Schema中的elementFormDefault elementFormDefault取值:qualified 或者 unqualified 在http://www.
spring官方jar文档中找到全部schema配置信息: <?xml version="1.0" encoding="UTF-8"?> <
Schema中的elementFormDefault elementFormDefault取值:qualified 或者 unqualified 在http://www.
使用MONOKAI主题颜色之后,当文件在PHPSTORM中进行编辑,文档内容变化时,左侧项目文件列表中的文件
一直不太清楚为什么在PHP文件中不使用”?>”的好处,今天查看手册发现了 如下内容:Note: 文件末
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号