2013-08-29 58 views
2

在我們的項目中,我們需要分佈式同步,其中給定線程的鎖狀態必須在集羣中的多個節點上同步,以便運行在其他節點上的線程可以等待此鎖定對象。我知道Java不會跨越JVM執行此操作。在我們的項目的這個階段,我沒有槓桿來引入新的第三方產品(如Terracotta)。我想知道如果Weblogic(11g)有一些內置設施,可以讓我實現這個...weblogic內置的分佈式同步設施

回答

2

您可以使用SingletonService。它是WebLogic中的一個集羣範圍的單例。您應該將其綁定到activate方法中的JNDI名稱,然後從其他bean進行查找和調用。記住要將你的單例服務對象作爲一個普通的RMI對象而不是EJB來實現,所以建立一個接口擴展爲Remote並將RemoteExceptions添加到方法中。

爲此,您必須配置WebLogic羣集服務遷移遷移基礎

這是用於實施和配置服務的complete guide

+0

感謝您的輸入@Grzegorz - 我可以創建一個hashmap來保存鎖定信息,並且此服務可以使羣集中所有節點的hashmap保持同步/可用。但是我在這個方案中看到的唯一的大問題是每個對這個Singleton服務的調用都是一個REMOTE調用 - 這將會有很大的開銷 我在想(在你建議這個SingletonService之前)維護一個保持鎖的oracle數據庫表信息,即哪個線程對哪個對象id有鎖定,但對數據庫調用開銷保持警惕。 我認爲這裏的問題是 - 哪個更快? –

+0

@roobanbajwa我不知道。你必須對兩個解決方案進行基準測試 –

+0

yea認爲如此:-)我試圖避免這種情況..但在這種情況下,我將繼續使用這個Singleton服務解決方案,並將其與DB解決方案進行比較,如果需要的話。 –