如何在eclipse中使用spring和mysql DB配置JBPM 6

Abh*_*yak 5 spring jpa drools jbpm kie

我正在尝试集成spring和JBPM,我做了谷歌的示例应用程序,发现一个github项目解释相同.

使用的框架版本:

  • Spring 3.1.1.RELEASE
  • JBPM 5.4.0.CR1
  • 流口水5.5.0.CR1

我已经将github项目导入eclipse工作区,并且在maven clean之后我得到例外说:

Listed class "org.jbpm.task.Status" must not be an enum persistence.xml /jbpm-spring-web/src/main/resources/META-INF    line 30 JPA Problem
Run Code Online (Sandbox Code Playgroud)

和src/main/resources/META-INF/Taskorm-JPA2.xml文件中的一些JPA查询异常如:

The abstract schema type 'OrganizationalEntity' is unknown. Taskorm-JPA2.xml    /jbpm-spring-web/src/main/resources/META-INF  line 375  JPA Problem
Run Code Online (Sandbox Code Playgroud)

The IN expression does not have a valid left expression.    Taskorm-JPA2.xml    /jbpm-spring-web/src/main/resources/META-INF    line 7  JPA Problem
Run Code Online (Sandbox Code Playgroud)

如何解决这些异常?

persistence.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
  xmlns="http://java.sun.com/xml/ns/persistence" 
  xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd">

    <persistence-unit name="org.jbpm.runtime" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/jbpm-ds</jta-data-source>        
        <mapping-file>META-INF/JBPMorm-JPA2.xml</mapping-file>
        <mapping-file>META-INF/ProcessInstanceInfoMapping.xml</mapping-file>
        <mapping-file>META-INF/Taskorm-JPA2.xml</mapping-file>
        <class>org.jbpm.task.Attachment</class>
        <class>org.jbpm.task.Content</class>
        <class>org.jbpm.task.BooleanExpression</class>
        <class>org.jbpm.task.Comment</class>
        <class>org.jbpm.task.Deadline</class>
        <class>org.jbpm.task.Comment</class>
        <class>org.jbpm.task.Deadline</class>
        <class>org.jbpm.task.Delegation</class>
        <class>org.jbpm.task.Escalation</class>
        <class>org.jbpm.task.Group</class>
        <class>org.jbpm.task.I18NText</class>
        <class>org.jbpm.task.Notification</class>
        <class>org.jbpm.task.EmailNotification</class>
        <class>org.jbpm.task.EmailNotificationHeader</class>
        <class>org.jbpm.task.PeopleAssignments</class>
        <class>org.jbpm.task.Reassignment</class>        
        <class>org.jbpm.task.Status</class>
        <class>org.jbpm.task.Task</class>
        <class>org.jbpm.task.TaskData</class>
        <class>org.jbpm.task.SubTasksStrategy</class>
        <class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class>
        <class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class>
        <class>org.jbpm.task.User</class>
        <class>org.drools.persistence.info.SessionInfo</class>
        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
        <class>org.drools.persistence.info.WorkItemInfo</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.max_fetch_depth" value="3"/>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        </properties>        
    </persistence-unit>

</persistence>    
Run Code Online (Sandbox Code Playgroud)

