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:
- Defina o seu aplicativo para usar um construtor de sessão JBPMHelper adequado:
KieSession ksession = JBPMHelper.newKieSession(kbase);KieSession ksession = JBPMHelper.loadKieSession(kbase, sessionId);
- 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:
- 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 );
- 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();