7.3.5. トランザクション

デフォルトでは、アプリケーション内にトランザクション境界がない場合、エンジンは自動的に別のトランザクションとしてエンジン上で各メソッドの呼び出しを実行します。トランザクション境界を指定できるため、複数のコマンドを 1 つのトランザクションに統合することなどもできます。
以下のサンプルコードは、Bitronix トランザクションマネージャーを使用しています。
// 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 );
env.set( EnvironmentName.TRANSACTION_MANAGER,
         TransactionManagerServices.getTransactionManager() );

// create a new knowledge session that uses JPA to store the runtime state
StatefulKnowledgeSession ksession =
    JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );

// start the transaction
UserTransaction ut =
  (UserTransaction) new InitialContext().lookup( "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();
永続性と同時並行処理の詳細は、「マルチスレッド」 を参照してください。