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:
  1. 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);
  2. 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:
  1. 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 );
  2. 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();