只是有一點背景,我是一個新開發誰最近採取了一個重大項目後的高級開發人員離開公司之前,我可以開發的,他如何構成的這個充分的認識。我會盡我所能解釋我的問題。方法上的Spring bean掛起使用@Transactional
此應用程序創建幾個MessageListner線程以從JMS隊列讀取對象。一旦收到對象,數據就會根據一些業務邏輯進行操作,然後映射到一個持久化對象,並使用hibernate EntityManager將其保存到一個oracle數據庫中。
直到幾個星期前還沒有在過去的一年多以來,我加入了這個項目配置的任何重大問題。但是對於其中一個隊列(問題與這個特定的隊列隔離),處理接收到的對象的spring託管bean在下面的方法中掛起。我的調試使我得出結論,它已經完成了方法中的所有內容,但是完成時會掛起。經過數週的努力解決這個問題之後,我終於解決了這個問題。任何幫助,這將不勝感激。
由於每個MessageListner都有自己的處理器,所以這種掛起方法隻影響一個隊列上的傳入數據。
@Transactional(propagation = Propagation.REQUIRES_NEW , timeout = 180)
public void update(UserRelatedData userData, User user,Company company,...)
{
...
....
//business logic performed on user object
....
......
entityMgr.persist(user);
//business logic performed on userData object
...
....
entityMgr.persist(userData);
...
....
entityMgr.flush();
}
我插入調試語句只是爲了遍歷該方法,它完成了包括entityMgr.flush。()在內的所有事情。
這是一箇舊的,但我回去評論,以防萬一有人有類似的問題。原來這是數據庫的問題。經過幾次與DBA的會議後,我們終於解決了問題。 – Rhouujin
是什麼問題? – Robocide