页面树结构
转至元数据结尾
转至元数据起始

1、简介

Smartbi 使用代码进行知识库版本的维护,当扩展插件中需要往知识库中添加库表、修改库表或自动插入初始化数据时,就必须添加相应的升级类进行知识库版本的维护。 知识库升级类的编写按以下规范:

文档目录:

1、在扩展插件中必须通过applicationContext.xml文件声明至少一个组件(见自定义Module),该组件的类名为类似于 smartbi.extension.test.TestExtensionModule,并必须将此组件向framework模块注册,例如:

<bean id="framework" class="smartbi.framework.Framework" factory-method="getInstance">
		<property name="modules">
			<map>
				<entry><key><value>TestExt</value></key><ref bean="testExt"/></entry>
			</map>
		</property>
</bean>
<bean id="testExt" class="smartbi.extension.test.TestExtensionModule" factory-method="getInstance" > 
		<property name="daoModule">
			<ref bean="dao" /> 
		</property>
</bean>

 

2、升级类固定在module所在包upgrade包中上述示例中升级包名为 smartbi.extension.test.upgrade。

3、编写继承 smartbi.repository.UpgradeTask类的升级类,,以UpgradeTask开头,后接New或者版本号(譬如UpgradeTask_0_0_1),第一个版本必须命名为UpgradeTask_New;

3、升级类有两个方法需要实现:

  1. public abstract boolean doUpgrade(Connection conn, DBType type); 升级类的具体实现,Smartbi会调用该方法执行升级任务,返回true表示升级成功,返回false表示升级失败。 由于数据库类型存在差异,创建表、添加字段等SQL的语法不相同,因此建议使用 smartbi.repository.UpgradeHelper类中的方法生成相应的SQL语句,避免不同类型的知识库迁移时存在问题,同时如果使用了StatementPreparedStatement记得关闭。
  2. public abstract String getNewVersion(); 声明当知识库升级成功以后当前组件的知识库版本号,格式应该为"0.0.1"。Smartbi会根据返回的版本号查找下一个升级类继续下一版本的升级。 例如:当UpgradeTask_New.getNewVersion()返回"0.0.1"时,Smartbi会试图加载UpgradeTask_0_0_1升级类,若加载成功并执行升级成功,Smartbi会继续试图加载UpgradeTask_0_0_1.getNewVersion()返回版本号"0.0.2"的升级类UpgradeTask_0_0_2,直到查找不到更高版本的升级类为止。
  3. Smartbi会重复上面的升级,直到找不到更高版本的升级类为止。


2、示例说明

这个示例建议可以和知识库对象示例一起看。

在升级类"UpgradeTask_New.java"中创建了一个知识库表,该表与"ExtSample9_2_A.java"中的描述相对应。另外还有两个升级类"UpgradeTask_0_0_1.java" 和 "UpgradeTask_0_0_2.java",其中前者仅仅是修改了模块的版本号,后者则往上述知识库表中增加一个字段。总共有3个升级类,该模块的当前版本为最后一个升级类(在此为"UpgradeTask_0_0_2.java")的"getNewVersion()"方法的返回值(源码中该值为"0.0.3")。测试界面如下:


3、示例代码下载

示例代码下载: Sample9_2.rar

 

  • 无标签