13.2. Définir des transactions
Pour définir une transaction, procédéz ainsi :
- Enregistrez le gestionnaire de transactions dans votre environnement.
Exemple 13.1. Codifiez par l'enregistrement du gestionnaire de transactions
// create the entity manager factory EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate("org.jbpm.persistence.jpa"); TransactionManager tm = TransactionManagerServices.getTransactionManager(); Environment env = EnvironmentFactory.newEnvironment(); env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf); env.set(EnvironmentName.TRANSACTION_MANAGER, tm); // setup the runtime environment RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .addAsset(ResourceFactory.newClassPathResource("MyProcessDefinition.bpmn2"), ResourceType.BPMN2) .addEnvironmentEntry(EnvironmentName.TRANSACTION_MANAGER, tm) .addEnvironmentEntry(EnvironmentName.PERSISTENCE_CONTEXT_MANAGER, new JpaProcessPersistenceContextManager(env)) .addEnvironmentEntry(EnvironmentName.TASK_PERSISTENCE_CONTEXT_MANAGER, new JPATaskPersistenceContextManager(env)) .get(); - Initialiser la KieSession :
// get the KieSession RuntimeManager manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession();
- Définir le gestionnaire de transactions dans
jndi.properties.Exemple 13.2. Definition du gestionnaire de transactions Bitronix dans jndi.properties
java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
Note
Pour utiliser un gestionnaire de transactions différent, modifier hibernate.transaction.manager_lookup_class, la propriété de gestionnaire de transactions, dans le fichierpersistence.xmlpour charger votre gestionnaire de transactions.Exemple 13.3. Le gestionnaire de transactions de JBoss comme gestionnaire de transactions
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
- Définir le début et la fin d'une transaction.
// start the transaction UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); // perform multiple commands inside one transaction ksession.insert( new Person( "John Doe" ) ); ksession.startProcess("MyProcess"); // commit the transaction ut.commit();