以下针对osworkflow工作流:
1.配置文件如下:
<osworkflow>
<!--
<persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>
-->
<persistence class="com.opensymphony.workflow.spi.jdbc.JDBCWorkflowStore">
<!-- For jdbc persistence, all are required. -->
<property key="datasource" value="jdbc/DefaultDS"/>
<!-- 注意:本配置是基于oracle数据库,如果是其他数据库,请修改entry.sequence和step.sequence对应的value -->
<property key="entry.sequence"
value="SELECT seq_os_wfentry.nextval FROM dual" />
<property key="entry.table" value="OS_WFENTRY"/>
<property key="entry.id" value="ID"/>
<property key="entry.name" value="NAME"/>
<property key="entry.state" value="STATE"/>
<property key="step.sequence"
value="SELECT seq_os_currentsteps.nextval FROM dual" />
<property key="history.table" value="OS_HISTORYSTEP"/>
<property key="current.table" value="OS_CURRENTSTEP"/>
<property key="historyPrev.table" value="OS_HISTORYSTEP_PREV"/>
<property key="currentPrev.table" value="OS_CURRENTSTEP_PREV"/>
<property key="step.id" value="ID"/>
<property key="step.entryId" value="ENTRY_ID"/>
<property key="step.stepId" value="STEP_ID"/>
<property key="step.actionId" value="ACTION_ID"/>
<property key="step.owner" value="OWNER"/>
<property key="step.caller" value="CALLER"/>
<property key="step.startDate" value="START_DATE"/>
<property key="step.finishDate" value="FINISH_DATE"/>
<property key="step.dueDate" value="DUE_DATE"/>
<property key="step.status" value="STATUS"/>
<property key="step.previousId" value="PREVIOUS_ID"/>
</persistence>
<factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
<property key="resource" value="workflows.xml" />
</factory>
</osworkflow>
2. SELECT seq_os_currentsteps.nextval FROM dual
可以替换为:select max(id)+1 from os_currentstep
SELECT seq_os_wfentry.nextval FROM dual
可以替换为: select max(id)+10 from os_wfentry
3.注意工作流中的这两个序列( eq_os_currentsteps, seq_os_wfentry ),主要用来产生 os_currentstep和 os_wfentry表中的主键ID,有时候有可能因为错误操作数据库等原因造成序列产生错误的ID,造成主键ID冲突。SYS_C006673主键冲突,SYS_C006681主键冲突。
4.解决方案:
按照第2点修改配置文件,重启服务;
修改序列开始值,使它大于对应表的max(ID),然后重启服务;