12.4. Configuração da Persistência

12.4.1. Configuração da Persistência

Embora a persistência não seja usada por padrão, as dependências necessárias estão disponíveis no diretório do tempo de execução como arquivos jar .
A persistência é definida por sessão e pode ser definida usando a classe JBPMHelper, depois que você criar uma sessão, ou usando JPAKnowledgeService, para a criação da sua sessão. A última opção proporciona mais flexibilidade, enquanto JBPMHelper possui um método próprio para criar uma sessão e utiliza um arquivo de configuração para configurar essa sessão.

12.4.2. Configurando a Persistência Usando JBPMHelper

Para configurar a persistência da sua sessão usando JBPMHelper, siga as instruções a seguir:
  1. Defina o seu aplicativo para usar um construtor de sessão JBPMHelper adequado:
    • KieSession ksession = JBPMHelper.newKieSession(kbase);
    • KieSession ksession = JBPMHelper.loadKieSession(kbase, sessionId);
  2. Configure a persistência no arquivo jBPM.properties .

    Exemplo 12.1. Arquivo jBPM.properties de exemplo com persistência para o banco de dados H2 em memória

    # for creating a datasource
    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
    
    # for configuring persistence of the session
    persistence.enabled=true
    persistence.persistenceunit.name=org.jbpm.persistence.jpa
    persistence.persistenceunit.dialect=org.hibernate.dialect.H2Dialect
    
    # for configuring the human task service
    taskservice.enabled=true
    taskservice.datasource.name=org.jbpm.task
    taskservice.transport=mina
    taskservice.usergroupcallback=org.jbpm.task.service.DefaultUserGroupCallbackImpl
Qualquer invocação na sessão disparará agora o processo de persistência.
Certifique-se de que a fonte de dados esteja ativa e em execução mediante o início do mecanismo. Caso esteja executando o banco de dados H2 em memória, você pode iniciar o banco de dados a partir do seu aplicativo usando a chamada de método JBPMHelper.startH2Server(); e registrá-lo com o mecanismo usando a chamada de método JBPMHelper.setupDataSource();.

12.4.3. Configurando a Persistência Usando JPAKnowledgeService

Para criar a sua sessão de conhecimento e configurar a sua persistência usando JPAKnowledgeService, siga as instruções a seguir:
  1. Defina o seu aplicativo para usar a sessão de conhecimento criada pelo JPAKnowledgeService:
    • Defina a sessão baseada em um banco de dados de conhecimento, uma configuração da sessão de conhecimento e um ambiente. O ambiente deve conter uma referência à sua Fábrica de Gerenciador de Entidades:
      // create the entity manager factory and register it in the environment
      EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" );
      Environment env = KnowledgeBaseFactory.newEnvironment();
      env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
      
      // create a new knowledge session that uses JPA to store the runtime state
      KieSession ksession = JPAKnowledgeService.newKieSession( kbase, null, env );
      int sessionId = ksession.getId();
      
      // invoke methods on your method here
      ksession.startProcess( "MyProcess" );
      ksession.dispose();
    • Defina a sessão baseada em uma id de sessão específica.
      // recreate the session from database using the sessionId
      ksession = JPAKnowledgeService.loadKieSession(sessionId, kbase, null, env );
  2. Configure a persistência no arquivo META-INF/persistence.xml : configure JPA para usar o Hibernate e o banco de dados respectivo.
    As informações sobre como configurar a fonte de dados no servidor do seu aplicativo devem estar disponíveis na documentação enviada com o servidor do aplicativo. Para esse tipo de informação para o JBoss Enterprise Application Platform, consulte o guia Administration and Configuration Guide deste produto.

    Exemplo 12.2. Arquivo persistence.xml de exemplo com persistência para uma fonte de dados 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>
Qualquer invocação na sessão disparará agora o processo de persistência.
Certifique-se de que a fonte de dados esteja ativa e em execução mediante o início do mecanismo. Caso esteja executando o banco de dados H2 em memória, você pode iniciar o banco de dados a partir do seu aplicativo usando a chamada de método JBPMHelper.startH2Server(); e registrá-lo com o mecanismo usando a chamada de método JBPMHelper.setupDataSource();.

Nota

Caso esteja executando o JBoss BPM Suite em um ambiente Java simples, a configuração da fonte de dados será semelhante ao seguinte:
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();