我最近读到可以使用语言属性在类中使用Java方法。
我试过这个:
Method JavaTest() As %String [ Language = java, WebMethod ]
{
string tmp = "Hello World";
return tmp;
}
代码将编译,但在调用该方法时,它会返回错误:
ERROR #5002: Cache error: <METHOD DOES NOT EXIST>
据我所知,当您使用 %Projection.Java 类从缓存创建 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();
}
实际上,%Projection 类用于将 Cache 类投影到 Java。它们生成可以在 Java 项目中使用的 Java 代理类。
为了使用Java类和方法,你需要Java网关,它是Ensemble和AFAIK的一部分,而不是Cache的一部分。