- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
主要问题是关于静态 字段和单例 实例(用于配置等)- 是一个进程 在不同环境中运行的实例线程,像往常一样的 servlet 请求?
如果看得更深一些 - 不同 @ProcessApplication
在一个 JVM 中运行并会看到相同的单例吗?我不这么认为。我确切地知道他们的类彼此看不到并且可以具有相同的名称(因为不同的类加载器?)
尚未找到关于这些关于 Camunda 的重要主题的任何有意义的信息,将不胜感激您的回答。
最佳答案
我前一段时间对我们的一个场景有同样的问题,并阅读了他们的 Javadoc as mentioned here对于 servlet 容器。提取 Javadoc,
Invocation Semantics
When the {@link #execute(java.util.concurrent.Callable)} method is invoked, the servlet process application modifies the context classloader of the current Thread to the classloader that loaded the application-provided subclass of this class. This allows,
- the process engine to resolve {@link JavaDelegate} implementations using the classloader of the process application
这几乎解释了您想知道的一切,因为其行为与 Web 容器的运行方式非常相似。如果您想了解其他容器实现的行为方式,可以查看 classes in this package 的相应 Javadocs。 .
回答你的问题:
是。同一进程应用程序中 JavaDelegate
访问的共享资源需要线程安全。根据documentation (见下文)每次要执行任务时,他们都会创建一个新的委托(delegate)实例。
Note!
Each time a delegation class referencing activity is executed, a separate instance of this class will be created. This means that each time an activity is executed there will be used another instance of the class to call execute(DelegateExecution).
因此,由于 Process Definitions
的多次调用,在任何时候都可能有许多委托(delegate)实例在积极运行。因此,如果它们正在访问共享资源,则它们需要同步(线程安全),因为共享资源(static 或 singleton)对于根据上述调用语义 Javadoc 处理应用程序并由相应的应用程序类加载器加载。
希望这对您有所帮助。
关于java - Camunda BPM 的 JavaDelegate 类应该是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53542686/
我是一名优秀的程序员,十分优秀!