和Taskorm-JPA2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
                 version="2.0">
      <named-query name="TasksAssignedAsBusinessAdministrator">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner             
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity businessAdministrator
where
    t.archived = 0 and
    businessAdministrator.id = :userId and
    businessAdministrator in elements ( t.peopleAssignments.businessAdministrators  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
      <named-query name="TasksAssignedAsExcludedOwner">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner 
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity excludedOwners
where
    t.archived = 0 and
    excludedOwners.id = :userId and
    excludedOwners in elements ( t.peopleAssignments.excludedOwners  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
      <named-query name="TasksAssignedAsPotentialOwner">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t
    left join t.taskData.createdBy as createdBy 
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity potentialOwners
where
    t.archived = 0 and
    potentialOwners.id = :userId and
    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
      <named-query name="TasksAssignedAsPotentialOwnerByStatus">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity potentialOwners
where
    t.archived = 0 and
    potentialOwners.id = :userId and
    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in (:status) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
            <named-query name="TasksAssignedAsPotentialOwnerWithGroups">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity potentialOwners
where
    t.archived = 0 and
    ( potentialOwners.id = :userId or potentialOwners.id in (:groupIds) ) and
    potentialOwners in elements ( t.peopleAssignments.potentialOwners )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
 <named-query name="TasksAssignedAsPotentialOwnerByStatusWithGroups">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity potentialOwners
where
    t.archived = 0 and
    ( potentialOwners.id = :userId or potentialOwners.id in (:groupIds) ) and
    potentialOwners in elements ( t.peopleAssignments.potentialOwners )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in (:status) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
       <named-query name="TasksAssignedAsPotentialOwnerByGroup">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity potentialOwners
where
    t.archived = 0 and
    potentialOwners.id = :groupId and
    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>

      <named-query name="SubTasksAssignedAsPotentialOwner">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity potentialOwners
where
    t.archived = 0 and
    t.taskData.parentId = :parentId and
    (potentialOwners.id = :userId or potentialOwners.id in (:groupIds)) and
    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>

<named-query name="GetSubTasksByParentTaskId">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name
where
    t.archived = 0 and
    t.taskData.parentId = :parentId and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>


      <named-query name="TasksAssignedAsRecipient">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner 
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity recipients
where
    t.archived = 0 and
    recipients.id = :userId and
    recipients in elements ( t.peopleAssignments.recipients  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
      <named-query name="TasksAssignedAsTaskInitiator">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner           
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity taskInitiator
where
    t.archived = 0 and
    taskInitiator.id = :userId and
    taskInitiator = t.peopleAssignments.taskInitiator and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
      <named-query name="TasksAssignedAsTaskStakeholder">
          <query>
select
     new org.jbpm.task.query.TaskSummary(
     t.id,
     t.taskData.processInstanceId,
     name.text,
     subject.text,
     description.text,
     t.taskData.status,
     t.priority,
     t.taskData.skipable,
     actualOwner,
     createdBy,
     t.taskData.createdOn,
     t.taskData.activationTime,
     t.taskData.expirationTime,
     t.taskData.processId,
     t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner           
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name,
    OrganizationalEntity taskStakeholder
where
    t.archived = 0 and
    taskStakeholder.id = :userId and
    taskStakeholder in elements ( t.peopleAssignments.taskStakeholders  )  and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>
      <named-query name="TasksOwned">
          <query>
select
    new org.jbpm.task.query.TaskSummary(
    t.id,
    t.taskData.processInstanceId,
    name.text,
    subject.text,
    description.text,
    t.taskData.status,
    t.priority,
    t.taskData.skipable,
    actualOwner,
    createdBy,
    t.taskData.createdOn,
    t.taskData.activationTime,
    t.taskData.expirationTime,
    t.taskData.processId,
    t.taskData.processSessionId)
from
    Task t 
    left join t.taskData.createdBy as createdBy
    left join t.taskData.actualOwner as actualOwner 
    left join t.subjects as subject
    left join t.descriptions as description
    left join t.names as name
where
    t.archived = 0 and
    t.taskData.actualOwner.id = :userId and

    (
    name.language = :language
    or t.names.size = 0
    ) and

    (
    subject.language = :language
    or t.subjects.size = 0
    ) and

    (
    description.language = :language
    or t.descriptions.size = 0
    ) and

    t.taskData.expirationTime is null
          </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
      </named-query>

    <named-query name="TasksByStatus">
        <query>
            select
            new org.jbpm.task.query.TaskSummary(
            t.id,
            t.taskData.processInstanceId,
            name.text,
            subject.text,
            description.text,
            t.taskData.status,
            t.priority,
            t.taskData.skipable,
            actualOwner,
            createdBy,
            t.taskData.createdOn,
            t.taskData.activationTime,
            t.taskData.expirationTime,
            t.taskData.processId,
            t.taskData.processSessionId)
            from
            Task t 
            left join t.taskData.createdBy as createdBy
            left join t.taskData.actualOwner as actualOwner 
            left join t.subjects as subject
            left join t.descriptions as description
            left join t.names as name
            where
            t.archived = 0 and
            t.taskData.status = :status and

            (
            name.language = :language
            or t.names.size = 0
            ) and

            (
            subject.language = :language
            or t.subjects.size = 0
            ) and

            (
            description.language = :language
            or t.descriptions.size = 0
            ) and

            t.taskData.expirationTime is null
        </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
    </named-query>
    <named-query name="TasksByStatusByProcessId">
        <query>
            select
            new org.jbpm.task.query.TaskSummary(
            t.id,
            t.taskData.processInstanceId,
            name.text,
            subject.text,
            description.text,
            t.taskData.status,
            t.priority,
            t.taskData.skipable,
            actualOwner,
            createdBy,
            t.taskData.createdOn,
            t.taskData.activationTime,
            t.taskData.expirationTime,
            t.taskData.processId,
            t.taskData.processSessionId)
            from
            Task t 
            left join t.taskData.createdBy as createdBy
            left join t.taskData.actualOwner as actualOwner 
            left join t.subjects as subject
            left join t.descriptions as description
            left join t.names as name
            where
            t.archived = 0 and
            t.taskData.status = :status and
            t.taskData.processInstanceId = :processId and
            (
            name.language = :language
            or t.names.size = 0
            ) and

            (
            subject.language = :language
            or t.subjects.size = 0
            ) and

            (
            description.language = :language
            or t.descriptions.size = 0
            ) and

            t.taskData.expirationTime is null
        </query>
          <!-- hint name="org.hibernate.timeout" value="200"/ -->
    </named-query>

</entity-mappings>
Run Code Online (Sandbox Code Playgroud)