2012年01月07日

mnesia:transaction/1から、mnesia:activity/2への変更

mnesia:transaction/1について、いろいろ書いてたところ、voluntas さんから「mnesia:transaction/1 ではなく mnesia:activity/2 を使うといいですよ。」とのアドバイスをいただいた。

mnesia:activity/2は飛行機本で紹介されてなかったこともあり、まったく知らなかったので、ドキュメントとかvoluntasさんの書かれたソースとか見てみた。とりあえず、mnesia:transaction/1に近い使い方をしたいだけなら、ちょっと書き換えるだけで使えそうな気配。具体的にはこんな感じ。

1> mnesia:transaction(fun() -> mnesia:read({sample, foo}) end).
{atomic,[{sample, foo, data_of_foo}]}

2> mnesia:activity(transaction, fun() -> mnesia:read({sample, foo}) end).
[{sample, foo, data_of_foo}]


mnesia:activity/2にするときは、
・第1引数に「transaction」を指定する。
・返ってくる値は「 {atomic, VALUE} 」ではなく、「 VALUE 」となる。
の2点でなんとかなりそう。

トランザクション以外の処理させ方もいろいろ使えるみたい。ドキュメントはこちら>mnesia:activity/2

ちなみに、存在しないテーブル名を指定するなどして失敗すると、mnesia:transaction/1だったら{aborted, Reason}だったのが、mnesia:activity/2だと、いきなりexitしてくるんですね。気をつけます。
posted by へろ at 19:57| Comment(0) | TrackBack(0) | Erlang