13.2. Definición de transacciones

Para definir una transacción, proceda de la siguiente manera:
  1. 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();
  2. Inicialice la KieSession:
    // get the KieSession
    RuntimeManager manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment);
    RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get());
    KieSession ksession = runtime.getKieSession();
  3. 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 archivo persistence.xml para 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"/>
  4. 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();