2012-07-28 56 views
2

我是Oracle Coherence的新手。我閱讀文檔,並使用命令提示符完成實踐。我沒有理解的問題。然後我用oracle一致性工具下載了eclipse。我爲下面給出的oracle一致性創建了應用程序客戶端 http://docs.oracle.com/cd/E18686_01/coh.37/e18692/installjdev.htmOracle Coherence

我跑的是一樣的。它在我的控制檯應用程序中正常工作。然後,我創建了同一個工作區一個新的項目,創建一個主類訪問指定的高速緩存,並把使用下面的代碼檢索一些值,

package coherenceClient; 

import com.tangosol.net.CacheFactory; 
import com.tangosol.net.NamedCache; 

public class Main { 
    public static void main(String[] args) { 

     NamedCache cache = CacheFactory.getCache("myCache"); 

     cache.put("MyFirstCacheObject", "This is my first Cache Object"); 

     System.out.println(cache.get("MyFirstCacheObject")); 
    } 
} 

我retieved相同的值。然後我創建了另一個類嘗試檢索相同的值,但它返回null。代碼中是否有錯誤?

package coherenceClient; 

import com.tangosol.net.CacheFactory; 
import com.tangosol.net.NamedCache; 

public class Recevier { 
public static void main(String[] args) { 

    NamedCache cache = CacheFactory.getCache("myCache"); 
    System.out.println(cache.get("MyFirstCacheObject")); 
} 
} 

回答

3

如果一致性緩存駐留在JVM(它不跑了作爲獨立的服務器),那麼所有的數據讓你的程序結束後丟棄(使用內存存儲)。嘗試把Thread.sleep(200000);到第一個程序的末尾,然後在超時時間內運行第二個實例。

+0

謝謝Flavius。 – vvekselva 2012-08-23 07:57:01

1

在命令提示符中,您已啓動服務器(作爲獨立服務器)並且客戶端已加入服務器。因此,即使將數據插入緩存的客戶端離開服務器會話,緩存中的所有數據都將可用直到服務器停止。
但在上述情況下,一致性緩存駐留在JVM(Eclipse)本身中,而不是作爲獨立服務器。所以當程序存在時你得到空值。

0

運行第二個JVM時,請檢查原始一致性緩存服務器節點stdout,以查看是否實際看到新成員加入羣集(檢查MemberSet)。您可能只是運行兩個完全不知道彼此的獨立JVM;因此CacheFactory.getCache(「myCache」)正在每個JVM中創建緩存。

解決方法是使用cache-server.cmd啓動coherence緩存服務器,然後使用分佈式/分區或複製方案運行eclipse程序。這樣,即使您的程序退出,實際數據仍會存在於連貫性緩存服務器中,以便第二個JVM在連接「相同羣集」時進行檢索。