卢卡·费拉里:使用PL/Java:需要澄清的问题

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

这篇文章讨论了使用PL/Java时的一些问题和解决方法。作者在之前的文章中提到了编辑java.policy文件来解决Java权限问题,但是这样会改变所有Java代码的策略规则。文章中提到了PL/Java使用自定义的策略文件,可以在PostgreSQL配置目录中找到。此外,还介绍了PL/Java的默认安装位置和编译Java代码所需的API jar文件。最后,作者纠正了之前关于数据往返和PL/Java通信方式的错误理解。总的来说,PL/Java是一个成熟的项目,解决了许多与Java代码集成的问题。

🔎

延伸解读

权限配置:避免全局修改 java.policy

文章指出,直接编辑 java.policy 文件会改变所有 Java 代码的策略规则,而不仅仅是 PL/Java。PL/Java 自 1.6 版本起使用自定义策略文件 pljava.policy,位于 PostgreSQL 配置目录中。该文件定义了 Sandboxed 和 Unsandboxed 两个主体,分别对应不同权限。通过配置此文件,可以细粒度地管理 PL/Java 代码的权限,避免影响系统其他 Java 应用。

JVM 位置与 API jar 的获取

PL/Java 的 pljava.libjvm_location 变量用于指定 JVM 位置。如果安装的包已预配置默认 JVM 路径(如 Ubuntu 包),则无需手动设置;否则需检查配置。编译 Java 代码所需的 pljava-api jar 通常随 PGDG 发行版安装在 PostgreSQL 共享目录中,无需从源码编译。使用 Maven 时,可将该 jar 安装到本地仓库以便依赖。

数据通信:并非进程间往返

作者纠正了之前关于数据往返的错误理解。PL/Java 通过 JNI 与 PostgreSQL 后端进程通信,通信发生在同一进程内,因此不涉及不同进程间的往返。然而,仍需在 Java 类型和 PostgreSQL 类型之间转换复杂数据结构,作者曾误用“往返”一词描述此过程。这澄清了 PL/Java 的性能特性。

PL/Java 的成熟性与问题解决

文章总结认为 PL/Java 是一个成熟的项目,许多常见问题已有直接解决方案。作者最初遇到的困难大多源于误解,而非项目缺陷。通过正确配置策略文件、利用预置的 API jar 以及理解 JNI 通信机制,可以更顺利地集成 Java 代码。这体现了 PL/Java 在 PostgreSQL 中运行 Java 的可靠性和维护者的积极支持。

❓

Q&A

PL/Java的自定义策略文件在哪里可以找到?

PL/Java的自定义策略文件可以在PostgreSQL配置目录中找到。

编辑java.policy文件会有什么影响?

编辑java.policy文件会改变所有Java代码的策略规则,而不仅仅是PL/Java的规则。

如何编译Java代码以与PL/Java一起使用?

可以使用已经安装在PostgreSQL共享文件夹中的API jar文件,或者将其安装到Maven本地仓库中。

PL/Java是如何与PostgreSQL进行通信的?

PL/Java通过JNI与PostgreSQL后端进程通信,不涉及不同进程的往返。

PL/Java的默认安装位置是什么?

PL/Java的默认安装位置通常在/usr/share/postgresql/16/pljava/目录下。

PL/Java项目的成熟度如何?

PL/Java是一个成熟的项目,解决了许多与Java代码集成的问题。

🏷️

标签

➡️

继续阅读