簡體   English   中英

Camunda BPM的JavaDelegate類是否應該是線程安全的?

[英]Should JavaDelegate classes for Camunda BPM be thread safe?

主要問題是關於靜態字段和單例實例(對於配置等) - 是一個進程在不同線程運行的實例,就像通常的servlet請求一樣?

如果看得更深 - 在一個JVM中運行不同的 @ProcessApplication並看到相同的單例嗎? 我不這么認為。 我確切地知道他們的類沒有看到對方並且可以有相同的名稱(因為不同的classLoaders?)

沒有找到關於Camunda這些重要主題的任何有意義的信息,將非常感謝您的回答。

回到過程中,我對我們的一個場景有同樣的問題,並閱讀這里提到的用於servlet容器的Javadoc 提取Javadoc,

調用語義

當調用{@link #execute(java.util.concurrent.Callable)}方法時,servlet進程應用程序將當前Thread的上下文類加載器修改為加載此類的應用程序提供的子類的類加載器。 這允許,

  • 使用流程應用程序的類加載器解析{@link JavaDelegate}實現的流程引擎

這幾乎可以解釋您想要了解的所有內容,因為該行為與Web容器的運行方式非常相似。 如果您想知道其他容器實現的行為,可以檢查此包中各自的Javadoc


回答你的問題:

是的 JavaDelegate在同一個流程應用程序中訪問的共享資源需要線程安全性。 根據文檔 (見下文) 每次執行任務時, 他們都會創建一個新的委托實例

注意!

每次執行委托類引用活動時,都將創建此類的單獨實例。 這意味着每次執行一個活動時,都會使用該類的另一個實例來調用execute(DelegateExecution)。

因此,由於多次調用Process Definitions ,在任何時候都可能有許多委托實例正在運行。 因此,如果他們正在訪問共享資源,那么他們需要進行同步(線程安全),因為共享資源( 靜態單例 )是流程應用程序的本地資源,並由相應的應用程序類加載器根據上面的調用語義 Javadoc加載。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM