jbpm4是基於hibernate實現的工作流平臺,毫無疑問,她能支持多種主流的數據庫。但在jbpm4中,流程發佈時需要
像數據庫寫入blob類型的數據,但在oracle中,stream是不能以batch的方式寫入數據庫的。如果在Oracle數據庫平臺
下使用jbpm4,需要設置<prop key="hibernate.jdbc.batch_size">0</prop>,
否則就會發生如下異常:
org.hibernate.exception.GenericJDBCException: could not insert: [org.jbpm.pvm.internal.lob.Lob]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
..........................
..........................
Caused by: java.sql.SQLException: 不允許的操作: streams type cannot be used in batching
..........................
..........................
可是這樣的設置會導致大批量數據操作時效率過低。目前想到的方法有兩種:
一、設置多數據源
爲jbpm4.2設置單獨的數據源,業務數據另外設置一個數據源。這樣增加了不少複雜度,可能會引發事務管理、數據
同步等一系列問題。
二、批量操作時繞開Hibernate的api
這種辦法又分爲兩種,一種是調用存儲過程,另一種是直接使用jdbc進行數據操作。
只能想到這些了,都不爽,歡迎大家討論。