将activiti从5.22.0迁移到6.0.0会在部署时导致IllegalThreadStateException

将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());

我们目前正在使用activiti的v5.22.0,流程引擎的编程配置如下:

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
尝试在没有它的情况下创建引擎并部署代码造成的