From: "Stephan Kämper" Date: 2004-01-02T07:11:46+09:00 Subject: Drb and observer pattern Hi all and have a happy new year everybody! I'm trying to built a set of programs that - may run on different machines, or as different processes on one machine - I'd like to have one program to notify other(s) of certain events Now I thought that combining DRb and the Observer pattern might be the way to go, but as I'm posting a question I apparently ran into an error. BTW, I'm running a SuSE Linux 9.0 with ruby 1.8.1 [884] stk@tao ~/devel/util: ruby -v ruby 1.8.1 (2003-12-25) [i686-linux] I boiled down the server part to this: ==> File: Notifier.rb require "drb/drb" require "observer" class Notifier include Observable def change( i ) puts "Changing: #{'%2d' % i}" changed( true ) notify_observers( Time.now, i ) end end DRb.start_service( 'druby://localhost:4711', Notifier.new ) puts DRb.uri DRb.thread.join The program using that service got shortened to this: require 'drb' class Dummy def initialize( observed ) observed.add_observer( self ) end # define update as required by the Observer module def update( *args ) puts "!!!" p *args end end notifier = DRbObject.new( nil, 'druby://localhost:4711' ) d = Dummy.new( notifier ) # Do something with the notifier to get d's 'update' called notifier.change( rand( 10 ) ) Now, running the notifier works fine, but starting the client leaves me with this: [884] stk@tao ~/devel/util: ruby dummy.rb (druby://localhost:4711) /usr/local/lib/ruby/1.8/observer.rb:126:in `add_observer': Observer needs to respond to 'update'. (NoMethodError) from dummy.rb:5:in `initialize' from dummy.rb:15:in `new' from dummy.rb:15 { Note that I changed the part of 'observer.rb' to give some information about the observer that leads to the exception - just to be sure that it's an Object of class Dummy that rose the exception. } Now, why do I get the exception? I defined 'update' of objects of class Dummy, didn't I? Where's my mistake? Is it that way a good way anyway? Happy rubying! Stephan