けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :01035 ] the message: "[ruby-dev:1035] ObjectDBM [ Re: Object#bind ] ", on Dec/10 20:37(JST) keiju / Rational.Com (石塚圭樹) writes: >オブジェクト指向データベース風オブジェクトベースdbmです. ほとんど完成したみたいなのでリリースします. o_dbm-0.1.rb.tgz + o_dbm.rb + test-o_dbm.rb test-o_dbm.rbはテストプログラムですがサンプルにもなるかなと... ObjectDBMとは: 1. DBMでは, 文字列しかstoreできませんでしたが, ほとんど任意(marshal可 能な)のオブジェクトをstoreできる様にしました. 2. transactionを採り入れています. commitして始めてデータベースに書き込 まれます. 3. 入れこのtransactionをサポートしています. 4. transactionとしては, 静的トランザクションと動的トランザクションをサ ポートしています. 5. read/write用のキャッシュを持つので, 常にファイルにアクセスしなくて も済むようになっています. 機能: >class ObjectDBM > include Enumerable > > def [](key, mode = nil) > def update(key, obj = nil) > def []=(key, obj) > def delete(key) > def indexes(*keys) > def roots > alias keys roots > def size > def roots(mode = nil) > alias values roots > > def has_root_name?(root_name) > alias root_name? has_root_name? > alias include? has_root_name? > def has_root?(root) > alias root? has_root? > > def each(mode = nil) > alias each_pair each > def each_root_name > alias each_key each_root_name > def each_root(mode = nil) > alias each_value each_root > > def transaction(mode = READ_CACHING) > > class Transaction > class StaticTransaction < Transaction > class DynamicTransaction < Transaction >end こんな感じです. DBMが持つ機能+transaction機能って感じです. 使い方: # データベースを開く >odbm = ObjectDBM.new(db_name) # 静的トランザクション開始 >odbm.transaction do # データベースへの書き込み > odbm["key"] = Foo.new # コミット(実際にデータベースに書き込む) >end >odbm.transaction do > foo = odbm["key"] > foo.bar = Bar.new # オブジェクトに変更があったことを伝える. > odbm.update("key") >end >odbm.transaction do > |txn1| > odbm["key1"] = Bar.new #入れ子トランザクション > odbm.transaction do > |txn2| > odbm["key2"] = Bar.new # txn2のアボート > txn2.abort > end >end 静的トランザクションをアボートするとそのブロックから抜け出します. PS. [ruby-list:5632]の回答もよろしく. 今のままではエラーチェックに抜けが (;_; __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju / rational.com <<---