好库网 好库网首页 | 我的好库
javaeye的专栏

使用MySQL UDF在MySQL中调用Java函数

发布者:javaeye
发布日期:2018/5/24 23:12:45   更新日期:2018/5/24 23:14:10
阅读次数:562
评分:4.80
介绍:这是一个简单的MySQL UDF,可以从MySQL中调用Java函数。
正文:

[本文由机器翻译]原文来自http://www.okbase.net/file/item/34977 压缩包里的index.html

 

介绍
这是一个简单的MySQL UDF,可以从MySQL调用Java函数。库(.dll或.so)文件必须对应于的体系结构你的MySQL版本,例如64位编译的MySQLUDFJavaLauncher.dll / libMySQLUDFJavaLauncher.so需要64位MySQL服务器(对于32位也是一样的),需要复制到插件目录中(例如Windows平台上的<MySQL Server主目录> \ lib \ plugin)以及两个jar文件mysqljavatrigger.jar和utils4j-0.7.0.jar。另外任何将被调用方法的java类文件都必须驻留在这个文件夹中,否则方法调用将失败。此外,通过环境变量查询Java和MySQL路径,即JAVA_HOME和MYSQL_HOME必须适当设置。 UDF需要Java Development Kit 1.6,因此环境变量应该指向相同版本的安装目录。
此外,必须将jvm.dll和libjvm.so的路径分别添加到PATH变量中,例如%JAVA_HOME%\ jre \ bin \ server ;.

注意:设置所有环境变量后,您需要重新启动MySQL服务器!对于Linux用户,建议在系统范围内添加变量 /etc/environment文件中,并授予所有潜在用户的插件目录访问权限,否则可能会遇到许可问题。

 

接下来是UDF格式的一个例子:


select call_java_method('Test', 'myMethod("Hello World")');

 

函数call_java_method有2个参数,类名(不带文件扩展名.class),方法名带有圆括号内的可选参数列表。在该示例中,类Test的方法myMethod()用单个字符串调用参数(该类在源代码中可用,并且可以在安装UDF后用于测试目的)。类名必须完整如果它位于包中,则使用点符号(例如, de.udf.Test。多个参数必须用逗号分隔。开始并且结束包含参数的单/双引号将被忽略,这意味着它们可以在方法签名中省略。值将是作为字符串处理,并根据通过反射获得的参数类型进行后续处理。被调用的方法只能接受原始类型并且返回值总是转换为String,即将在返回的对象上调用toString()方法。更复杂的数据结构(如数组或集合)必须以指定的格式(例如JSON或XML字符串)进行传输以手动解析它们。当一堂课不存在或参数列表无效,则会向服务器发回一条消息,提示错误原因(例如参数不足。预计:2,收到:1)。放置在插件目录内的Java类必须遵守包结构以便被Java Classpath考虑,例如如果示例中的Test类具有包名称de.udf,则它应该位于/ de / udf /目录中。 JAR文件必须复制到jars目录,如果它还不存在,它将在第一次调用时自动创建。

 

以下是一些UDF示例调用:

 

select call_java_method('Test', 'myMethod("signature consists of multiple parameters: string, double & float", 2d, 3f)') AS MySQLUDFJavaLauncher;
select call_java_method('de.test.A', 'getB("this function creates an instance of class B inside another package and returns it")') AS MySQLUDFJavaLauncher;
select call_java_method('JSONExample', 'sendMessage("JSON messages can be parsed with 3rd party libraries inside the jars folder",{"key1":"value1","key2":"value2"})') AS MySQLUDFJavaLauncher;

 

可以使用以下SQL命令来安装UDF:


Windows:

CREATE FUNCTION call_java_method
RETURNS STRING
SONAME 'MySQLUDFJavaLauncher.dll';


Unix:

CREATE FUNCTION call_java_method
RETURNS STRING
SONAME 'libMySQLUDFJavaLauncher.so';

它可以与触发器一起使用,例如 向Java客户端通知后端的变化。 这里有两个例子:


DELIMITER //
DROP TRIGGER IF EXISTS users_table_trigger //
CREATE TRIGGER users_table_trigger
AFTER INSERT ON users
FOR EACH ROW
BEGIN
DECLARE c VARCHAR(200);
SET c = (SELECT call_java_method('NotificationTrigger', 'sendNotification("phone number of user Max in table 'Users' changed", "{"phoneNo":"123 456"}")'));
INSERT INTO trigger_log(id,message) VALUES(null, c);
END//
DELIMITER ;

 

DELIMITER //
DROP TRIGGER IF EXISTS user_trigger //
CREATE TRIGGER user_trigger
AFTER INSERT ON users
FOR EACH ROW
BEGIN
DECLARE c,d VARCHAR(200);
SET c = concat('setUser(', NEW.id, ',',NEW.name, ',', NEW.email, ',', NEW.created_at,',',NEW.updated_at, ')');
SET @d = call_java_method('com.sample.UserEntity', c);
END//
DELIMITER ;
INSERT INTO users VALUES(null,'John Doe','john.doe@sample.com', NOW(),NOW());
SELECT @d;

 

下载源码:http://www.okbase.net/file/item/34977

 

 

 


评论 [发表评论]
  • 44445555555555555555555

    sscly123

    2018/9/30 11:39:25

  • 4444

    sscly123

    2018/9/30 11:38:59


  • 更多评论
账号 密码 还没帐号呢,现在注册一个?

免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。