2012-10-12 60 views
3

我最近讀到可以通過使用language屬性在類中使用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類從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(); 
} 
+0

哦,我明白了。 Ya,我希望我可以像其他任何Object Script方法一樣調用此方法,而不生成外部(文件系統)Java對象。 –

2

其實%投影類是預測Cache類的Java。他們生成可以在Java項目中使用的Java代理類。

爲了使用Java類和方法,您需要Java Entemble和AFAIK而不是Cache的一部分。

+0

作爲Cache的一部分的Java綁定(使用來自Java的通過%Projection的緩存類)和Ensemble的一部分的Java Gateway(從Ensemble調用Java類)之間存在差異。 – SSH

相關問題