2014-01-16 27 views
0

聲明:這只是我正在運行的測試,並未試圖獲得可靠的請求服務櫃檯。JAX-RS(澤西島)網絡服務中的請求服務計數器未遞增

由於Jersey是建立在servlet之上的,我假設一個servlet在所有請求之間共享。所以我寫了一個非常基本的類:

@Path("/id") 
public class TestIdGeneration { 

    private AtomicInteger counter = new AtomicInteger(); 

    @GET 
    @Produces("text/plain") 
    public Response serveRequest() { 
     Response.ResponseBuilder response = Response.ok(String.valueOf(counter.incrementAndGet())); 
     return response.build(); 
    } 
} 

我假設每個GET請求計數器都會被更新一次。但是,超時我做了一個get請求,我得到了值1.我檢查了響應頭,以確保請求沒有被緩存。以下是完整的響應標頭:

Status Code: 200 OK 
Connection: close 
Content-Type: text/plain 
Date: Thu, 16 Jan 2014 00:12:43 GMT 
Server: Apache 
Transfer-Encoding: chunked 

爲什麼不是每個GET請求都更新計數器?

回答

1

jax-rs documentation

默認根資源類的生命週期是每個請求, 即根資源類的新實例被創建的每個 時間請求URI路徑相匹配根資源。

因此,報告的行爲是預期的,因爲爲每個請求創建一個新的實例。嘗試將您的計數器改爲static

+0

謝謝大衛。這非常有趣,現在我們只需要擔心僅對靜態成員的併發訪問。我們可以使用非靜態HashMap而不是ConcurrentHashMap。 – user824212