Frage

Ich habe eine App mit jBPM und Spring geerbt und ich versuche, herauszufinden, ob es die Art und Weise konfiguriert ist, sollte es sein.

Erste Frage: Ist umspannt jBPM eine einzelne JTA (JDBC und / oder Ruhezustand) Transaktion über mehrere Aktionen in dem gleichen Übergang von Standard? Wenn nicht, kann es so konfiguriert werden? So im Beispiel unten ist es eine Möglichkeit, eine Transaktion über Action1 und Action2 zu überspannen.

jBPM Aktionen in diesem Projekt abrufen Dienste oder DAOs (JDBC) von Spring Kontext. Für die Konfiguration unten beschrieben wird, sind jBPM Aktionen und die Service / DAO-Methoden rufen sie in einer Transaktion gekapselt? DAO und Service-Methoden sind mit @Transactional selbst kommentiert.

Staat Definition:

<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>

Meine 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>

Relevante Feder config:

<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"/>
War es hilfreich?

Lösung

Ich weiß, es ist eine späte Antwort (1 Jahr alt Frage), aber vielleicht wird es andere helfen, von Google oder Website-Suche kommen.

Sie haben nicht, welche Version von JBPM angegeben Sie verwenden, so dass ich gehe mal davon aus 4.x, weil 5 damals nicht bereit war;)

JBPM läuft jeden Befehl (Aufgabe) in einem eigenen Transaktion standardmäßig und verwendet ein eigener Transaktionsmanager für diesen Job ist. Also, um es Frühling zu verwenden, müssen Sie einige Änderungen an der jbpm.cfg.xml machen, nämlich <spring-transaction-interceptor /> und <hibernate-session current="true" /> injizieren.

Dieser Blog-Eintrag sollte dazu beitragen, alle davon zu konfigurieren, obwohl: http://blog.aparnachaudhary.net/2010/08/ 19 / jbpm4-4-with-spring3 /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top