本文档介绍了如何在 InterSystems IRIS®数据平台中使用 Java 网关(Gateway)与 Java 组件进行互操作。在本文中,您将首先创建一个示例 JAR 文件。然后,您将在 InterSystems IRIS 管理门户(Management Portal)中创建并启动 Java 网关(Gateway)。您将以编程方式导入创建的示例 JAR 文件。最后,您将在 ObjectScript 中创建并操作一些代理类(proxy class)和对象(object)。
为了让您体验 Java 网关(Gateway ),而又不陷入细节困境,我们保持了简单的探索。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 Java 网关(Gateway)引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 Java 网关(Gateway )的探索与真实的情况相混淆!本文档末尾提供的参考资料将使您对在生产中使用 Java 网关(Gateway)的情况有一个很好的了解。
要浏览所有的技术概要(First Look),包括下面描述的可以在免费的社区版(Community Edition)实例上执行的那些,请参见 InterSystems 技术概要。
为什么 Java 网关(Gateway)很重要
Java 网关(Gateway)为 InterSystems IRIS 与 Java 组件进行互操作提供了一种简单的方法。在使用 Java 网关(Gateway)导入 JAR 文件后,您可以实例化一个外部 Java 对象,并将其作为 InterSystems IRIS 中的本机对象进行操作。您可以从 InterSystems IRIS 和 ObjectScript 内部访问 Java 类和方法!
在内部,Java 网关(Gateway)为每个 Java 类生成一对一的 ObjectScript 代理。通常,使用 Java 网关(Gateway)的最佳方法是构建一个小型 Java 封装类(wrapper class),它只公开您想要的功能,然后为这个封装创建一个代理。
探索 Java 网关(Gateway)
我们开发了一个简短的演示,向您展示如何使用 Java 网关(Gateway)和 InterSystems IRIS。想试试InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请查看 Java QuickStart(Java 快速入门)!
- 用前须知
要使用该程序,您需要在一个系统上工作,应安装 JDK 1.8 版本和您选择的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见InterSystems IRIS 基础:连接一个 IDE中的部署 InterSystems IRIS。使用同一文档中的InterSystems IRIS 连接信息和 Java IDE中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。
- 创建 JAR 文件
使用您选择的 IDE 在 Java 中创建 Person 类。使用以下示例代码:
public class Person {
public int age; public String name;
//constructor
public Person (int startAge, String Name) {
age = startAge; name = Name;
}
public void setAge(int newAge)
{
age = newAge;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public static void main(String []args) {
Person myPerson = new Person (5, "Tom"); System.out.println(myPerson.getName()); System.out.println(myPerson.getAge());
}}
编译 Person 类。然后,打开命令提示符(Command Prompt)窗口,并导航到包含 Person.class 文件的目录。使用下面的命令来生成 Person.jar 文件:
jar cf Person.jar Person.class
注意文件的位置。
启动 Java 网关(Gateway)
要启动 Java 网关(Gateway),请按照以下步骤操作:
- 使用InterSystems IRIS 基础:连接一个 IDE中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。
- 导航到 Object Gateways(对象网关)页面。(System Administration(系统管理) > Configuration(配置) > Connectivity(连接) > External Language Servers
- 选择 Create New External Language Servers
- 下拉菜单选择 Java 。
- 服务器名称输入 JavaGatewayTest,端口输入 55555。
- 点击 Save(保存)。
- 在新的 Java 网关(Gateway)所在行中,点击 Start(开始)。
-
- 生成代理类(Proxy Classes)
在 USER 命名空间(或您在已安装的实例)中创建一个名为 CreateProxyClasses.cls 的新 ObjectScript 类,包名为 JavaGatewayTest。粘贴以下代码,用您的 InterSystems IRIS 实例的连接信息 (如InterSystems IRIS 基础:连接一个 IDE中所述)替换 gwyConn.&Connect 的参数。您可以指定所示的 USER 命名空间,也可以选择实例上创建的另一个命名空间。用双引号括起来的 Person.jar 文件的完整文件路径替换 YOUR FILEPATH HERE。
Class JavaGatewayTest.CreateProxyClasses Extends %Persistent
{
ClassMethod run()
{
// get a connection to the Java Gateway
set gwyConn = ##class(%Net.Remote.Gateway).%New()
set status = gwyConn.%Connect("127.0.0.1", 55555, "USER") if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// add the jar to the classpath
set classpath = ##class(%ListOfDataTypes).%New() do classpath.Insert("YOUR FILEPATH HERE")
set status = gwyConn.%AddToCurrentClassPath(classpath) if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// create the proxy ObjectScript classes that correspond to the Java classes in the jar file set status = gwyConn.%Import("Person",,,,1)
if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// close the connection to the Java gateway set status = gwyConn.%Disconnect()
if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}}}
编译并构建该类。
打开 InterSystems 终端(Terminal),并导航到您指定的命名空间。使用以下命令执行 run() 方法:
do ##class(JavaGatewayTest.ManipulateObjects).run()
您应该可以看到以下输出:
Name: Tom Age: 5
setting age to 100 Age: 100
现在您已经成功地完成了练习,停止您创建的 Java 网关(Gateway)。返回到管理门户(Management Portal)中的 External Language Servers页面,找到您的 JavaGatewayTest 网关,并选择 Stop(停止)。
了解有关 Java 网关(Gateway)的更多信息
要了解有关 Java 网关(Gateway)和 InterSystems IRIS 的更多信息,请参见:
使用 Java 网关(Gateway)
有个疑问,生成代理类(Proxy Classes)该步骤中是不是应该体现为JavaGateway而不是Net.Remote.Gateway。.png)
%Net.Remote.Gateway 是 %Net.Remote.Java.JavaGateway的基类,是用来建立JavaGateway的连接使用的。