注册入口
CREATE FUNCTION sqlj.java_call_handler()
RETURNS language_handler AS ‘pljava’
LANGUAGE C;
注册入口函数在 pljava 文件夹下
创建language
CREATE TRUSTED LANGUAGE java HANDLER sqlj.java_call_handler;
调用 CreateProceduralLanguage,会在 pg_language 表中插入语言信息
创建 java 过程
CREATE FUNCTION sqlj.install_jar(VARCHAR, VARCHAR, BOOLEAN) RETURNS void
AS ‘org.postgresql.pljava.management.Commands.installJar’
LANGUAGE java SECURITY DEFINER;
注册这个 java 类到 pg_proc 表上
使用 java 过程
当调用
select sqlj.install_jar(…);
,时
就会以调用linux系统函数 dlsym 在 pljava 文件夹下找 org.postgresql.pljava.management.Commands.installJar 这个类
然后调用 _PG_init 根据 initsequencer 函数中的状态机一步步添加参数、注册信号处理函数、创建虚拟机,并执行类:
当有信号从虚拟机中传回时就执行相应的 handler