首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intersystems CachéJava网关

Intersystems CachéJava网关
EN

Stack Overflow用户
提问于 2016-12-22 11:02:20
回答 2查看 742关注 0票数 0

在Caché的Objectscript开发方面,我需要一些帮助。

我已经在这项技术上工作了几个月,从几天以来,我一直试图让Java网关工作,但没有成功。它应该允许我运行java .class et .jar代码。

但是,即使在文档中解释了这一点,也没有完整的示例,而且我一遍又一遍地看到错误。所以,我想知道是否有人能提供一个完整的例子,纠正我或解释我做错了什么?

以下是我现在所拥有的:

我的简单java类-在文件中写入日期和时间。

代码语言:javascript
复制
package packagename.packagename2;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;

public class entertest {

    public int enter() throws IOException
    {
         File file = new File("D:\\path\\filemane.txt");

         if (!file.exists()) {
              file.createNewFile();
         }

         BufferedWriter bf = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
         bf.write(LocalDateTime.now().toString());
         bf.close();

         return 1;
     }

}

我的对象脚本代码-定义我的网关并尝试调用该方法

代码语言:javascript
复制
Class domain.java.TestJava Extends EnsLib.HL7.Service.TCPService
{

    Method OnProcessInput(pLine As Ens.StringContainer, Output pLineLeftOver As Ens.StringContainer) As %Status
    {
        Do ##super(pLine,pLineLeftOver)
        Set val = 0

        $$$TRACE(val)

        Set gateway = ##class(%Net.Remote.Gateway).%New()
        Do gateway.%Connect("127.0.0.1", 55553)
        Do gateway.%Import("D:\\path\\entertest.jar")

        Set javaObj = ##class(packagename.packagename2.entertest).%New(gateway)
        Set val = javaObj.enter()

        $$$TRACE(val)

        Quit $$$OK
    }
}

我收到一个错误:

代码语言:javascript
复制
ERREUR <Ens>ErrException: <CLASS DOES NOT EXIST>zOnProcessInput+9^domain.java.TestJava.1 *packagename.packagename2.entertest 
    -- - connecté en tant que '-' numéro - @' Set javaObj = ##class(packagename.packagename2.entertest).%New(gateway)'

我用过这篇文章,但我不知道他是怎么做到的:以Java网关Pass参数作为java.io.FileInputStream的Intersystems Caché

我试图在集成产品中添加一个服务"JavaGatewayService“。没有帮助..。

我还尝试在

系统管理>配置>连接性>对象网关。

没有帮助..。我不知道这是否对我有帮助..。

我没有主意/选择了。

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-12 15:59:21

我终于找到了一个可行的解决方案,所以我添加这个来分享它,给出一个完整的一步一步的指导。

以下是我需要做的事情:

在集成中:我添加了一个"JavaGateway“服务,其"EnsLib.JavaGateway.Service”配置为127.0.0.1作为地址,55555配置为端口(我认为这些是默认值)。我还在JDKVersion中指定使用“Java1.8”。

我将其编写为Java代码,并将其导出为Jar存档:

代码语言:javascript
复制
package packageName;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;

public class EnterTestClass {

    public long enter() throws IOException {

        File file = new File("D:\\Path\\EnterTestClass.txt");

        if (!file.exists()) {
            file.createNewFile();
        }

        BufferedWriter bf = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
        bf.write(LocalDateTime.now().toString());
        bf.close();

        return 1;
    }
}

在Studio中,我创建了一个新类。

以下是代码:

代码语言:javascript
复制
Method OnProcessInput(pLine As Ens.StringContainer, Output pLineLeftOver As Ens.StringContainer) As %Status
{
    Set val = 0
    $$$TRACE(val)

    Set gateway = ##class(%Net.Remote.Gateway).%New()
    Do gateway.%Connect("127.0.0.1", 55555)

    Set javaObj = ##class(packageName.EnterTestClass).%New(gateway)
    Set val = javaObj.enter()

    $$$TRACE(val)
    Quit $$$OK   
}

我使用了菜单"Tools“->扩展”->“”“:我选择了Jar,给出了完整的路径,上面的值为127.0.0.1和555555,点击"Next",点击类导入并单击"Finish”。

在正确的Studio树上(在名称空间视图中),导入的类应该是可见的。

然后,它在启动OnProcessInput时起作用(在我的例子中通过发送一个tcp请求)。

感谢DAiMor对我的一些错误的帮助,并为我的英语道歉,如果菜单上没有我所写的名字(我是比利时人,正在制作一个法语版本的Studio和Ensemble)。

票数 0
EN

Stack Overflow用户

发布于 2016-12-22 14:28:50

要在集成中使用Java,您必须使用JavaGateway服务,并且应该将Java类导入Cach。您可以查看文档获得更多细节。

如果你问InterSystems开发人员社区门户,你可以更快地得到答案。

UPD:您尝试导入java类,但方法错误。如果您查看文档,您将看到方法%Import的定义。

最终方法%导入(javaClass为%String,ByRef javaClasses为%ListOfDataTypes,additionalClassPaths为%ListOfDataTypes = "",排除为%ListOfDataTypes = "")

正如您在这里看到的,第一个参数是javaClass。所以,而不是

代码语言:javascript
复制
Do gateway.%Import("D:\\path\\entertest.jar")

尝试导入特定的java类。

代码语言:javascript
复制
Do gateway.%Import("packagename.packagename2.entertest")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41281638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档