Pergunta

Eu herdei um aplicativo usando jBPM e Primavera e estou tentando descobrir se ele está configurado da forma como deve ser.

Primeira pergunta: Será que jBPM período uma única JTA transações (JDBC e / ou hibernação) em várias ações na mesma transição por padrão? Se não, ele pode ser configurado para? Assim, no exemplo abaixo, há uma maneira para abranger uma transação através Action1 e Ação2.

acções jBPM neste projecto recuperar serviços ou DAOs (JDBC) de contexto da Primavera. Para a configuração descrita abaixo, são ações jBPM e os métodos do serviço / dao eles invocam encapsulados em uma transação? métodos DAO e serviços são anotados com @Transactional si mesmos.

definição Estado:

<state name="SomeState">
    <event type="node-enter">
    <action class="SomeAction"/>
    </event>
    <transition name="transition1" to="finish">
    <action class="Action1"/>
    <action class="Action2"/>
    </transition>
    <transition name="transition.stop" to="finish"/>
</state>

Meu jBPM config:

<jbpm-configuration>

    <jbpm-context>
        <!--<service name="persistence" factory="org.jbpm.persistence.db.DbPersistenceServiceFactory" />-->
    <service name="persistence">
        <factory>
            <bean class="org.jbpm.persistence.jta.JtaDbPersistenceServiceFactory">
                <field name="isTransactionEnabled">
                    <false />
                </field>
            </bean>
        </factory>
    </service>
    <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
    <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />
    <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />
    <service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" />
    <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />
    </jbpm-context>

    <!-- configuration property used by persistence service impl org.jbpm.persistence.db.DbPersistenceServiceFactory -->
    <string name="resource.hibernate.cfg.xml" value="hibernate.jbpm.cfg.xml" />

    <!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar -->
    <string name="resource.business.calendar" value="org/jbpm/calendar/jbpm.business.calendar.properties" />
    <string name="resource.default.modules" value="org/jbpm/graph/def/jbpm.default.modules.properties" />
    <string name="resource.converter" value="org/jbpm/db/hibernate/jbpm.converter.properties" />
    <string name="resource.action.types" value="org/jbpm/graph/action/action.types.xml" />
    <string name="resource.node.types" value="org/jbpm/graph/node/node.types.xml" />
    <string name="resource.parsers" value="org/jbpm/jpdl/par/jbpm.parsers.xml" />
    <string name="resource.varmapping" value="org/jbpm/context/exe/jbpm.varmapping.xml" />
    <string name="resource.mail.templates" value="jbpm.mail.templates.xml" />

    <int name="jbpm.byte.block.size" value="1024" singleton="true" />
    <bean name="jbpm.task.instance.factory" class="org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl" singleton="true" />
    <bean name="jbpm.variable.resolver" class="org.jbpm.jpdl.el.impl.JbpmVariableResolver" singleton="true" />
    <string name="jbpm.mail.smtp.host" value="localhost" />
    <bean name="jbpm.mail.address.resolver" class="org.jbpm.identity.mail.IdentityAddressResolver" singleton="true" />
    <string name="jbpm.mail.from.address" value="jbpm@noreply" />

    <bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor">
    <field name="jbpmConfiguration"><ref bean="jbpmConfiguration" /></field>
    <field name="name"><string value="JbpmJobExecutor" /></field>
    <field name="nbrOfThreads"><int value="1" /></field>
    <field name="idleInterval"><int value="5000" /></field>
    <field name="maxIdleInterval"><int value="3600000" /></field> <!-- 1 hour -->
    <field name="historyMaxSize"><int value="20" /></field>
    <field name="maxLockTime"><int value="600000" /></field> <!-- 10 minutes -->
    <field name="lockMonitorInterval"><int value="60000" /></field> <!-- 1 minute -->
    <field name="lockBufferTime"><int value="5000" /></field> <!-- 5 seconds -->
    </bean>

</jbpm-configuration>

configuração primavera relevante:

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
    <property name="transactionInterceptor" ref="txInterceptor"/>
</bean>

<bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributeSource">
    <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
Foi útil?

Solução

Eu sei que é uma resposta tardia (1 ano velha questão), mas talvez ele vai ajudar os outros vindos de pesquisa no site Google ou.

Você não especificou qual versão do JBPM você está usando, então estou assumindo 4.x porque 5 não estava pronto naquela época;)

JBPM executa cada comando (tarefa) em sua própria transação por padrão e usos seu próprio gerenciador de transações para este trabalho. Então, para o uso Spring, você tem que fazer algumas alterações para o jbpm.cfg.xml, nomeadamente <spring-transaction-interceptor /> injetar e <hibernate-session current="true" />.

Este post deve ajudar a configurar tudo isso, porém: http://blog.aparnachaudhary.net/2010/08/ 19 / jbpm4-4-com-spring3 /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top