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();
永続性と同時並行処理の詳細は、「マルチスレッド」 を参照してください。