13.2. Definición de transacciones
Para definir una transacción, proceda de la siguiente manera:
- Registre el gestor de transacciones en su entorno.
Ejemplo 13.1. Codifique con el registro del gestor de transacciones
// 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(); - Inicialice la KieSession:
// get the KieSession RuntimeManager manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession();
- Defina el gestor de transacciones en
jndi.properties.Ejemplo 13.2. Definición del gestor de transacciones Bitronix en jndi.properties
java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory
Nota
Para usar un gestor de transacciones JTA diferente, modifique hibernate.transaction.manager_lookup_class, la propiedad de gestor de transacciones, en el archivopersistence.xmlpara cargar su gestor de transacciones.Ejemplo 13.3. JBoss Transaction Manager se establece como el gestor de transacciones
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
- Defina el inicio y el final de la transacción.
// 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();