سؤال

ولقد ورث التطبيق باستخدام jBPM والربيع واني اسعى الى معرفة ما اذا كان تم تكوينه على النحو الذي ينبغي أن يكون.

والسؤال الأول: هل jBPM تمتد على JTA (و / أو السبات JDBC) معاملة واحدة عبر إجراءات متعددة في نفس التحول بشكل افتراضي؟ إذا لم يكن كذلك، فإنه يمكن أن يتم تكوين ل؟ حتى في المثال التالي هل هناك طريقة لتشمل صفقة عبر Action1 وAction2.

الإجراءات

وjBPM في هذا المشروع استرداد خدمات أو DAOs (JDBC) من سياق الربيع. لتكوين موضح أدناه، هي إجراءات jBPM وطرق خدمة / DAO يدعون مغلفة في صفقة واحدة؟ والمشروح أساليب 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 سنة)، ولكن ربما أنها سوف تساعد الآخرين القادمة من جوجل أو البحث في الموقع.

ولم تقم بتحديد أي إصدار من JBPM كنت تستخدم، لذلك أفترض 4.x من ل5 لم يكن مستعدا آنذاك؛)

وJBPM يدير كل أمر (مهمة) في انها المعاملة الخاصة افتراضيا ويستخدم أنها إدارة المعاملات الخاصة لهذه المهمة. وذلك في أجل أن استخدام الربيع، لديك لإجراء بعض التغييرات على jbpm.cfg.xml، وهي حقن <spring-transaction-interceptor /> و<hibernate-session current="true" />.

وهذا بلوق وظيفة ينبغي أن تساعد تكوين كل ذلك، على الرغم من: http://blog.aparnachaudhary.net/2010/08/ 19 / jbpm4-4-مع spring3 /

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top