12.4. Configuration de la persistance
12.4.1. Configuration de la persistance
Bien que la persistance ne soit pas utilisée par défaut, les dépendances nécessaires sont disponibles dans le répertoire d'exécution sous forme de fichiers jar
.
La peristance est définie par session, et vous pouvez la définir en utilisant la classe
JBPMHelper quand vous créez une session ou en utilisant JPAKnowledgeService pour créer votre session. La dernière option offre plus de flexibilité, tandis que JBPMHelper a une méthode pour créer une session et utilise un fichier de configuration pour configurer cette session.
12.4.2. Configurer une persistance en utilisant JBPMHelper
Pour configurer une persistance de votre session en utilisant JBPMHelper, procéder ainsi :
- Définir votre application pour qu'elle puisse utiliser le contructeur de session JBPMHelper :
KieSession ksession = JBPMHelper.newKieSession(kbase);KieSession ksession = JBPMHelper.loadKieSession(kbase, sessionId);
- Configurer la persistance dans le fichier
jBPM.properties.Exemple 12.1. Extrait de fichier jBPM.properties avec une persistance pour la base de données H2 en-mémoire
# 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
Toutes les invocations sur la session vont déclencher le processus de persistance.
Veillez à ce que la source de données fonctionne bien au démarrage du moteur. Si vous exécutez la base de données H2 en-mémoire, vous pouvez démarrer la base de données avec votre application par la méthode
JBPMHelper.startH2Server(); et l'enregistrer dans engine par l'appel de méthode JBPMHelper.setupDataSource();.
12.4.3. Configurer une persistance en utilisant JPAKnowledgeService
Pour créer votre session de connaissance et configurer sa persistance avec JPAKnowledgeService, procéder ainsi :
- Définir votre application pour qu'elle utilise la session de connaissance créée par JPAKnowledgeService :
- Définir la session sur la base d'une base de connaisances, une configuration de session de connaissance, et un environnement. L'environnement doit contenir une référence à l'usine de gestionnaires d'entités :
// 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();
- Définir la session sur la base d'un id de session spécifique
// recreate the session from database using the sessionId ksession = JPAKnowledgeService.loadKieSession(sessionId, kbase, null, env );
- Configurer la persistance dans le fichier
META-INF/persistence.xml: configurer JPA pour qu'il utilise Hibernate et la base de données respective.Les informations sur la façon de configurer la source de données sur votre serveur d'applications doivent être dans la documentation livrée avec le serveur d'applications. Pour cette information pour JBoss Enterprise Application Platform, consulter le Guide de Configuration et d'Administration pour ce produit.Exemple 12.2. Extrait de fichier persistence.xml avec une persistance pour une source de données 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>
Toutes les invocations sur la session vont déclencher le processus de persistance.
Veillez à ce que la source de données fonctionne bien au démarrage du moteur. Si vous exécutez la base de données H2 en-mémoire, vous pouvez démarrer la base de données avec votre application par la méthode
JBPMHelper.startH2Server(); et l'enregistrer dans engine par l'appel de méthode JBPMHelper.setupDataSource();.
Note
Si vous exécutez JBoss BPM Suite dans un environnement Java simple, votre configuration de source de données ressemblera à ce qui suit :
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();