从MarkLogic Xquery模块调用Java

时间:2019-01-09 08:41:43

标签: java xquery marklogic

我有一个Java转换例程,我想从我的XQuery模块调用它。我想直接调用它,而不使用服务或http端点以最小化开销。

这是一个例程,必须将大型几何形状从一个坐标系转换为另一坐标系(RD转换为ETRS89)。由于这些文件是更大的XML文档的一部分,可能包含数十个这样的形状,因此我在实际处理文档时想在MarkLogic中进行此操作。

MarkLogic文档没有提供任何有关如何实现此类扩展的信息,仅讨论了不合适的xquery和javascript扩展。

用XQuery或Javascript重写例程并不是真正的选择,因为它非常复杂且耗时。

2 个答案:

答案 0 :(得分:1)

没有支持的进程内调用Java方法。您可能需要重新考虑使用相当有效的方法来调用进程外服务。开销主要是等待时间。如果您批量处理转换并保持Java服务器运行以避免启动成本,则可以将开销降到最低。

可能存在不受支持和/未经测试的方法。 此特定任务可能非常适合本机“用户定义功能-UDF”界面。这允许将本机代码作为查询的一部分(不直接从XQuery)调用,而作为数据层中的map-reduce进程调用。这些函数可以用C ++的“包装器”编写,该包装器可以通过JNI调用Java-从理论上讲(未经测试)。

还存在Java到JavaScript的转换程序,该程序可能能够生成本机可在服务器中运行的javascript。 示例:GWT

我一直想尝试的一种方法是首先将Java转换为Kotlin(相当简单,通过IntelliJ的J2K工具实现了大约80%的自动化)。
然后可以将Kotlin编译为Javascript。

Kotlin(通过kotlin本机)也可以生成本机可执行文件(但我不相信UTF接口所需的共享库)。

答案 1 :(得分:0)

根据您的描述,您似乎正在使用ruimtelijke plannen或omgevingswet数据。 根据需要处理的数据,可以使用Raw坐标系在MarkLogic中使用RD。