<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>ppig</title>
    <description></description>
    <link>http://ppig.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>jBPM和spring的事务整合</title>
        <author>ppig</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ppig.javaeye.com">ppig</a>&nbsp;
          链接：<a href="http://ppig.javaeye.com/blog/148769" style="color:red;">http://ppig.javaeye.com/blog/148769</a>&nbsp;
          发表时间: 2007年12月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          项目要用到jBPM。由于是不同数据库schema，所以使用了JTA。<br />当在把jBPM整合到spring的时候用到了spring-extensions(spring-modules)。<br />贴出来，各位看有什么不好的地方。<br /><br />步骤：<br />1.jBPM -> spring<br />2.配置jta,并把jbpm和自己的bizniz纳入到jta里<br /><br /><br />applicationContext-jbpm.xml<br /><br /><pre name="code" class="java">
	&lt;bean id="jbpmDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
        &lt;property name="dataSource">
            &lt;bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
	            &lt;property name="transactionManager" ref="jotm" />
				&lt;property name="driverName"	value="${jbpm.jdbc.driverClassName}" />
				&lt;property name="url" value="${jbpm.jdbc.url}" />
		    &lt;/bean>
        &lt;/property>
        &lt;property name="user" value="${jbpm.jdbc.username}" />
		&lt;property name="password" value="${jbpm.jdbc.password}" />
    &lt;/bean>
	
	
	&lt;bean id="jbpmSessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		&lt;property name="dataSource">
			&lt;ref bean="jbpmDataSource" />
		&lt;/property>

		&lt;property name="hibernateProperties">
			&lt;props>
				&lt;prop key="hibernate.show_sql">false&lt;/prop>
				&lt;prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLInnoDBDialect
				&lt;/prop>
				&lt;prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider&lt;/prop>
				&lt;prop key="hibernate.connection.autocommit">false&lt;/prop>
			&lt;/props>
		&lt;/property>
		&lt;property name="mappingResources">
			&lt;list>
				&lt;!-- hql queries and type defs -->
			    &lt;value>org/jbpm/db/hibernate.queries.hbm.xml&lt;/value>
			    
			    &lt;!-- graph.def mapping files -->
			    &lt;value>org/jbpm/graph/def/ProcessDefinition.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/def/Node.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/def/Transition.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/def/Event.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/def/Action.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/def/SuperState.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/def/ExceptionHandler.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/instantiation/Delegation.hbm.xml&lt;/value>
			
			    &lt;!-- graph.node mapping files -->
			    &lt;value>org/jbpm/graph/node/StartState.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/EndState.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/ProcessState.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/Decision.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/Fork.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/Join.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/State.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/node/TaskNode.hbm.xml&lt;/value>
			
			    &lt;!-- context.def mapping files -->
			    &lt;value>org/jbpm/context/def/ContextDefinition.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/def/VariableAccess.hbm.xml&lt;/value>
			
			    &lt;!-- taskmgmt.def mapping files -->
			    &lt;value>org/jbpm/taskmgmt/def/TaskMgmtDefinition.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/def/Swimlane.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/def/Task.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/def/TaskController.hbm.xml&lt;/value>
			
			    &lt;!-- module.def mapping files -->
			    &lt;value>org/jbpm/module/def/ModuleDefinition.hbm.xml&lt;/value>
			
			    &lt;!-- bytes mapping files -->
			    &lt;value>org/jbpm/bytes/ByteArray.hbm.xml&lt;/value>
			
			    &lt;!-- file.def mapping files -->
			    &lt;value>org/jbpm/file/def/FileDefinition.hbm.xml&lt;/value>
			
			    &lt;!-- scheduler.def mapping files -->
			    &lt;value>org/jbpm/scheduler/def/CreateTimerAction.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/scheduler/def/CancelTimerAction.hbm.xml&lt;/value>
			
			    &lt;!-- graph.exe mapping files -->
			    &lt;value>org/jbpm/graph/exe/Comment.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/exe/ProcessInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/exe/Token.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/exe/RuntimeAction.hbm.xml&lt;/value>
			
			    &lt;!-- module.exe mapping files -->
			    &lt;value>org/jbpm/module/exe/ModuleInstance.hbm.xml&lt;/value>
			        
			    &lt;!-- context.exe mapping files -->
			    &lt;value>org/jbpm/context/exe/ContextInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/TokenVariableMap.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/VariableInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/ByteArrayInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/DateInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/HibernateLongInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/HibernateStringInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/LongInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/exe/variableinstance/StringInstance.hbm.xml&lt;/value>
			
			    &lt;!-- msg.db mapping files -->
			    &lt;value>org/jbpm/msg/Message.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/msg/db/TextMessage.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/command/ExecuteActionCommand.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/command/ExecuteNodeCommand.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/command/SignalCommand.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/command/TaskInstanceEndCommand.hbm.xml&lt;/value>
			
			    &lt;!-- taskmgmt.exe mapping files -->
			    &lt;value>org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/exe/TaskInstance.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/exe/PooledActor.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml&lt;/value>
			
			    &lt;!-- scheduler.exe mapping files -->
			    &lt;value>org/jbpm/scheduler/exe/Timer.hbm.xml&lt;/value>
			
			    &lt;!-- logging mapping files -->
			    &lt;value>org/jbpm/logging/log/ProcessLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/logging/log/MessageLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/logging/log/CompositeLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/ActionLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/NodeLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/ProcessInstanceCreateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/ProcessInstanceEndLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/ProcessStateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/SignalLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/TokenCreateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/TokenEndLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/graph/log/TransitionLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/VariableLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/VariableCreateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/VariableDeleteLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/VariableUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/ByteArrayUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/DateUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/DoubleUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/HibernateLongUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/HibernateStringUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/LongUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/context/log/variableinstance/StringUpdateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/TaskLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/TaskCreateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/TaskAssignLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/TaskEndLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/SwimlaneLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/SwimlaneCreateLog.hbm.xml&lt;/value>
			    &lt;value>org/jbpm/taskmgmt/log/SwimlaneAssignLog.hbm.xml&lt;/value>
			&lt;/list>
		&lt;/property>
	&lt;/bean>
</pre><br />（省略了其他的jbpmconfiguration和flow的配置）<br /><br /><br />applicationContext-jta.xml<br /><pre name="code" class="java">
	&lt;bean id="jotm"
		class="org.springframework.transaction.jta.JotmFactoryBean" />

	&lt;bean id="transactionManager"
		class="org.springframework.transaction.jta.JtaTransactionManager">
		&lt;property name="userTransaction" ref="jotm" />
	&lt;/bean>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://ppig.javaeye.com/blog/148769#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Dec 2007 09:50:03 +0800</pubDate>
        <link>http://ppig.javaeye.com/blog/148769</link>
        <guid>http://ppig.javaeye.com/blog/148769</guid>
      </item>
  </channel>
</rss>