Re: Hilfe: DRb/TupleSpace - Problem

Patrick Stiegeler <[email protected]> Tue, 10 Dec 2002 05:19:02 +0100 (MET)
Newsgroups gmane.comp.lang.ruby.german
Message-ID <Pine.GSO.4.44.0212100516480.24580-100000@elara.informatik.uni-freiburg.de>
	Hallo,

Nach einigem Suchen habe ich herausgefunden, warum sich mein
TupleSpace-Programm nicht wie erwartet verhaelt. Es liegt am Verhalten von
DRb. Falls sich noch jemand fuer die Loesung des Problems interessiert:

Es sieht so aus, als ob bei einem Zugriff auf das TupleSpace-Objekt des
Servers via "tuple_space.out [s]" die Parameter (Hier ein Array mit einem
Dummy) serialisiert und zum Server geschickt werden. Dort angekommen
muessen wieder Objekte daraus gebastelt werden und hier ist es wohl
so, dass der Marshal die Klassendefinition der zu bastelnden Objekte
kennen muss. Fuege ich naemlich dem Server die Definition der Dummy-Klasse
hinzu, so funktioniert alles wie beabsichtigt.

Soweit ich das ueberblicke ist es also nicht ohne weiteres moeglich einen
TupleSpace-Server laufen zu lassen, der als Austauschstelle fuer
beliebige, ihm unbekannte Objekte dient. Schade...



On Mon, 9 Dec 2002, Patrick Stiegeler wrote:

> [...]
>
> Es geht um folgenden TupleSpace client:
>
> 	require 'drb'
> 	require 'tuplespace'
>
> 	DRb.start_service
> 	tuple_space = DRbObject.new(nil, "druby://localhost:8888")
>
> 	class Dummy
>         	def initialize
>         	end
> 	end
>
> 	s = Dummy.new
> 	# s = 7
> 	tuple_space.out [s]
>
>
> Die letzte Zeile liefert die Fehlermeldung:
>
> (druby://localhost:8888)
> /usr/local/lib/ruby/site_ruby/1.6/tuplespace.rb:93:in `put_que': undefined
> method `length' for #<DRb::DRbUnknown:0x40234198> (NameError)
>         from (druby://localhost:8888)
> /usr/local/lib/ruby/site_ruby/1.6/tuplespace.rb:103:in `out'
>         from (druby://localhost:8888)
> /usr/local/lib/ruby/site_ruby/1.6/tuplespace.rb:101:in `each'
>         from (druby://localhost:8888)
> /usr/local/lib/ruby/site_ruby/1.6/tuplespace.rb:101:in `out'
>         from dummy.rb:16
>
>
>
> Das Seltsame ist, dass keine Fehlermeldung kommt, wenn ich statt dem
> Dummy-Objekt die 7 uebergebe (auskommentierte Zeile oben).
>
> Der TupleSpace Server:
>
> 	require 'drb'
> 	require 'tuplespace'
> 	require 'thread'
>
> 	port = if ARGV[0] then ARGV[0] else 8888 end
> 	DRb.start_service("druby://localhost:#{port}", TupleSpace.new)
> 	puts "Tuple space server runs at #{DRb.uri}\n"
> 	DRb.thread.join
>