一、DM外部函数介绍:
DM7 支持自定义C、 JAVA 外部函数,能够在DM的sql中直接调用,就像数据库内部自定义函数一样。这种技术打通了与外部运行环境接口、通道。 这样的好处:
(1)可以自定义更灵活的函数,实现一些暂时不支持的数据库函数特,用法十分灵活;
(2)即使外部函数在执行中出现了任何问题,都不会影响到服务器的正常执行。
外部函数使用步骤
DM 提供了 dm.ini参数 ENABLE_EXTERNAL_CALL 来开关外部函数功能
ENABLE_EXTERNAL_CALL=1,外部函数功能开关打开,当然需要重启数据库。
达梦有两种代理工具dmap和dmagent,dmap提供dmrman的备份恢复和C外部函数的代理服务;dmagent提供JAVA外部函数、WEB监控和集群部署工具的代理服务;
所以根据不同类型的外部函数开启对于的代理服务是另一个必要条件。
下面以创建JAVA代理函数为例,介绍具体创建步骤
二、 java外部函数创建的步骤
1. 如上所述设置dm.ini参数 ENABLE_EXTERNAL_CALL=1;
2. 设置dmagent使用外部函数代理模式,run_mode=0(默认值是1)
3.设置数据服务器和dmagen的通信端口保持一致,使用外部函数时,dm.ini中的 EXTERNAL_JFUN_PORT 和dmagent的ap_port保持一致,数据库安装后默认ap_port=6363,EXTERNAL_JFUN_PORT是空;
打开代理配置文件config.properties,在dmdbms\tool\dmagent目录下
#[General]
#run_mode values:
#0 - assist process
#1 - assist process & monitor
#2 - assist process & monitor & deployer
run_mode=0 (选择0,assist process)
ap_port=6363 (dm.ini中也设置EXTERNAL_JFUN_PORT=6363,以保持二者一致)
rmi_port=6364
4. 创建外部函数目录external_jar ,JAR 包必须存放在指定的路径,dm数据库完整安装版本放在/bin/external_jar 目录下,执
行码版本放在 dmserver 的同级 external_jar 目录下;
5. 配置好java运行环境后,启动dmagent服务器,dmagent 命令行模式运行脚本DMAgentRunner.bat,服务模式启动执行DMAgentService.bat start,bat文件在dmdbms/tool/dmagent下
6. 在java开发工具myeclipse上创建project、package、class,如下图所示
7. 新建3个方法,testAdd求和,testStr输出打印字符串,strCompare功能类似数据库函数inst
package com.test.package1;
public class test {
/**
* @param args
*/
public static int testAdd(int a, int b) {
return a + b;
}
public static String testStr(String str) {
return str + " hello";
}
public static int strCompare(String str1,String str2)
{
int c =0;
if(str1==null)
return 0;
if(str1.indexOf(str2) != -1)
{
c=(str1.indexOf(str2))+1;
return c;
}
else
return 0;
}
}
8. 打开dm数据库管理工具客户端,创建外部函数
CREATE OR REPLACE FUNCTION MY_INT(a int, b int)
RETURN int
EXTERNAL 'd:\dmdbms\bin\external_jar\test2.jar' "com.test.package1.test.testAdd" USING java;
CREATE OR REPLACE FUNCTION MY_chr(s varchar)
RETURN varchar
EXTERNAL 'd:\dmdbms\bin\external_jar\test2.jar' "com.test.package1.test.testStr"
USING java;
CREATE OR REPLACE FUNCTION strCompare(m varchar,n varchar)
RETURN int
EXTERNAL 'd:\dmdbms\bin\external_jar\test2.jar' "com.test.package1.test.strCompare"
USING java;
9. 执行查询,查看外部函数效果,