3

我最近读到可以通过使用语言属性在类中使用 Java 方法。

我试过这个:

Method JavaTest() As %String [ Language = java, WebMethod ]
{
    string tmp = "Hello World";
    return tmp;
}

代码可以编译,但是在调用该方法时会返回错误:

ERROR #5002: Cache error: <METHOD DOES NOT EXIST>
4

2 回答 2

2

据我所知,当您使用 %Projection.Java 类从 Cache 创建 Java 类时,该工具就存在。无论如何,如果您确实使用了 Java 投影,那么该方法实际上会被投影到所创建的 Java 类中。

Class SomePackage.JavaTest Extends %Persistent
{

Method JavaTestyTest() As %String [ Language = java, WebMethod ]
{
    string tmp = "Hello World";
    return tmp;
}
Method bleh() as %Library.String
{
    q "bleh"
}
Projection NewProjection1 As %Projection.Java(ROOTDIR = "C:\trans");

}

生成太多 Java 无法显示所有内容,但它包括

public java.lang.String JavaTestyTest () {
       string tmp = "Hello World";
       return tmp;
}

public java.lang.String bleh () throws com.intersys.objects.CacheException {
    com.intersys.cache.Dataholder[] args = new com.intersys.cache.Dataholder[0];
    com.intersys.cache.Dataholder res=mInternal.runInstanceMethod("bleh",args,com.intersys.objects.Database.RET_PRIM);
    return res.getString();
}
于 2012-10-12T17:35:05.190 回答
2

实际上 %Projection 类用于将 Cache 类投影Java。它们生成可以在 Java 项目中使用的 Java 代理类。

为了使用 Java 类和方法,您需要 Java Gateway,它是 Ensemble 和 AFAIK 的一部分,而不是 Cache 的一部分。

于 2012-10-14T20:12:20.247 回答