真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)

這篇文章主要講解了“如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)”吧!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),宣威企業(yè)網(wǎng)站建設(shè),宣威品牌網(wǎng)站建設(shè),網(wǎng)站定制,宣威網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,宣威網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

Activiti中JPA簡介

  • 可以使用JPA實(shí)體作為流程變量,并進(jìn)行操作:

    • 基于流程變量更新已有的JPA實(shí)體,可以在用戶任務(wù)的表單中填寫或者由服務(wù)任務(wù)生成

    • 重用已有的領(lǐng)域模型,不需要編寫顯示的服務(wù)獲取實(shí)體或者更新實(shí)體的值

    • 根據(jù)已有實(shí)體的屬性做出判斷(網(wǎng)關(guān)即分支聚合)

JPA實(shí)體要求

  • Activiti中JPA只支持符合以下要求的實(shí)體:

    • Id字段或者屬性能夠使用JPA規(guī)范支持的任意類型:

    • 原生態(tài)數(shù)據(jù)類型和他們的包裝類型(Boolean除外)

    • String

    • BigInteger

    • BigDecimal

    • java.util.Date

    • java.sql.Date

    • 實(shí)體應(yīng)該使用JPA注解進(jìn)行配置,支持字段和屬性訪問兩種方式.@MappedSuperclass也要能夠被使用

    • 實(shí)體中應(yīng)該有一個(gè)使用@Id注解的主鍵,不支持復(fù)合主鍵@EmbeddedId 和 @IdClass:

JPA配置

  • 引擎必須有一個(gè)對(duì)EntityManagerFactory的引用才能夠使用JPA的實(shí)體,這樣可以通過配置引用或者提供一個(gè)持久化單元名稱

  • 作為變量的JPA實(shí)體將會(huì)被自動(dòng)檢測并進(jìn)行相應(yīng)的處理

  • 使用jpaPersistenceUnitName配置:



    
    
    

    
    
    

    
    

    
    
  • 配置一個(gè)自定義的EntityManagerFactory,

    • 這里使用了OpenJPA實(shí)體管理器

    • 該代碼片段僅僅包含與例子相關(guān)的beans,去掉了其他beans.

    • OpenJPA實(shí)體管理的完整并可以使用的例子可以在activiti-spring-examples(/activiti-spring/src/test/java/org/activiti/spring/test/jpa/JPASpringTest.java)中找到


  
  
    
      
    
  



  
  
  
  
  
  
  
  • 也可以在編程式創(chuàng)建一個(gè)引擎時(shí)完成配置:

ProcessEngine processEngine = ProcessEngineConfiguration
  .createProcessEngineConfigurationFromResourceDefault()
  .setJpaPersistenceUnitName("activiti-pu")
  .buildProcessEngine();

配置的屬性有:

  • jpaPersistenceUnitName:使用持久化單元的名稱:

    • 要確保該持久化單元在類路徑下是可用的,默認(rèn)的路徑是 /META-INF/persistence.xml

    • 要么使用jpaEntityManagerFactory要么或者是jpaPersistenceUnitName

  • jpaEntityManagerFactory:一個(gè)實(shí)現(xiàn)了javax.persistence.EntityManagerFactorybean的引用:

    • 將被用來加載實(shí)體并且刷新更新

    • 要么使用jpaEntityManagerFactory要么或者是jpaPersistenceUnitName

  • jpaHandleTransaction:在被使用的EntityManager實(shí)例上,該標(biāo)記表示流程引擎是否需要開始和提交或者回滾事務(wù):

    • 當(dāng)使用Java事務(wù)API(JTA)時(shí),設(shè)置為false

  • jpaCloseEntityManager:該標(biāo)記表示流程引擎是否應(yīng)該關(guān)閉從 EntityManagerFactory獲取的EntityManager的實(shí)例:

    • 當(dāng)EntityManager是由容器管理的時(shí)候需要設(shè)置為false:當(dāng)使用并不是單一事務(wù)作用域的擴(kuò)展持久化上下文的時(shí)候

JPA用法

簡單示例

  • 首先,需要?jiǎng)?chuàng)建一個(gè)基于META-INF/persistence.xmlEntityManagerFactory作為持久化單元:包含持久化單元中所有的類和一些供應(yīng)商特定的配置

  • 使用一個(gè)簡單的實(shí)體作為測試,其中包含有一個(gè)idString類型的value屬性,也將會(huì)被持久化

  • 在測試之前,創(chuàng)建一個(gè)實(shí)體并且保存:

@Entity(name = "JPA_ENTITY_FIELD")
public class FieldAccessJPAEntity {

  @Id
  @Column(name = "ID_")
  private Long id;

  private String value;

