Как использовать методы Java с Caché?

Недавно я прочитал, что в классе можно использовать методы Java с помощью атрибута языка.

Я попробовал это:

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

Код компилируется, но когда метод вызывается, он возвращает ошибку:

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

2 ответа

Решение

Насколько я могу судить, эта возможность существует, когда вы используете класс%Projection.Java для создания класса Java из Cache. В любом случае, если вы используете проекцию 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.

Другие вопросы по тегам