18.9. 在 Red Hat Process Automation Manager 中保留独立数据库模式中的进程变量
当您在您定义的进程内创建进程变量时,Red Hat Process Automation Manager 会将这些进程变量存储为二进制数据存储在默认数据库架构中。您可以在单独的数据库模式中保留进程变量,以便在维护和实施进程数据方面具有更大的灵活性。
例如,在单独的数据库模式中保留您的进程变量可帮助您执行以下任务:
- 以人类可读格式维护进程变量
- 使变量可供 Red Hat Process Automation Manager 之外的服务使用
- 清除 Red Hat Process Automation Manager 中默认数据库表的日志,而不丢失进程变量数据
此流程只适用于进程变量。此流程不适用于问题单变量。
先决条件
- 您已在 Red Hat Process Automation Manager 中定义了要实施变量的进程。
- 如果要在 Red Hat Process Automation Manager 之外的数据库模式中保留变量,则已创建了数据源以及您要使用的独立数据库模式。有关创建数据源的详情,请参考 配置 Business Central 设置和属性。
流程
在用作进程变量的数据对象文件中,添加以下元素来配置变量持久性:
为变量持久性配置的 Person.java 对象示例
@javax.persistence.Entity 1 @javax.persistence.Table(name = "Person") 2 public class Person extends org.drools.persistence.jpa.marshaller.VariableEntity 3 implements java.io.Serializable { 4 static final long serialVersionUID = 1L; @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO, generator = "PERSON_ID_GENERATOR") @javax.persistence.Id 5 @javax.persistence.SequenceGenerator(name = "PERSON_ID_GENERATOR", sequenceName = "PERSON_ID_SEQ") private java.lang.Long id; private java.lang.String name; private java.lang.Integer age; public Person() { } public java.lang.Long getId() { return this.id; } public void setId(java.lang.Long id) { this.id = id; } public java.lang.String getName() { return this.name; } public void setName(java.lang.String name) { this.name = name; } public java.lang.Integer getAge() { return this.age; } public void setAge(java.lang.Integer age) { this.age = age; } public Person(java.lang.Long id, java.lang.String name, java.lang.Integer age) { this.id = id; this.name = name; this.age = age; } }
要使数据对象持久使用 Business Central,进入项目中的数据对象文件,点窗口右上角的 Persistence 图标,并配置持久性行为:
图 18.1. Business Central 中的持久性配置
在项目的
pom.xml
文件中,添加以下持久性支持依赖项。此依赖项包含您在数据对象中配置的变量
类。项目持久性依赖项
<dependency> <groupId>org.drools</groupId> <artifactId>drools-persistence-jpa</artifactId> <version>${rhpam.version}</version> <scope>provided</scope> </dependency>
在项目的
~/META-INF/kie-deployment-descriptor.xml
文件中,配置 JPA marshalling 策略和持久性单元,以用于 marshaller。对于定义为实体的对象,需要 JPA marshalling 策略和持久性单元。在 kie-deployment-descriptor.xml 文件中配置的 JPA marshaller 和 persistence 单元
<marshalling-strategy> <resolver>mvel</resolver> <identifier>new org.drools.persistence.jpa.marshaller.JPAPlaceholderResolverStrategy("myPersistenceUnit", classLoader)</identifier> <parameters/> </marshalling-strategy>
在项目的
~/META-INF
目录中,创建一个persistence.xml
文件,用于指定您要保留进程变量的数据源:带有数据源配置的 persistence.xml 文件示例
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"> <persistence-unit name="myPersistenceUnit" transaction-type="JTA"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> 1 <class>org.space.example.Person</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.max_fetch_depth" value="3"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.id.new_generator_mappings" value="false"/> <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/> </properties> </persistence-unit> </persistence>
- 1
- 设置保留进程变量的数据源
要使用 Business Central 配置 marshalling 策略、持久性单元和数据源,请导航到 Project Settings
Deployments Marshalling Policies and to project Settings Persistence : 图 18.2. Business Central 中的 JPA marshaller 配置
图 18.3. Business Central 中的持久性单元和数据源配置