  public FieldAccessJPAEntity() {
    // Empty constructor needed for JPA
  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }
}
  • 啟動(dòng)一個(gè)新的流程實(shí)例,添加一個(gè)實(shí)體作為變量.其他的變量,將會(huì)被存儲(chǔ)在流程引擎的持久化數(shù)據(jù)庫中.下一次獲取該變量的時(shí)候,將會(huì)根據(jù)該類和存儲(chǔ)IdEntityManager中加載:

Map variables = new HashMap();
variables.put("entityToUpdate", entityToUpdate);

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("UpdateJPAValuesProcess", variables);
  • 流程定義中的第一個(gè)節(jié)點(diǎn)是一個(gè)服務(wù)任務(wù),將會(huì)調(diào)用entityToUpdate上的setValue方法,其實(shí)就是之前在啟動(dòng)流程實(shí)例時(shí)候設(shè)置的JPA變量并且將會(huì)從當(dāng)前流程引擎的上下文關(guān)聯(lián)的EntityManager中加載:

  • 當(dāng)完成服務(wù)任務(wù)時(shí),流程實(shí)例將會(huì)停留在流程定義中定義的用戶任務(wù)環(huán)節(jié)上:

    • 可以查看該流程實(shí)例

    • EntityManager已經(jīng)被刷新了并且改變的實(shí)體已經(jīng)被保存進(jìn)數(shù)據(jù)庫中

    • 獲取entityToUpdate的變量value時(shí),該實(shí)體將會(huì)被再次加載并且獲取該實(shí)體屬性的值將會(huì)是updatedValue

// Servicetask in process 'UpdateJPAValuesProcess' should have set value on entityToUpdate.
Object updatedEntity = runtimeService.getVariable(processInstance.getId(), "entityToUpdate");
assertTrue(updatedEntity instanceof FieldAccessJPAEntity);
assertEquals("updatedValue", ((FieldAccessJPAEntity)updatedEntity).getValue())

查詢JPA流程變量

  • 以查詢某一JPA實(shí)體作為變量的ProcessInstancesExecutions

  • ProcessInstanceQueryExecutionQuery查詢中僅僅variableValueEquals(name, entity)支持JPA實(shí)體變量:

    • [variableValueNotEquals],[variableValueGreaterThan],[variableValueGreaterThanOrEqual],[variableValueLessThan],[variableValueLessThanOrEqual]不被支持并且傳遞JPA實(shí)體值的時(shí)候會(huì)拋出一個(gè)ActivitiException

ProcessInstance result = runtimeService.createProcessInstanceQuery().variableValueEquals("entityToQuery", entityToQuery).singleResult();

使用Spring beans和JPA結(jié)合的高級(jí)例子

  • JPASpringTest,在activiti-spring-examples中:

    • 已經(jīng)存在了一個(gè)使用JPA實(shí)體的Spring-bean,用來存儲(chǔ)貸款申請(qǐng)

    • 使用Activiti,可以通過已經(jīng)存在的bean獲取已經(jīng)使用的實(shí)體,并使用它作為變量用于流程中

  • 流程定義步驟:

    • 當(dāng)申請(qǐng)批準(zhǔn),流程結(jié)束

    • 否則,一個(gè)額外的任務(wù)將會(huì)使用(發(fā)送拒絕信),這樣就可以發(fā)送拒絕信手動(dòng)通知客戶 如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)

    • 更新貸款申請(qǐng)實(shí)體,因此該實(shí)體與流程保持同步

    • 允許經(jīng)理查看貸款申請(qǐng),并填入審批意見(同意/不同意)

    • 審批意見將作為一個(gè)boolean變量approvedByManager進(jìn)行存儲(chǔ)

    • 創(chuàng)建一個(gè)新的貸款申請(qǐng),使用已經(jīng)存在的LoanRequestBean接受啟動(dòng)流程時(shí)候的變量(來自流程啟動(dòng)時(shí)候的表單)

    • 使用activiti:resultVariable(作為一個(gè)變量對(duì)表達(dá)式返回的結(jié)果進(jìn)行存儲(chǔ))將創(chuàng)建出來的實(shí)體作為變量進(jìn)行存儲(chǔ)

    • 服務(wù)任務(wù):

    • 用戶任務(wù):

    • 服務(wù)任務(wù):

    • 根據(jù)貸款申請(qǐng)實(shí)體變量approved的值,將利用唯一網(wǎng)關(guān)自動(dòng)決定下一步該選擇那一條路徑:




  
    
    

    
    

    
    

    
    

    
    
      ${loanRequest.approved}
    
    
      ${!loanRequest.approved}
    

    
    

    
    
  

感謝各位的閱讀,以上就是“如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)站欄目:如何配置工作流引擎Activiti集成JPA持久化保存流程數(shù)據(jù)
文章地址:http://weahome.cn/article/jseied.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部