分析问题:
1、解决ibatis多数据库兼容的问题,实际上就是让ibatis可以自动选择不同数据库sqlmap配置文件。
2、打开ibatis源码工程并进行代码跟踪,最终定位到com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.java处,系统中运行的sqlmap节点均从这里统一转化加载的。
3、很明显SqlMapConfigParser源码中的addSqlMapNodelets负责解析“/sqlMapConfig/sqlMap”路径,即也就是sqlmap文件路径。
4、要实现“多数据库兼容”,这里改造下这个方法即可。
解决方法:
1、首选我们在节点新增一个“DBProductName”用于判断数据库种类。当然通过java.sql.DatabaseMetaData也可以获得,但这太依赖于jdbc驱动,还是手动配置保险。
2、重构SqlMapConfigParser的addSqlMapNodelets方法。
" 1)首选获得单个sqlmap文件的位置,如 sqlmap主目录\XXX.xml;
2)依据上面设置的DBProductName属性值获得数据库类型;
3)将sqlmap的文件路径重定位到运行数据库类型文件下。如 sqlmap主目录\mysql\XXX.xml,代表程序当前运行于msql数据库上,并加载系统mysql数据库对应的 sqlmap文件"
4、ok,现在ibatis支持“多数据库兼容”了(完整源码见附件)。
使用方法:
1、编译SqlMapConfigParser.java生成可运行文件SqlMapConfigParser.class(见附件),并将其覆盖添加到ibatis.jar中。
2、在系统sqlmap配置文件存放主目录如src\conf\mapping添加多数据库兼容支持的子目录,如src\conf\mapping\mysql,src\conf\mapping\oracle等
3、以实际项目需要编写多数据库sqlmap配置文件。注意:不同数据库类型需要确保具有相同的sqlmap配置文件名和sql节点名
4、在ibatis主配置文件(如sql-map-config.xml)中,指定当前程序运行数据库类型
好像一台机子是不可能完成的两台机子一台安装8i一台安装10g倒可以解决方案如下:
1、用oracle8i客户端的exp命令将sun250上的数据导出到某台pc机客户端。Exp导出时选择JSERP用户和ERPUSER3用户,分别到成数据文件jserp.dmp和erpuser3.dmp.
2、在新的oracle10g数据库中建立DBERP和DBSYS表空间,分别建立用户JSERP和ERPUSER3,对其分配权限,要与oracle8i中的表空间和用户的设置完全一样。
3、在oracle8i客户端用imp命令将刚才导出的数据文件jserp.dmp和erpuser3.dmp上传到sunv890上的oracle10g,上传时也是选择上传用户。上传完毕后,将sun250的网线拔掉,将sunv890的网线插上。4、修改SunV890的IP和机器名,改ip:(改为sun250的ip,由10.11.1.19改为10.11.1.11)。
$ Vi /etc/hosts
改机器名: (改为sun250的机器名,由hssun改为jgsun)
$ Vi /etc/nodename
$ Vi /etc/hosts
$ Vi /etc/hostname.ge0
$ reboot
5、此时发现reboot后,监听、数据库和iSqlplus的服务还都可以起来,只是EM的服务启动不起来了!
6、Emctl start dbconsole
出现如下错误:
找不到路径
oracleproduct10.2.0Db_1hssun_ora8
oracleproduct10.2.0Db_1oc4jj2eeoc4j_DBConsole_hssun_ora8
我将上面两个文件夹的名称中的hssun改为jgsun。可以继续启动了,但是最后还是起不来。
7、搜索jgsun_ora8sysman目录下的config目录和emd目录,找到所有含有hssun的文件,改为jgsun,log文件不用修改。
此时,em服务可以成功启动了,但是em界面运行不正常。Em界面中主机名还是hssun,许多连接打不开。
8、$ emca –config dbcontrol db (这是oracle10g的命令,8i和9i是emca -r)
输入以下信息:
SID:ora8 (同sun250上的oracle8i的SID)
Listener port number: 1521
Sys 口令:******
……
好了,再次emctl start dbconsole EM就可以正常运行了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)