2010-08-22 19 views

Répondre

5

Les acteurs distants utilisent la sérialisation Java pour envoyer des messages dans les deux sens. À l'intérieur de la bibliothèque d'acteurs, vous trouverez un flux d'entrée d'objet personnalisé (https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/actors/scala/actors/remote/JavaSerializer.scala) utilisé pour sérialiser des objets vers/depuis un socket. Il y a aussi du code de routage et d'autres trucs magiques.

Dans tous les cas, le ClassLoader utilisé pour la communication à distance est plutôt important. Je vous recommande de rechercher Java RMI si vous n'êtes pas familier avec elle. Dans tous les cas, le ClassLoader que Scala sélectionne lors de la sérialisation/désérialisation des acteurs est celui situé sur RemoteActor, par défaut null.

Cela signifie que par défaut, vous serez mécontent sans spécifier un ClassLoader;).

Si vous étiez dans un environnement qui contrôle les chargeurs de classe, tels que OSGi, vous devez vous assurer de définir cette valeur sur un chargeur de classe ayant accès à toutes les classes utilisées par tous les acteurs sérialisés.

Espérons que ça aide!

+0

Merci pour la réponse complète. Est-ce qu'il n'y a aucun moyen que Scala puisse choisir un meilleur défaut que null? –

+0

'null' est la plate-forme par défaut, autant que je sache. En fait, le chargeur de classes 'null' fait référence au" System class loader "qui configure le runtime Java. – soc

+0

Pourquoi le classloader système n'est-il pas correct? –