2013-04-03 41 views
8

我正在開發一個非常簡單的REST Web服務,使用Eclipse,Tomcat7和Jersey實現,並連接到MySQL。 尋找球衣文檔,我知道每個請求都會創建一個新的根資源類的對象。但我不知道是否每個請求都是獨立的,例如,如果一個請求需要等待很長時間,那麼服務器會接受更多的請求嗎?併發請求到澤西休息服務

問題是: 我有2個主要類,1個類實現澤西與註釋(Proxy.java),和其他類連接到一個BD(Notificator.java),這個類只有一個實例( Singleton),以便只使用1個Connection對象。實現Jersey的類使用這個類。所以,如果其中一個請求被阻止,我不知道其他人是否會運行,因爲他們使用相同的(Notificator.java)實例。

這個關係是N個(Proxy.java)實例使用唯一一個(Notificator.java)巫婆有一個連接到MySQL。

+0

爲什麼你想只有一個連接到數據庫? –

+0

我爲了簡單起見,並避免了併發問題。 –

回答

3

球衣是在servlet之上開發的。每個傳入請求都有一個新線程。您的代碼正在爲所有線程創建一個瓶頸,因爲存在對單個可用連接對象的爭用。如果您有多個請求,則只有一個請求將使用該連接,而其他請求則需要等待。如果等待時間不長,那麼沒有問題。但是如果等待超過HTTP請求超時,那麼其他請求可能會以TIMED OUT結束。

我知道您可能因爲某些業務需求/複雜性而導致單連接瓶頸。因此,在所有這些我們無法同時處理所有請求的情況下,可能有各種各樣的原因,那麼我們應該創建我們的Web服務作爲異步。異步Web服務使用SUBMIT REQUEST-> REQUEST ACCEPTED(將異步處理)和JOB URL返回以進行輪詢 - > CLIENT POLLS的模型,直到作業未完成。

希望它有幫助!

+0

「每個傳入請求都有一個新線程」,這是重要的一點!非常感謝。我知道有一個瓶頸,因爲我只使用一個Connection,但通常只會有2或3個同時請求,所以我認爲不會有問題。但我會研究「異步Web服務」。 –

0
+0

thx,但最後我的老師說我的連接池將難以實現,所以我只在Notificator類中使用關鍵字「syncronized」來避免併發問題。我也意識到,每次對球衣的呼叫都是獨立運行的,所以,如果其中一個呼叫集團,其他人將正常運行。 –

+0

使用'synchronized'關鍵字可以阻止其他呼叫。如果這是你需要的,那麼好吧。 – Vitaly

+0

我阻止其他呼叫,但是當資源可用時,它們會醒來?那是我老師給我解釋的。這對我有用。 –

相關問題