jbpm 与 spring的整合问题。

cnwy 2008-04-23
从网上收了一下相关帖子,使用spring-modules-jbpm31进行整合,但是并没有实现
1. 与原有spring事务的集成(hibernate session)
2. 当然声明式事务也不行

我是这么做的:
1.修改sessionFactory的配置,加入
<property name="mappingJarLocations">
            <list>
                <value>classpath*:jbpm-3.1.4.jar</value>
                <value>classpath*:jbpm-identity-3.1.4.jar</value>
            </list>
        </property>

2.定义jbpmConfiguration
<bean id="jbpmConfiguration"
          class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
        <property name="sessionFactory" ref="sessionFactoryBean"/>
        <property name="configuration" value="classpath:jbpm.cfg.xml"/>
    </bean>

3.仿照HibernateDaoSupport的方式编写JbpmService
public class JbpmService extends JbpmDaoSupport
{

    public ProcessInstance findProcessInstance(final Long processInstanceId)
    {
        return getTemplate().findProcessInstance(processInstanceId);
    }
...


4.定义JbpmService
先后试了两种,第二种实际上是不起作用的
    <bean id="jbpmService"
          class="com.service.JbpmService">
        <property name="jbpmConfiguration" ref="jbpmConfiguration"/>
    </bean>

    <!--<bean id="jbpmService" parent="proxyFactoryBean">-->
        <!--<property name="target">-->
            <!--<bean class="com.service.JbpmService">-->
                <!--<property name="jbpmConfiguration">-->
                    <!--<ref bean="jbpmConfiguration"/>-->
                <!--</property>-->
            <!--</bean>-->
        <!--</property>-->
    <!--</bean>-->

5.测试程序能正常工作,但达不到我上面说的要求。
JbpmService jbpmService = (JbpmService)currentContext().getBean("jbpmService");
        System.out.println("jbpmService = " + jbpmService);

        List instances = jbpmService.findTaskInstances("xx");
        System.out.println("instances.size() = " + instances.size());


为了实现上面说的要求,我只能从HibernateDaoSupport继承下来。再拷贝JbpmTemplate中的callback的实现方法,把session放到context中,这样可以实现前面说的两点,但完全没有利用上JbpmTemplate和JbpmDaoSupport。始终感觉是这不是最佳用法。

大家都是怎么做的?
cnwy 2008-04-24
搞定了,是我自己测试的时候搞错了,最简单的方法是对的。

第4步,换成:
    <bean id="jbpmTemplate" class="org.springmodules.workflow.jbpm31.JbpmTemplate">
        <constructor-arg index="0" ref="jbpmConfiguration"/>
    </bean>

    <bean id="jbpmService" parent="proxyFactoryBean">
        <property name="target">
            <bean class="com.service.JbpmService">
                <property name="template">
                    <ref bean="jbpmTemplate"/>
                </property>
            </bean>
        </property>
    </bean>

就可以了。
lee_xq1984 2008-04-28
留个名!方便以后查找!
crabboy 2008-05-06
我也留个名
crabboy 2008-05-09
currentContext()哪来的啊?
crabboy 2008-05-11
parent="proxyFactoryBean"
怎么来的啊?
isky 2008-05-12
一直 没有做过spting 与 jbpm整合过 今天先学习以下