我們有一些業務邏輯導致交易中的瓶頸。業務邏輯向數據庫查詢一組數據(只讀),處理它並返回一個對象。這必須在給定的請求中使用不同的參數進行多次。 我們理論上可以將每個業務邏輯調用分解爲一個單獨的線程嗎?
具體
EJB object (part of an http request on a JBoss App Server)
-creates objects that implement Callable (call method calls business logic method)
-using an ExecutorService invoke each callable object
Business Logic
-Makes a query of postgresql database which uses a PreparedStatement
-Using POJOs we build objects from ResultSet objects that come from postgresql
-Do expensive calculations
這一切之後,我們得到,當我們限制了我們的線程來一個不願透露姓名的門戶網站甚至不存在Postgres的錯誤:
ERROR: cursor "<unnamed portal 777>" does not exist
STATEMENT: FETCH ALL IN "<unnamed portal 777>"
我不是非常確定發生了什麼事情會導致錯誤,但業務邏輯被正確調用,並且無需線程就可以正常工作。這讓我質疑線程是否可以啓動並添加到事務中(並且如果他們可以,我們如何做到這一點?)。
你可以把你的交易分成子交易嗎? – 2009-12-04 19:17:26
如何生成連接?一個連接只能在一個線程中使用。 – 2009-12-04 19:18:11
@Liz我是新來的交易一般,所以也許你可以添加一個答案,如何子交易如何適合這個(每個線程?這是如何影響滾動,發生之前?) @Kathy I '不知道你的意思是通過連接,但ejb是填充網頁的請求的一部分,並且postgres調用使用PreparedStatement – Adam 2009-12-04 19:25:26