OrbJSONのちょっとしたことで躓く

RubyによるJSON-RPCの実装であるOrbJSONを触りました。チュートリアルのPDFには全てのコードが書かれているわけじゃないけど、末尾のリンクからソースコードをゲットできます。結構簡単に動きます。

けれどもJSON-RPCから呼び出されるLibraryクラスのラッパークラスLibraryWrapperを使えることがチュートリアルにも書いてあって、コードも含まれているんだけど、それを使おうとしてもうまく動かない。

公開されているコードはそのままでは動かないので、requireを変更して、Libraryをnewしているところを変更する。

require 'services/lib-list'

$logger.debug("LibraryWrapper loading");
class LibraryWrapper

  def initialize(  )
     $logger.debug("wrapper initialize");
     # @library  = Library.new( "dbuser", "dbpassword", "server.url:5000 ")
     @library  = Library.new
  end

  def match( str )
    @library.match( str )
     $logger.debug("wrapper match");
  end

  def details( key )
    @library.details( key )
     $logger.debug("wrapper details");
  end
end

$logger.debug("LibraryWrapper loaded");

config.ymlにLibraryではなくLibraryWrapperを使うように変更。

services/lib-list-wrapper: 
   - LibraryWrapper

で、javascript側で

library = jsonrpc.libraryWrapper

とする。
これできっと動くはずー!と試していますがダメダメ。

んで、サーバー側のLibraryWrapperのメソッドが呼び出せていることまではログで確認できました。でもでも、以下のような例外が発生して良く分からん。

[2006-04-20 14:28:00] ERROR Needle::ServiceNotFound: .Librarywrapper
        d:/dev/ruby/lib/ruby/gems/1.8/gems/needle-1.3.0/lib/needle/container.rb:306:in `[]'
        d:/dev/ruby/lib/ruby/gems/1.8/gems/Orbjson-0.0.4/lib/orbjson.rb:37:in `get_object'
        d:/dev/ruby/lib/ruby/gems/1.8/gems/Orbjson-0.0.4/lib/orbjson.rb:163:in `process'
        d:/dev/ruby/lib/ruby/gems/1.8/gems/Orbjson-0.0.4/lib/orbjson.rb:193:in `process_request'
        d:/dev/ruby/lib/ruby/gems/1.8/gems/Orbjson-0.0.4/lib/orbjson.rb:204:in `do_POST'
        d:/dev/ruby/lib/ruby/1.8/webrick/httpservlet/abstract.rb:35:in `__send__'
        d:/dev/ruby/lib/ruby/1.8/webrick/httpservlet/abstract.rb:35:in `service'
        d:/dev/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
        d:/dev/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:155:in `start_thread'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:144:in `start'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:144:in `start_thread'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:94:in `start'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:89:in `each'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:89:in `start'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:79:in `start'
        d:/dev/ruby/lib/ruby/1.8/webrick/server.rb:79:in `start'
        server.rb:56

Librarywrapper?なんかcapitalizeが間違っているの?何なのさ!

で、needleのcontainer.rbっていうところでおかしくなっているので、仕方なくソースを拝見したけどまだおいらにゃ敷居が高い。っていうか、Needleが何なのかも良く分かってないので、調べたらDIコンテナなのね。

Needle is a dependency injection (also, inversion of control) container for Ruby.

追記

クラス名をLibrarywrapperにして、jsonrpc.librarywrapperとしてみたら一応動いた。問題は解決してないけど。