2016-04-23 55 views
1

我正在部署到JBoss 4.2.3的企業應用程序。它使用Servlet 2.5規範。JBoss 4.2.3如何實現SingleThreadModel(STM):一個servlet的實例或一個servlet的多個實例?

的應用有一定的JSP頁面,其使用了SingleThreadModel(STM)此指令:<%@ page isThreadSafe="false" %>

我想知道的JBoss 4.2.3如何實現了SingleThreadModel(STM):

  1. 它只有1個servlet實例並序列化其上的所有請求 ?
  2. 或者它有多個servlet實例並且同時處理每個請求 ?

我該如何找到這些信息?由於

回答

0

JBOSS Documents

,這可以在這兩種模式來實現:

servlet容器可以通過同步訪問該servlet的單個實例做出這種保證,或者通過保持池Servlet實例的調度到一個免費的servlet

每一個新的請求,並指出,這是不完全線程安全的:

注意SingleThreadModel並不能解決所有的線程安全問題

AND:

會話屬性和靜態變量仍然可以通過在多個線程 多個請求在同一時間

訪問

所以我認爲答案是這個指令(也延伸SingleThreadModel servlets)將防止多個thre廣告打電話service方法單實例你的servlet同時並且將不是阻止web服務器同時處理多個servlet實例的請求。

換句話說,一個單一實例不會同時在多個線程中提供請求,但web服務器可以創建多個servlet實例並同時將每個請求分配給一個實例。

UPDATE

我發現在卡特琳娜芯20個MAXINSTANCES一個常數,將實例多達20個Servlet實例來服務收到一個servlet同時請求,如果沒有免費的情況下,否則等到有一個免費的servlet實例。

+0

您提供的JBoss Documents鏈接實際上只是STM的原始文檔,您也可以在https://docs.oracle上閱讀。COM/JavaEE的/ 7/API /的javax/servlet的/ SingleThreadModel.html。這只是談到實施STM的兩種方式:單實例或多實例。它讓供應商使用他們喜歡的任何策略。我想知道JBoss 4.2.3用什麼策略來實現STM。這就是這個線程的目的。 – srh

+0

抱歉誤會,我會更新我的答案,如果發現任何東西 –

+0

是否jboss使用catalina作爲核心引擎?如果這是真的,則catalina核心中有20 ** maxInstances **的常量,它將指示何時接收到servlet的多個請求,如果它正忙,則創建新實例以達到20個實例,然後等待擁有一個空閒實例。 https://searchcode.com/codesearch/view/23011575/ –