如何在Caché中使用Java方法?

时间:2012-10-12 16:46:52

标签: java intersystems-cache objectscript

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

我试过了:

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

代码编译,但是当调用该方法时,它会返回错误:

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

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

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