2010-11-16 33 views
1

我有一個消息驅動Bean,它接收審計消息。這些消息還包含有關正在審計的系統的信息。收到消息時,如果系統不存在或重新使用現有系統,則MDB可以創建該系統。跨實例同步對MDB方法的訪問

我面臨的挑戰是,當了很多新的系統消息的同時接收,創建了多個MDB實例,並且最終創建重複的系統。向數據庫添加約束是解決該問題的一種方法。在這種情況下,有沒有辦法避免應用程序中的這些重複項,MDB?

回答

-1

你可以嘗試這樣的事:

private Object LOCK; 
public void onMessage() { 
    code… 
    synchronized(LOCK) { 
     check if system exists, create if necessary 
    } 
    more code… 
} 
+0

這個代碼將在單個實例上僅同步,使得LOCK靜將在所有類實例同步,感謝 – n002213f 2010-11-17 06:18:35

+0

你是對的,當然。接得好。 – 2010-11-17 12:50:08

+0

-1:你不應該在bean中使用非最終的靜態變量。 – 2013-10-16 12:33:44

1

確保只有一個線程處理所有消息。這可以在激活規範,連接池中進行配置。