这是一个棘手的问题:
我将JBPM与Jboss一起使用,并希望对其进行配置,使其能够并实际使用5个线程(本身)。我的代码中包含所有相关参数的“ jbpm.cfg.xml”文件。这是其内容的概述:
Some parameters...
<bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor">
<field name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></field>
<field name="name"><string value="JbpmJobExecutor" /></field>
<field name="nbrOfThreads"><int value="5" /></field>
<field name="idleInterval"><int value="5000" /></field>
<field name="maxIdleInterval"><int value="3600000" /></field> <!-- 1 hour -->
<field name="historyMaxSize"><int value="20" /></field>
<field name="maxLockTime"><int value="600000" /></field> <!-- 10 minutes -->
<field name="lockMonitorInterval"><int value="60000" /></field> <!-- 1 minute -->
<field name="lockBufferTime"><int value="5000" /></field> <!-- 5 seconds -->
</bean>
这是由自动生成的模板发出的(或者我认为),我们在这里所做的唯一一件事就是将“ nbrOfThreads”字段的值从1更改为5(以触发多线程)。
这样做之后,我们使用maven生成了Web应用程序的可运行对象并进行了部署。我想确保我启动的作业实际上是同时启动的(这是我们希望JBPM采取的行为),但我有直觉,实际上并没有这样做,因为我没有注意到服务器性能在时间方面的任何差异从现在开始(直到参数nbrOfThreads设置为“ 1”)才能实现这些目标。我进行了一个线程转储(在运行作业的同时)并获得以下输出:
2019-11-12 15:20:57
Full thread dump Java HotSpot(TM) 64-Bit Server VM (16.3-b01 mixed mode):
#Nothing here,which would mean that no thread is running at the moment ?
"http-0.0.0.0-8880-2" daemon prio=10 tid=0x00007f6f94039000 nid=0x4776 runnable [0x00007f6f91452000]
java.lang.Thread.State: RUNNABLE
#Many other threads (irrelevant,to my mind)
"JbpmJobExecutor@127.0.0.1:5" prio=10 tid=0x00007f701cc09800 nid=0x1e76 in Object.wait() [0x00007f6f90a87000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00007f6fdd162b88> (a org.jbpm.job.executor.JobExecutor)
at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:70)
- locked <0x00007f6fdd162b88> (a org.jbpm.job.executor.JobExecutor)
Locked ownable synchronizers:
- None
"JbpmJobExecutor@127.0.0.1:4" prio=10 tid=0x00007f701cb48000 nid=0x1e74 in Object.wait() [0x00007f6f90b88000]
#Same as above
"JbpmJobExecutor@127.0.0.1:3" prio=10 tid=0x00007f701cb47000 nid=0x1e71 in Object.wait() [0x00007f6f90c89000]
#Same as above
"JbpmJobExecutor@127.0.0.1:2" prio=10 tid=0x00007f701da3f000 nid=0x1e6f in Object.wait() [0x00007f6f90d8a000]
#Same as above
"JbpmJobExecutor@127.0.0.1:1" prio=10 tid=0x00007f701cb39000 nid=0x1e6c in Object.wait() [0x00007f6f90e8b000]
#Same as above
如果我的理解很好:线程(根据配置文件称为JbpmJobExcecutor)已正确实例化并可以运行,但是上述作业不会触发其中任何一个,对吗?
我的问题是: -为什么不使用JbpmJobExecutor线程启动作业(每当其中一个引发异常时,就会显示一条消息,显示“ foo无法推进JBPM进程”,因此它们肯定依赖于JBPM -如何确定哪个线程真正在支持工作 -为什么转储文件中没有任何正在运行的线程,不应该至少其中之一?按照本教程的规定:https://dzone.com/articles/how-to-read-a-thread-dump在转储文件中的入门信息和线程列表之间应该有一个部分,显示在进行转储时正在运行的线程的数组。类似于“线程类SMR信息:blablabla {thread1,thread2等}。但是在我的身上没有迹象表明,为什么?
很抱歉,问题的长度,我想尽可能准确,无法想到其他任何方式来清楚地解释。希望有人会提出一些对我们大多数人有用的解释。
谢谢!