自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2010年5月11日火曜日

Google App Engine トランザクション処理

「トランザクション」とは、完全に成功または失敗した一連のデータストア操作のことです。トランザクションが成功すると、意図した効果がすべてデー タストアに適用されます。トランザクションが失敗すると、意図した効果は適用されません。
データストアの書き込み操作はすべてアトミックです。エンティティの作成、更新、削除は「実行される」か「実行されない」かのどちらかです。操作が 失敗する原因として、同時にエンティティを変更しようとするユーザーが多すぎて競合頻度が高くなっていることが考えられます。また、アプリケーションが割 り当て制限に達したために操作が失敗する場合もあります。そのほか、データストアの内部エラーが原因の場合もあります。いずれの場合にも、操作の効果は適 用されず、Datastore API は例外を発行します。

JDO トランザクション API を使用し、ClubMembers という名前のオブジェクト(クラスは非表示)の counter というフィールドの値を増やす例を次に示します。

import javax.jdo.Transaction;
import ClubMembers;   // not shown
// ...
// PersistenceManager pm = ...;

Transaction tx = pm.currentTransaction();
try {
    tx.begin();
    ClubMembers members = pm.getObjectById(ClubMembers.class, "k12345");
    members.incrementCounterBy(1);
    pm.makePersistent(members);
    tx.commit();
} finally {
    if (tx.isActive()) {
        tx.rollback();
    }
}

0 件のコメント:

コメントを投稿

ホームページ