将activiti从5.22.0迁移到6.0.0会在部署时导致IllegalThreadStateException
我们目前正在使用activiti的v5.22.0,流程引擎的编程配置如下:将activiti从5.22.0迁移到6.0.0会在部署时导致IllegalThreadStateException,activiti,business-process-management,Activiti,Business Process Management,我们目前正在使用activiti的v5.22.0,流程引擎的编程配置如下: public class ProgrammaticProcessEngineConfiguration implements ProcessEngineLookup { private static final Logger LOGGER = LoggerFactory.getLogger(ProgrammaticProcessEngineConfiguration.class.getCanonicalName());
public class ProgrammaticProcessEngineConfiguration implements ProcessEngineLookup {
private static final Logger LOGGER = LoggerFactory.getLogger(ProgrammaticProcessEngineConfiguration.class.getCanonicalName());
private ProcessEngine processEngine;
private ManagedThreadFactory managedThreadFactory;
@Override
public ProcessEngine getProcessEngine() {
managedThreadFactory = getThreadFactory();
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
final ManagedAsyncJobExecutor managedJobExecutor = new ManagedAsyncJobExecutor() {
@Override
protected void startExecutingAsyncJobs() {
if (threadFactory == null) {
super.startExecutingAsyncJobs();
} else {
if (threadPoolQueue == null) { threadPoolQueue = new ArrayBlockingQueue<>(queueSize); }
if (executorService == null) {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.MILLISECONDS, threadPoolQueue, threadFactory) {
@Override
protected void beforeExecute(Thread t, Runnable r) { t.setContextClassLoader(classLoader); }
};
threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executorService = threadPoolExecutor;
}
startJobAcquisitionThread();
}
}
};
managedJobExecutor.setThreadFactory(managedThreadFactory);
final CdiJtaProcessEngineConfiguration cdiJtaProcessEngineConfiguration = new CdiJtaProcessEngineConfiguration();
cdiJtaProcessEngineConfiguration.setTransactionManager(getTransactionManager());
processEngine = cdiJtaProcessEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setDataSourceJndiName("something").setDatabaseType("something")
.setHistoryLevel(HistoryLevel.NONE)
.setTransactionsExternallyManaged(true).setJobExecutorActivate(true)
.setAsyncExecutorEnabled(true)
.setAsyncExecutorActivate(true)
.setAsyncExecutor(managedJobExecutor)
.setClassLoader(Thread.currentThread().getContextClassLoader())
.buildProcessEngine();
return processEngine;
}
公共类ProgrammaticProcessengConfiguration实现ProcessEngineLookup{
私有静态最终记录器Logger=LoggerFactory.getLogger(ProgrammaticProcessEngineConfiguration.class.getCanonicalName());
私有进程引擎进程引擎;
私有ManagedThreadFactory ManagedThreadFactory;
@凌驾
公共ProcessEngine getProcessEngine(){
managedThreadFactory=getThreadFactory();
final ClassLoader ClassLoader=Thread.currentThread().getContextClassLoader();
最终ManagedAsyncJobExecutor ManagedObjExecutor=新ManagedAsyncJobExecutor(){
@凌驾
受保护的无效startExecutingAsyncJobs(){
if(threadFactory==null){
super.startExecutingAsyncJobs();
}否则{
如果(threadPoolQueue==null){threadPoolQueue=new ArrayBlockingQueue(queueSize);}
if(executorService==null){
ThreadPoolExecutor ThreadPoolExecutor=新的ThreadPoolExecutor(corePoolSize、maxPoolSize、keepAliveTime、TimeUnit.millides、threadPoolQueue、threadFactory){
@凌驾
执行前受保护的void(线程t,可运行r){t.setContextClassLoader(classLoader);}
};
setRejectedExecutionHandler(新的threadPoolExecutor.CallerRunPolicy());
executorService=threadPoolExecutor;
}
startJobAcquisitionThread();
}
}
};
setThreadFactory(managedThreadFactory);
最终CdiJtaProcessEngineConfiguration CdiJtaProcessEngineConfiguration=新CdiJtaProcessEngineConfiguration();
setTransactionManager(getTransactionManager());
processEngine=cdiJtaProcessEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB\u SCHEMA\u UPDATE\u FALSE)
.setDataSourceJndiName(“某物”).setDatabaseType(“某物”)
.setHistoryLevel(HistoryLevel.NONE)
.SetTransactionExternallyManaged(true).setJobExecutorActivate(true)
.setAsyncExecutorEnabled(真)
.setAsyncExecutorActivate(真)
.setAsyncExecutor(ManagedObjExecutor)
.setClassLoader(线程.currentThread().getContextClassLoader())
.buildProcessEngine();
返回引擎;
}
迁移到v6.0.0时,我们希望保持流程实例的向后兼容性行为,因此设置如下:
cdiJtaProcessEngineConfiguration.setActiviti5CompatibilityEnabled(true);
我们需要流程引擎来支持JTA和CDI。但是,迁移页面()上的说明不是很清楚,我不知道如何配置流程引擎
我收到以下错误:激活兼容模式时,进程引擎配置不受支持
是否有人熟悉使用CdiJtaProcessEngineConfiguration将activiti迁移到v6.0.0
谢谢我猜非法线程状态异常是由于您的threadPoolExecutor
尝试在没有它的情况下创建引擎并部署代码造成的