Raising my own exceptions with DRb

Hi

I'm looking for a way to raise my own exceptions over drb. It's no
problem to raise the usual/standard exceptions like ArgumentError etc.

I tried to define the Exceptions in the client and I tried to include
the DRb::DRbUndumped within the Exception class, nothing worked... the
client just throws a DRb::DRbConnError exception.

Can anybody help with this problem? I've attached small examples for the
server and the client...

Thanks!
reto

Server:

require 'drb/drb'

URI = "drbunix:/tmp/ruby.socket"

class Thing
  include DRb::DRbUndumped
  
  def normal_exception
    raise "aaah"
  end

  def own_exception
    raise MyException
  end

  class MyException < Exception
    # I tried to use DRb::DRbUndumped on the Exception class.. didn't work
    # include DRb::DRbUndumped
  end
end

class Srv
  def get_thing
    @t = Thing.new
  end
end

srv = Srv.new()

#$SAFE = 1 # disable eval() and friends

DRb.start_service(URI, srv, {:verbose => true})
DRb.thread.join

Client:

require 'drb/drb'
class Thing
  class MyException < Exception
  end
end

uri = "drbunix:/tmp/ruby.socket"
DRb.start_service

c = DRbObject.new_with_uri(uri)

t = c.get_thing

begin
  t.normal_exception
rescue RuntimeError => e
  puts "Caught a RuntimeError: " + e.inspect
end

begin
  t.own_exception
rescue Thing::MyException => e
  puts "Caught a Thing::MyException: " + e.inspect
end

Hi

I'm looking for a way to raise my own exceptions over drb. It's no
problem to raise the usual/standard exceptions like ArgumentError etc.

I tried to define the Exceptions in the client and I tried to include
the DRb::DRbUndumped within the Exception class, nothing worked... the
client just throws a DRb::DRbConnError exception.

Can anybody help with this problem? I've attached small examples for the
server and the client...

Thanks!
reto

Server:

require 'drb/drb'

URI = "drbunix:/tmp/ruby.socket"

class Thing
  include DRb::DRbUndumped

  def normal_exception
    raise "aaah"
  end

  def own_exception
    raise MyException
  end

  class MyException < Exception

                         ^^^^^^^^^

You don't usually want to inherit exceptions from Exception. If you change this to RuntimeError, it works.

    # I tried to use DRb::DRbUndumped on the Exception class.. didn't work
    # include DRb::DRbUndumped
  end
end

class Srv
  def get_thing
    @t = Thing.new
  end
end

srv = Srv.new()

#$SAFE = 1 # disable eval() and friends

DRb.start_service(URI, srv, {:verbose => true})
DRb.thread.join

Client:

require 'drb/drb'
class Thing
  class MyException < Exception

Same here.

···

On Jan 23, 2006, at 9:55 AM, Reto Schuettel wrote:

  end
end

uri = "drbunix:/tmp/ruby.socket"
DRb.start_service

c = DRbObject.new_with_uri(uri)

t = c.get_thing

begin
  t.normal_exception
rescue RuntimeError => e
  puts "Caught a RuntimeError: " + e.inspect
end

begin
  t.own_exception
rescue Thing::MyException => e
  puts "Caught a Thing::MyException: " + e.inspect
end

--
Eric Hodel - drbrain@segment7.net - http://segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com