ローカルトランザクションを間単に使うためのAPIを提供
Domaで正式にサポートすることにしました。
使い方はこんなかんじです(例外ハンドリングは省いています)。
LocalTransaction tx = AppConfig.getLocalTransaction(); tx.begin(); EmployeeDao dao = new EmployeeDaoImpl(); Employee employee = dao.selectById(1); employee.setName("hoge"); employee.setJobType(JobType.PRESIDENT); dao.update(employee); tx.commit();
LocalTransactionというクラスにbegin、commit、rollbackというメソッドがあります。中ではスレッドローカルで管理したコネクションのトランザクションを制御しています。
変数で受けずにこうしてもOK。
AppConfig.getLocalTransaction().begin(); EmployeeDao dao = new EmployeeDaoImpl(); Employee employee = dao.selectById(1); employee.setName("hoge"); employee.setJobType(JobType.PRESIDENT); dao.update(employee); AppConfig.getLocalTransaction().commit();
AppConfigというクラスはDaoに指定する設定用のクラスです。アプリごとにつくるので名前は自由にできます。
@Dao(config = AppConfig.class) public interface EmployeeDao { ... }
AppConfigでは、LocalTransactionalDataSourceというクラスを使うようにします。で、このクラスにはLocalTransactionを返すメソッドがあるので、それを呼んでLocalTransactionをクライアントに返すようにします。getLocalTransactionはstaticメソッドにするのがいいです。
public class AppConfig extends DomaAbstractConfig { protected static final LocalTransactionalDataSource dataSource = createDataSource(); protected static final Dialect dialect = new HsqldbDialect(); @Override public DataSource getDataSource() { return dataSource; } @Override public Dialect getDialect() { return dialect; } protected static LocalTransactionalDataSource createDataSource() { SimpleDataSource dataSource = new SimpleDataSource(); dataSource.setUrl("jdbc:hsqldb:mem:tutorial"); dataSource.setUser("sa"); return new LocalTransactionalDataSource(dataSource); } public static LocalTransaction getLocalTransaction() { return dataSource.getLocalTransaction(jdbcLogger); } }
LocalTransactionalDataSourceのコンストラクタにはDataSourceを渡すのですが、コネクションプーリングが必要な場合にはコネクションプーリング用のDataSourceを渡してもらえればいいです。
SNAPSHOTを作成したので興味がある方はどうぞ。
http://maven.seasar.org/maven2-snapshot/org/seasar/doma/doma/1.1.0-SNAPSHOT/doma-1.1.0-20100310.170752-1.jar
週末くらいにリリース予定です。
次は1.1.0にします。基本的に新機能を入れたら真ん中の番号を上げます。バグ修正の場合は一番右の番号を上げます。