我有一個基於MDB,Spring集成和JPA持久化的事件驅動的應用程序。 該應用程序部署在weblogic 10.3上,具有最大池大小默認值(16)。MDB上的競爭條件:哪個是處理它的最好方法?
我的應用程序需要處理一些修改數據庫的消息。 想象一下,我有一些用例,我必須處理一些消息,因爲它們的邏輯需要插入一個域對象,如果它不存在或更新它(如果它存在的話)。
所以我的組件如果對象存在或不然後調用JPA的合併是modifes數據庫檢查。 由於在我調用dao上的併發時併發執行兩個併發消息,JPA會觸發兩個insert語句,因爲該對象尚未保留,因此只有其中一個正確執行。
是否有事件驅動的應用程序來處理這種「競爭條件」的模式?
親切的問候 馬西莫
好的,好的鏡頭。你知道可序列化的隔離級別是可序列化的節點還是集羣?我必須在具有2個節點的羣集上部署應用程序。親切的問候。 Massimo –
@MassimoUgues:取決於您的事務管理器,但通常是數據庫級隔離,所以應該是集羣安全的。 – skaffman
我使用spring JTA,所以它應該是集羣安全的。我正在考慮隔離= SERIALIZABLE,這將是一個很大的瓶頸。因爲我必須處理這種併發性,只對那些影響由相同ID標識的一些域對象的消息,我想到某種基於數據庫的監視器(例如某種選擇更新該ID)。你怎麼看待這件事? –