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としてみたら一応動いた。問題は解決してないけど。