论坛首页 Java企业应用论坛

在Spring应用中引入Jbpm4开发应用

浏览 11289 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-21   最后修改:2009-09-22

1.       执行创建的脚本

create table JBPM4_DEPLOYMENT (

        DBID_ bigint not null auto_increment,

        NAME_ longtext,

        TIMESTAMP_ bigint,

        STATE_ varchar(255),

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_DEPLOYPROP (

        DBID_ bigint not null auto_increment,

        DEPLOYMENT_ bigint,

        OBJNAME_ varchar(255),

        KEY_ varchar(255),

        STRINGVAL_ varchar(255),

        LONGVAL_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_EXECUTION (

        DBID_ bigint not null auto_increment,

        CLASS_ varchar(255) not null,

        DBVERSION_ integer not null,

        ACTIVITYNAME_ varchar(255),

        PROCDEFID_ varchar(255),

        HASVARS_ bit,

        NAME_ varchar(255),

        KEY_ varchar(255),

        ID_ varchar(255) unique,

        STATE_ varchar(255),

        SUSPHISTSTATE_ varchar(255),

        PRIORITY_ integer,

        HISACTINST_ bigint,

        PARENT_ bigint,

        INSTANCE_ bigint,

        SUPEREXEC_ bigint,

        SUBPROCINST_ bigint,

        PARENT_IDX_ integer,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_HIST_ACTINST (

        DBID_ bigint not null auto_increment,

        CLASS_ varchar(255) not null,

        DBVERSION_ integer not null,

        HPROCI_ bigint,

        TYPE_ varchar(255),

        EXECUTION_ varchar(255),

        ACTIVITY_NAME_ varchar(255),

        START_ datetime,

        END_ datetime,

        DURATION_ bigint,

        TRANSITION_ varchar(255),

        NEXTIDX_ integer,

        HTASK_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_HIST_DETAIL (

        DBID_ bigint not null auto_increment,

        CLASS_ varchar(255) not null,

        DBVERSION_ integer not null,

        USERID_ varchar(255),

        TIME_ datetime,

        HPROCI_ bigint,

        HPROCIIDX_ integer,

        HACTI_ bigint,

        HACTIIDX_ integer,

        HTASK_ bigint,

        HTASKIDX_ integer,

        HVAR_ bigint,

        HVARIDX_ integer,

        MESSAGE_ longtext,

        OLD_INT_ integer,

        NEW_INT_ integer,

        OLD_STR_ varchar(255),

        NEW_STR_ varchar(255),

        OLD_TIME_ datetime,

        NEW_TIME_ datetime,

        PARENT_ bigint,

        PARENT_IDX_ integer,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_HIST_PROCINST (

        DBID_ bigint not null,

        DBVERSION_ integer not null,

        ID_ varchar(255),

        PROCDEFID_ varchar(255),

        KEY_ varchar(255),

        START_ datetime,

        END_ datetime,

        DURATION_ bigint,

        STATE_ varchar(255),

        ENDACTIVITY_ varchar(255),

        NEXTIDX_ integer,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_HIST_TASK (

        DBID_ bigint not null,

        DBVERSION_ integer not null,

        EXECUTION_ varchar(255),

        OUTCOME_ varchar(255),

        ASSIGNEE_ varchar(255),

        PRIORITY_ integer,

        STATE_ varchar(255),

        CREATE_ datetime,

        END_ datetime,

        DURATION_ bigint,

        NEXTIDX_ integer,

        SUPERTASK_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_HIST_VAR (

        DBID_ bigint not null,

        DBVERSION_ integer not null,

        PROCINSTID_ varchar(255),

        EXECUTIONID_ varchar(255),

        VARNAME_ varchar(255),

        VALUE_ varchar(255),

        HPROCI_ bigint,

        HTASK_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_ID_GROUP (

        DBID_ bigint not null auto_increment,

        DBVERSION_ integer not null,

        ID_ varchar(255),

        NAME_ varchar(255),

        TYPE_ varchar(255),

        PARENT_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_ID_MEMBERSHIP (

        DBID_ bigint not null auto_increment,

        DBVERSION_ integer not null,

        USER_ bigint,

        GROUP_ bigint,

        NAME_ varchar(255),

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_ID_USER (

        DBID_ bigint not null auto_increment,

        DBVERSION_ integer not null,

        ID_ varchar(255),

        PASSWORD_ varchar(255),

        GIVENNAME_ varchar(255),

        FAMILYNAME_ varchar(255),

        BUSINESSEMAIL_ varchar(255),

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_JOB (

        DBID_ bigint not null auto_increment,

        CLASS_ varchar(255) not null,

        DBVERSION_ integer not null,

        DUEDATE_ datetime,

        STATE_ varchar(255),

        ISEXCLUSIVE_ bit,

        LOCKOWNER_ varchar(255),

        LOCKEXPTIME_ datetime,

        EXCEPTION_ longtext,

        RETRIES_ integer,

        PROCESSINSTANCE_ bigint,

        EXECUTION_ bigint,

        CFG_ bigint,

        SIGNAL_ varchar(255),

        EVENT_ varchar(255),

        REPEAT_ varchar(255),

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_LOB (

        DBID_ bigint not null auto_increment,

        DBVERSION_ integer not null,

        BLOB_VALUE_ longblob,

        DEPLOYMENT_ bigint,

        NAME_ longtext,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_PARTICIPATION (

        DBID_ bigint not null auto_increment,

        DBVERSION_ integer not null,

        GROUPID_ varchar(255),

        USERID_ varchar(255),

        TYPE_ varchar(255),

        TASK_ bigint,

        SWIMLANE_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_SWIMLANE (

        DBID_ bigint not null auto_increment,

        DBVERSION_ integer not null,

        NAME_ varchar(255),

        ASSIGNEE_ varchar(255),

        EXECUTION_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_TASK (

        DBID_ bigint not null auto_increment,

        CLASS_ char(1) not null,

        DBVERSION_ integer not null,

        NAME_ varchar(255),

        DESCR_ longtext,

        STATE_ varchar(255),

        SUSPHISTSTATE_ varchar(255),

        ASSIGNEE_ varchar(255),

        FORM_ varchar(255),

        PRIORITY_ integer,

        CREATE_ datetime,

        DUEDATE_ datetime,

        PROGRESS_ integer,

        SIGNALLING_ bit,

        EXECUTION_ID_ varchar(255),

        ACTIVITY_NAME_ varchar(255),

        HASVARS_ bit,

        SUPERTASK_ bigint,

        EXECUTION_ bigint,

        PROCINST_ bigint,

        SWIMLANE_ bigint,

        TASKDEFNAME_ varchar(255),

        primary key (DBID_)

    ) type=InnoDB;

 

    create table JBPM4_VARIABLE (

        DBID_ bigint not null auto_increment,

        CLASS_ varchar(255) not null,

        DBVERSION_ integer not null,

        KEY_ varchar(255),

        CONVERTER_ varchar(255),

        HIST_ bit,

        EXECUTION_ bigint,

        TASK_ bigint,

        DATE_VALUE_ datetime,

        DOUBLE_VALUE_ double precision,

        LONG_VALUE_ bigint,

        STRING_VALUE_ varchar(255),

        TEXT_VALUE_ longtext,

        LOB_ bigint,

        EXESYS_ bigint,

        primary key (DBID_)

    ) type=InnoDB;

 

    create index IDX_DEPLPROP_DEPL on JBPM4_DEPLOYPROP (DEPLOYMENT_);

 

    alter table JBPM4_DEPLOYPROP

        add index FK_DEPLPROP_DEPL (DEPLOYMENT_),

        add constraint FK_DEPLPROP_DEPL

        foreign key (DEPLOYMENT_)

        references JBPM4_DEPLOYMENT (DBID_);

 

    create index IDX_EXEC_SUPEREXEC on JBPM4_EXECUTION (SUPEREXEC_);

 

    create index IDX_EXEC_INSTANCE on JBPM4_EXECUTION (INSTANCE_);

 

    create index IDX_EXEC_SUBPI on JBPM4_EXECUTION (SUBPROCINST_);

 

    create index IDX_EXEC_PARENT on JBPM4_EXECUTION (PARENT_);

 

    alter table JBPM4_EXECUTION

        add index FK_EXEC_PARENT (PARENT_),

        add constraint FK_EXEC_PARENT

        foreign key (PARENT_)

        references JBPM4_EXECUTION (DBID_);

 

    alter table JBPM4_EXECUTION

        add index FK_EXEC_SUBPI (SUBPROCINST_),

        add constraint FK_EXEC_SUBPI

        foreign key (SUBPROCINST_)

        references JBPM4_EXECUTION (DBID_);

 

    alter table JBPM4_EXECUTION

        add index FK_EXEC_INSTANCE (INSTANCE_),

        add constraint FK_EXEC_INSTANCE

        foreign key (INSTANCE_)

        references JBPM4_EXECUTION (DBID_);

 

    alter table JBPM4_EXECUTION

        add index FK_EXEC_SUPEREXEC (SUPEREXEC_),

        add constraint FK_EXEC_SUPEREXEC

        foreign key (SUPEREXEC_)

        references JBPM4_EXECUTION (DBID_);

 

    create index IDX_HACTI_HPROCI on JBPM4_HIST_ACTINST (HPROCI_);

 

    create index IDX_HTI_HTASK on JBPM4_HIST_ACTINST (HTASK_);

 

    alter table JBPM4_HIST_ACTINST

        add index FK_HACTI_HPROCI (HPROCI_),

        add constraint FK_HACTI_HPROCI

        foreign key (HPROCI_)

        references JBPM4_HIST_PROCINST (DBID_);

 

    alter table JBPM4_HIST_ACTINST

        add index FK_HTI_HTASK (HTASK_),

        add constraint FK_HTI_HTASK

        foreign key (HTASK_)

        references JBPM4_HIST_TASK (DBID_);

 

    create index IDX_HDET_HACTI on JBPM4_HIST_DETAIL (HACTI_);

 

    create index IDX_HDET_HPROCI on JBPM4_HIST_DETAIL (HPROCI_);

 

    create index IDX_HDETAIL_HACTI on JBPM4_HIST_DETAIL (HACTI_);

 

    create index IDX_HDETAIL_HVAR on JBPM4_HIST_DETAIL (HVAR_);

 

    create index IDX_HDETAIL_HTASK on JBPM4_HIST_DETAIL (HTASK_);

 

    create index IDX_HDETAIL_HPROCI on JBPM4_HIST_DETAIL (HPROCI_);

 

    create index IDX_HDET_HVAR on JBPM4_HIST_DETAIL (HVAR_);

 

    create index IDX_HDET_HTASK on JBPM4_HIST_DETAIL (HTASK_);

 

    alter table JBPM4_HIST_DETAIL

        add index FK_HDETAIL_HPROCI (HPROCI_),

        add constraint FK_HDETAIL_HPROCI

        foreign key (HPROCI_)

        references JBPM4_HIST_PROCINST (DBID_);

 

    alter table JBPM4_HIST_DETAIL

        add index FK_HDETAIL_HACTI (HACTI_),

        add constraint FK_HDETAIL_HACTI

        foreign key (HACTI_)

        references JBPM4_HIST_ACTINST (DBID_);

 

    alter table JBPM4_HIST_DETAIL

        add index FK_HDETAIL_HTASK (HTASK_),

        add constraint FK_HDETAIL_HTASK

        foreign key (HTASK_)

        references JBPM4_HIST_TASK (DBID_);

 

    alter table JBPM4_HIST_DETAIL

        add index FK_HDETAIL_HVAR (HVAR_),

        add constraint FK_HDETAIL_HVAR

        foreign key (HVAR_)

        references JBPM4_HIST_VAR (DBID_);

 

    alter table JBPM4_HIST_TASK

        add index FK_HSUPERT_SUB (SUPERTASK_),

        add constraint FK_HSUPERT_SUB

        foreign key (SUPERTASK_)

        references JBPM4_HIST_TASK (DBID_);

 

    create index IDX_HVAR_HPROCI on JBPM4_HIST_VAR (HPROCI_);

 

    create index IDX_HVAR_HTASK on JBPM4_HIST_VAR (HTASK_);

 

    alter table JBPM4_HIST_VAR

        add index FK_HVAR_HPROCI (HPROCI_),

        add constraint FK_HVAR_HPROCI

        foreign key (HPROCI_)

        references JBPM4_HIST_PROCINST (DBID_);

 

    alter table JBPM4_HIST_VAR

        add index FK_HVAR_HTASK (HTASK_),

        add constraint FK_HVAR_HTASK

        foreign key (HTASK_)

        references JBPM4_HIST_TASK (DBID_);

 

    create index IDX_GROUP_PARENT on JBPM4_ID_GROUP (PARENT_);

 

    alter table JBPM4_ID_GROUP

        add index FK_GROUP_PARENT (PARENT_),

        add constraint FK_GROUP_PARENT

        foreign key (PARENT_)

        references JBPM4_ID_GROUP (DBID_);

 

    create index IDX_MEM_USER on JBPM4_ID_MEMBERSHIP (USER_);

 

    create index IDX_MEM_GROUP on JBPM4_ID_MEMBERSHIP (GROUP_);

 

    alter table JBPM4_ID_MEMBERSHIP

        add index FK_MEM_GROUP (GROUP_),

        add constraint FK_MEM_GROUP

        foreign key (GROUP_)

        references JBPM4_ID_GROUP (DBID_);

 

    alter table JBPM4_ID_MEMBERSHIP

        add index FK_MEM_USER (USER_),

        add constraint FK_MEM_USER

        foreign key (USER_)

        references JBPM4_ID_USER (DBID_);

 

    create index IDX_JOBRETRIES on JBPM4_JOB (RETRIES_);

 

    create index IDX_JOB_CFG on JBPM4_JOB (CFG_);

 

    create index IDX_JOB_PRINST on JBPM4_JOB (PROCESSINSTANCE_);

 

    create index IDX_JOB_EXE on JBPM4_JOB (EXECUTION_);

 

    create index IDX_JOBLOCKEXP on JBPM4_JOB (LOCKEXPTIME_);

 

    create index IDX_JOBDUEDATE on JBPM4_JOB (DUEDATE_);

 

    alter table JBPM4_JOB

        add index FK_JOB_CFG (CFG_),

        add constraint FK_JOB_CFG

        foreign key (CFG_)

        references JBPM4_LOB (DBID_);

 

    create index IDX_LOB_DEPLOYMENT on JBPM4_LOB (DEPLOYMENT_);

 

    alter table JBPM4_LOB

        add index FK_LOB_DEPLOYMENT (DEPLOYMENT_),

        add constraint FK_LOB_DEPLOYMENT

        foreign key (DEPLOYMENT_)

        references JBPM4_DEPLOYMENT (DBID_);

 

    create index IDX_PART_TASK on JBPM4_PARTICIPATION (TASK_);

 

    alter table JBPM4_PARTICIPATION

        add index FK_PART_SWIMLANE (SWIMLANE_),

        add constraint FK_PART_SWIMLANE

        foreign key (SWIMLANE_)

        references JBPM4_SWIMLANE (DBID_);

 

    alter table JBPM4_PARTICIPATION

        add index FK_PART_TASK (TASK_),

        add constraint FK_PART_TASK

        foreign key (TASK_)

        references JBPM4_TASK (DBID_);

 

    create index IDX_SWIMLANE_EXEC on JBPM4_SWIMLANE (EXECUTION_);

 

    alter table JBPM4_SWIMLANE

        add index FK_SWIMLANE_EXEC (EXECUTION_),

        add constraint FK_SWIMLANE_EXEC

        foreign key (EXECUTION_)

        references JBPM4_EXECUTION (DBID_);

 

    create index IDX_TASK_SUPERTASK on JBPM4_TASK (SUPERTASK_);

 

    alter table JBPM4_TASK

        add index FK_TASK_SWIML (SWIMLANE_),

        add constraint FK_TASK_SWIML

        foreign key (SWIMLANE_)

        references JBPM4_SWIMLANE (DBID_);

 

    alter table JBPM4_TASK

        add index FK_TASK_SUPERTASK (SUPERTASK_),

        add constraint FK_TASK_SUPERTASK

        foreign key (SUPERTASK_)

        references JBPM4_TASK (DBID_);

 

    create index IDX_VAR_EXESYS on JBPM4_VARIABLE (EXESYS_);

 

    create index IDX_VAR_TASK on JBPM4_VARIABLE (TASK_);

 

    create index IDX_VAR_EXECUTION on JBPM4_VARIABLE (EXECUTION_);

 

    create index IDX_VAR_LOB on JBPM4_VARIABLE (LOB_);

 

    alter table JBPM4_VARIABLE

        add index FK_VAR_LOB (LOB_),

        add constraint FK_VAR_LOB

        foreign key (LOB_)

        references JBPM4_LOB (DBID_);

 

    alter table JBPM4_VARIABLE

        add index FK_VAR_EXECUTION (EXECUTION_),

        add constraint FK_VAR_EXECUTION

        foreign key (EXECUTION_)

        references JBPM4_EXECUTION (DBID_);

 

    alter table JBPM4_VARIABLE

        add index FK_VAR_EXESYS (EXESYS_),

        add constraint FK_VAR_EXESYS

        foreign key (EXESYS_)

        references JBPM4_EXECUTION (DBID_);

 

    alter table JBPM4_VARIABLE

        add index FK_VAR_TASK (TASK_),

        add constraint FK_VAR_TASK

        foreign key (TASK_)

        references JBPM4_TASK (DBID_);

 

 


 

 

2.       加入依赖的jar包

Jbpm.jar

 

配置自己的Mysql 库

如在src下或其他源代码目录下,放置

 

Jpbm.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

 

<jbpm-configuration>

  <import resource="jbpm.default.cfg.xml" />

  <import resource="jbpm.tx.hibernate.cfg.xml" />

  <import resource="jbpm.jpdl.cfg.xml" />

  <import resource="jbpm.identity.cfg.xml" />

</jbpm-configuration>

 


 

Jbpm.hibernate.cfg.xml

 

<?xml version="1.0" encoding="utf-8"?>

 

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>

     <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

     <property name="hibernate.connection.url">jdbc:mysql://localhost/eoffice?useUnicode=true&amp;characterEncoding=utf-8</property>

     <property name="hibernate.connection.username">root</property>

     <property name="hibernate.connection.password">000</property>

     <property name="hibernate.format_sql">true</property>

     <mapping resource="jbpm.repository.hbm.xml" />

     <mapping resource="jbpm.execution.hbm.xml" />

     <mapping resource="jbpm.history.hbm.xml" />

     <mapping resource="jbpm.task.hbm.xml" />

     <mapping resource="jbpm.identity.hbm.xml" />

  </session-factory>

</hibernate-configuration>

 



 

扩展流程中的角色与用户为自己系统中的用户及角色。

 

AppUser实体需要扩展org.jbpm.api.identity.User接口

AppRole实体需要扩展org.jbpm.api.identity.Group接口

 

实现自己系统中的IdentityService接口

 

如写一个类(UserSession)实现org.jbpm.pvm.internal.identity.spi.IdentitySession这个接口。

 

public class UserSession implements IdentitySession{

      

        //仅需要扩展以下方法即可

 

         //---------------------------------methods above are not need overwrite--------------------------------------------

  

    @Override

    public Group findGroupById(String groupId) {

       // TODO Auto-generated method stub

       return null;

    }

 

    @Override

    public List<Group> findGroupsByUser(String arg0) {

       // TODO Auto-generated method stub

       return null;

    }

 

    @Override

    public List<Group> findGroupsByUserAndGroupType(String arg0, String arg1) {

       // TODO Auto-generated method stub

       return null;

    }

 

    @Override

    public User findUserById(String arg0) {

       // TODO Auto-generated method stub

       return null;

    }

 

    @Override

    public List<User> findUsers() {

       // TODO Auto-generated method stub

       return null;

    }

 

    @Override

    public List<User> findUsersByGroup(String arg0) {

       // TODO Auto-generated method stub

       return null;

    }

 

    @Override

    public List<User> findUsersById(String... arg0) {

       // TODO Auto-generated method stub

       return null;

   }

}

 


加入用户及组的系统扩展实现配置。

Jbpm.identity.cfg.xml

 

<?xml version="1.0" encoding="UTF-8"?>

 

<jbpm-configuration>

  <transaction-context>

     <object class="com.htsoft.core.jbpm.UserSession"/>

  </transaction-context>

</jbpm-configuration>

 



 

 

配置Jbpm.xml的Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>

 

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"

    default-lazy-init="true">

  

    <bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">

        <constructor-arg value="jbpm.cfg.xml" />

    </bean>

  

    <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />

    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />

    <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />

    <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>

    <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>

    <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>

  

    <!--

    <bean id="jbpmTemplate" class="com.bmsoft.jbpm.spring.JbpmTemplate">

       <property name="processEngine" ref="processEngine"/>

       <property name="proDefinitionService" ref="proDefinitionService"/>

       <property name="dataSource" ref="dataSource"/>

    </bean>

     -->

</beans>

 


如下,在此则可以完成在Spring程序中引入Jpbm4的开发应用,后面取可以进行应用流程发布,表单会签等的操作了。

 

   发表时间:2009-09-22  
你的事务如何处理  这是个大问题
0 请登录后投票
   发表时间:2009-09-22   最后修改:2009-09-22
问题提得很好,关于Jbpm4的事务管理问题,可以把所有的操作均封装在JbpmTemplate的Bean里,则它来完成,它则由Spring的事务拦截器进行了拦截管理,因而可以保证事务。

如:

    <tx:annotation-driven transaction-manager="txManager"/>
   
  <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
    </bean>

<aop:config>
<aop:pointcut id="servicePointCut" expression="execution(* com.htsoft.oa.service..*(..))"/>
<aop:pointcut id="servicePointCut2" expression="execution(* com.htsoft.core.service..*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut2"/>
</aop:config>

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="is*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

而另一种方式可以使用通过改写Jbpm4中的jbpm.tx.hibernate.cfg.xml的配置,主要是修改processEngine 这个bean里的sessionFactory.从而再加上上面这种方式来进行事务的管理。

如:原配置为:
<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

  <process-engine-context>
    <command-service>
      <retry-interceptor />
      <environment-interceptor />
      <standard-transaction-interceptor />
    </command-service>
  </process-engine-context>

  <transaction-context>
    <transaction />
    <hibernate-session />
  </transaction-context>

</jbpm-configuration>

修改以上 <standard-transaction-interceptor />为<spring-transaction-interceptor />
<hibernate-session /><transaction />为<hibernate-session current="true"/>
current="true"这个属性将强使jbpm搜索当前的spring提供的session。

另外,你需要在你的hibernateSessionFactory上配置上Jpbm的hbm.xml文件。如:

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingLocations">
<list>
<value>classpath*:com/htsoft/oa/model/**/*.hbm.xml</value>
<value>classpath:jbpm.repository.hbm.xml</value>
    <value>classpath:jbpm.execution.hbm.xml</value>
    <value>classpath:jbpm.history.hbm.xml</value>
    <value>classpath:jbpm.task.hbm.xml</value>
    <value>classpath:jbpm.identity.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="connection.useUnicode">true</prop>
<prop key="connection.characterEncoding">utf-8</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<prop key="hibernate.jdbc.fetch_size">20</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="net.sf.ehcache.configurationResourceName">conf/ehcache.xml</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
</props>
</property>
</bean>

最后还需要在jbpm.default.cfg.xml中注释以下代码:
<!--
    <hibernate-configuration>
      <cfg resource="jbpm.hibernate.cfg.xml" />    
    </hibernate-configuration>
    <hibernate-session-factory />
-->

这样测试马上可以通过
0 请登录后投票
   发表时间:2009-09-22  
回答的好

引用
修改以上 <standard-transaction-interceptor />为<spring-transaction-interceptor />
<hibernate-session /><transaction />为<hibernate-session current="true"/>
current="true"这个属性将强使jbpm搜索当前的spring提供的session。


不怎么清楚 差点没有把<transaction />给去掉 就没有成功  帮你格式化一下

<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

	<process-engine-context>
		<command-service>
			<retry-interceptor />
			<environment-interceptor />
			<spring-transaction-interceptor />
		</command-service>
	</process-engine-context>

	<transaction-context>
		<hibernate-session current="true" />
	</transaction-context>

</jbpm-configuration>



另外 把你的文章和 http://yale.iteye.com/blog/462792 就完美了 其中你帮我解决了事务问题 而引用的文章帮我找到了 ProcessEngineFactoryBean 这个类

事务问题 已经拖了我2个月了 今天解决了 酣畅淋漓

谢谢
0 请登录后投票
   发表时间:2009-09-22  
呵,没有格式化代码。
ProcessEngineFactoryBean这个东西也可以不用,直接用回Jbpm提供的实现,
如我在
<bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
   <constructor-arg value="jbpm.cfg.xml" />
   <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />
0 请登录后投票
   发表时间:2009-10-26  
扩展流程中的角色与用户为自己系统中的用户及角色。

AppUser实体需要扩展org.jbpm.api.identity.User接口

AppRole实体需要扩展org.jbpm.api.identity.Group接口

能不能说说具体的啊?扩展后,任务接口的findGroupTask是不是就不能用了?
谢谢!

0 请登录后投票
   发表时间:2010-03-02  
你好,我不能问一下,你那个jobexecutor是怎么弄的,我使用spring+hibernate+jbpm4,会自动启动jobexecutor,而每次查询数据表的时候,总会说session is closed(session是spring管理的),有没有办法解决这个问题?
0 请登录后投票
   发表时间:2010-06-30  
JBPM4.3 通过什么方法来获得ProcessEngine?
类似于 SpringConfiguration 的buildProcessEngine()方法?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics