jBPM + Springトランザクションの共有とスコープ
-
06-07-2019 - |
質問
jBPMとSpringを使用してアプリを継承しましたが、そのように設定されているかどうかを確認しようとしています。
最初の質問:jBPMは、デフォルトで同じトランジションの複数のアクションにわたる単一のJTA(JDBCまたはHibernate)トランザクションにまたがっていますか? そうでない場合は、次のように構成できますか? そのため、以下の例では、トランザクションをAction1とAction2にまたがる方法があります。
このプロジェクトのjBPMアクションは、SpringコンテキストからサービスまたはDAO(JDBC)を取得します。 以下で説明する構成の場合、jBPMアクションとそれらが呼び出すサービス/ DAOメソッドは1つのトランザクションにカプセル化されていますか? DAOおよびサービスメソッドには、@ Transactional自体の注釈が付けられています。
状態の定義:
<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>
私のjBPM設定:
<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>
関連するスプリング設定:
<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"/>
解決
返信が遅い(1年前の質問)ことは知っていますが、Googleやサイト検索から来ている他の人の助けになるかもしれません。
使用しているJBPMのバージョンを指定していないので、5は当時準備ができていなかったため、4.xを想定しています;)
JBPMは、デフォルトで各コマンド(タスク)を独自のトランザクションで実行し、このジョブに対して独自のトランザクションマネージャーを使用します。したがって、Springを使用するには、jbpm.cfg.xmlにいくつかの変更、つまり<spring-transaction-interceptor />
と<hibernate-session current="true" />
を挿入する必要があります。
このブログ投稿は、すべての設定に役立つはずです: http://blog.aparnachaudhary.net/2010/08/ 19 / jbpm4-4-with-spring3 /