你可以在 Java 的 IRIS SDK 里用 IRISReference 来传递 ByRef 参数;检索到的材料明确给出了 Java 示例:先创建 IRISReference,再把它作为参数传给类方法,例如:IRISReference cacheReturn = new IRISReference("");,然后调用 iris.classMethodStatusCode(...),调用结束后再通过 cacheReturn.getValue() 读取 ByRef 返回值。[1]
检索结果里与 Java ByRef 最相关的示例代码是这样调用的:
IRISReference cacheReturn = new IRISReference("");
iris.classMethodStatusCode(CACHE_CLASS_NAME, method, cacheReturn, args[[1]](https://community.intersystems.com/post/iris-vs-java), args[[2]](https://openexchange.intersystems.com/package/iris-embedded-python-wrapper));
这说明在 Java SDK 中,ByRef 参数不是直接用普通对象接收,而是要显式使用 IRISReference 包装后传入。[1]
不过,你问的是“如何用 Java + IRIS SDK 这个方法创建 MIRROR”。关于“创建 Mirror”的检索结果里,只找到了通过 ObjectScript 脚本和配置 API 方式以编程方式搭建镜像的资料,例如:
- 通过
##class(Api.Config.Services.Loader).Load(...)加载 mirror 配置; - 通过
##class(Api.Config.Services.SYS.MirrorMaster).AuthorizeNewMembers(...)授权新成员加入镜像; - 在 shell 脚本里调用
iris session ... -U %SYS执行这些 ObjectScript 逻辑。[3]
相关示例里,主节点是这样做的:
Set sc = ##class(Api.Config.Services.Loader).Load("${MASTER_CONFIG}.resolved")
Job ##class(Api.Config.Services.SYS.MirrorMaster).AuthorizeNewMembers("${MIRROR_MEMBERS}","${MIRROR_NAME}",600)
备节点则是加载各自的配置文件:
Set sc = ##class(Api.Config.Services.Loader).Load("$1.resolved")
这表明“创建 Mirror”的核心是调用这些 %SYS 下的配置/授权类,而不是检索结果中出现的某个专门的 Java createMirror() SDK 方法。[3]
但检索结果没有提供以下你所需的关键信息:
- 用 Java SDK 直接创建 Mirror 的官方方法签名;
Api.Config.Services.Loader或Api.Config.Services.SYS.MirrorMaster在 Java Native SDK 中的完整调用参数示例;- 创建 Mirror 时哪些参数需要 ByRef,以及对应 Java 调用顺序。[1][3]
所以,基于现有材料,你现在只能确定两点:
- Java 调 ByRef 参数时要用
IRISReference。[1] - Mirror 的程序化创建可通过
%SYS中的Api.Config.Services.Loader.Load(...)和Api.Config.Services.SYS.MirrorMaster.AuthorizeNewMembers(...)这类 ObjectScript API 完成。[3]
如果你的目标是“在 Java 中调用这些 %SYS 类方法来创建 Mirror”,当前检索材料还不足以给出可直接运行的完整 Java 代码,因为缺少这些方法在 Java 侧的准确签名与 ByRef 参数定义。[1][3]
Sources:
- Log in to post comments