12.4. Configuración de persistencia
12.4.1. Configuración de persistencia
Aunque la persistencia no se utiliza por defecto, las dependencias que se necesitan están disponibles en el directorio del tiempo de ejecución como archivos jar
.
La persistencia se define por sesión y puede definirla usando la clase
JBPMHelper después de crear una sesión o utilizando el JPAKnowledgeService para crear su sesión. La última opción proporciona mayor flexibilidad mientras que JBPMHelper tiene un método para crear una sesión y usa un archivo de configuración para configurar esta sesión.
12.4.2. Configuración de la persistencia usando JBPMHelper
Para configurar la persistencia de su sesión usando JBPMHelper, haga lo siguiente:
- Defina su aplicación para que utilice un constructor de sesión JBPMHelper apropiado:
KieSession ksession = JBPMHelper.newKieSession(kbase);KieSession ksession = JBPMHelper.loadKieSession(kbase, sessionId);
- Configure la persistencia en el archivo
jBPM.properties.Ejemplo 12.1. Un archivo jBPM.properties de ejemplo con persistencia para la base de datos H2 en memoria
# para crear una fuente de datos persistence.datasource.name=jdbc/jbpm-ds persistence.datasource.user=sa persistence.datasource.password= persistence.datasource.url=jdbc:h2:tcp://localhost/~/jbpm-db persistence.datasource.driverClassName=org.h2.Driver # para configurar la persistencia de la sesión persistence.enabled=true persistence.persistenceunit.name=org.jbpm.persistence.jpa persistence.persistenceunit.dialect=org.hibernate.dialect.H2Dialect # para configurar el servicio de tareas humanas taskservice.enabled=true taskservice.datasource.name=org.jbpm.task taskservice.transport=mina taskservice.usergroupcallback=org.jbpm.task.service.DefaultUserGroupCallbackImpl
Ahora cualquier invocación en la sesión disparará el proceso de persistancia.
Asegúrese de que la fuente de datos esté funcionando cuando la máquina inicie. Si está ejecutando la base de datos H2 en memoria, puede iniciar la base de datos desde su aplicación usando la llamada del método
JBPMHelper.startH2Server(); y regístrela con la máquina usando la llamada de método JBPMHelper.setupDataSource();.
12.4.3. Configuración de la persistencia usando JPAKnowledgeService
Para crear su sesión de conocimiento y configurar su persistencia usando JPAKnowledgeService, haga lo siguiente:
- Defina su aplicación para utilizar la sesión de conocimiento creada por JPAKnowledgeService:
- Defina la sesión con base en una base de conocimiento, una configuración de la sesión de conocimiento y un entorno. El entorno debe contener una referencia a su fábrica del gestor de entidades:
// cree la fábrica del gestor de entidades y regístrela en el entorno EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" ); Environment env = KnowledgeBaseFactory.newEnvironment(); env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); // cree una nueva sesión de conocimiento que usa JPA para almacenar el estado del tiempo de ejecución KieSession ksession = JPAKnowledgeService.newKieSession( kbase, null, env ); int sessionId = ksession.getId(); // invoque los métodos en su método aquí ksession.startProcess( "MyProcess" ); ksession.dispose();
- Defina la sesión con base en un id de sesión específico.
// recree la sesión desde la base de datos usando el sessionId ksession = JPAKnowledgeService.loadKieSession(sessionId, kbase, null, env );
- Configure la persistencia en el archivo
META-INF/persistence.xml: configure JPA para que utilice Hibernate y la base de datos respectiva.La información sobre cómo configurar la fuente de datos en su servidor de aplicaciones debe estar disponible en la documentación que va junto con el servidor de aplicaciones. Para encontrar mayor información para JBoss Enterprise Application Platform, consulte la Administration and Configuration Guide para este producto.Ejemplo 12.2. Un archivo persistence.xml de ejemplo con persistencia para una fuente de datos H2
jdbc/jbpm-ds<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <persistence version="1.0" xsi:schemaLocation= "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/jbpm-ds</jta-data-source> <mapping-file>META-INF/JBPMorm.xml</mapping-file> <class>org.drools.persistence.info.SessionInfo</class> <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class> <class>org.drools.persistence.info.WorkItemInfo</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <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.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup"/> </properties> </persistence-unit> </persistence>
Ahora cualquier invocación en la sesión disparará el proceso de persistancia.
Asegúrese de que la fuente de datos esté funcionando cuando la máquina inicie. Si está ejecutando la base de datos H2 en memoria, puede iniciar la base de datos desde su aplicación usando la llamada del método
JBPMHelper.startH2Server(); y regístrela con la máquina usando la llamada de método JBPMHelper.setupDataSource();.
Nota
Si está ejecutando JBoss BPM Suite en un entorno Java simple, la configuración de la fuente de datos será similar a la siguiente:
PoolingDataSource ds = new PoolingDataSource();
ds.setUniqueName("jdbc/jbpm-ds");
ds.setClassName("bitronix.tm.resource.jdbc.lrc.LrcXADataSource");
ds.setMaxPoolSize(3);
ds.setAllowLocalTransactions(true);
ds.getDriverProperties().put("user", "sa");
ds.getDriverProperties().put("password", "sasa");
ds.getDriverProperties().put("URL", "jdbc:h2:tcp://localhost/~/jbpm-db");
ds.getDriverProperties().put("driverClassName", "org.h2.Driver");
ds.init();