Bei der Verwendung von Scala RemoteActors erhielt ich eine ClassNotFoundException, die sich auf scala.actors.remote.NetKernel bezog. Ich kopierte das Beispiel eines anderen und fügte meinem Akteur RemoteActor.classLoader = getClass.getClassLoader
hinzu und jetzt funktioniert alles. Warum ist das notwendig?Warum wird der Classloader mit Scala RemoteActors benötigt?
Antwort
Remote-Actors verwenden die Java-Serialisierung, um Nachrichten hin- und herzusenden. In der Actor-Bibliothek finden Sie einen benutzerdefinierten Objekt-Eingabestream (https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/actors/scala/actors/remote/JavaSerializer.scala), mit dem Objekte zu/von einem Socket serialisiert werden. Es gibt auch Routing-Code und andere Magie.
In jedem Fall ist der ClassLoader für Remoting ziemlich wichtig. Ich würde empfehlen, Java RMI nachzuschlagen, wenn Sie damit nicht vertraut sind. In jedem Fall ist der ClassLoader, den Scala beim Serialisieren/Deserialisieren von Akteuren auswählt, derjenige, der sich auf RemoteActor befindet und standardmäßig auf null gesetzt ist.
Dies bedeutet, dass Sie unglücklich sein werden, ohne einen ClassLoader zu spezifizieren;).
Wenn Sie sich in einer Umgebung befinden, die Klassenladeprogramme wie OSGi steuert, sollten Sie sicherstellen, dass Sie diesen Wert einem Klassenlader zuweisen, der Zugriff auf alle von serialisierten Aktoren verwendeten Klassen hat.
Hoffe, dass hilft!
- 1. Warum wird NotificationCompat benötigt?
- 2. Warum Scala doppelten Konstruktor benötigt? (java.lang.NoSuchMethodException)
- 3. Warum wird typeof benötigt?
- 4. Warum wird der Cache von ClassLoader in aufsteigender Reihenfolge überprüft?
- 5. Warum genau wird preferredMaxLayoutWidth benötigt?
- 6. SwingUtilities.invokeLater() warum wird es benötigt?
- 7. Warum wird hier Kontext benötigt?
- 8. Warum wird document.getElementById nicht benötigt?
- 9. Wie wird der Java Bootstrap Classloader geladen?
- 10. Wann wird @uncheckedVariance in Scala benötigt und warum wird es in GenericTraversableTemplate verwendet?
- 11. Warum werden mehr Klassenlader benötigt?
- 12. log4j und der Threadkontext Classloader
- 13. Warum benötigt der Indirektionsoperator ist
- 14. Typescript warum und wann requirejs benötigt wird
- 15. Warum wird Lambda Notation in Razor benötigt?
- 16. Warum wird die Syntax ": nodoc:" benötigt?
- 17. Warum wird in diesem Fall ref benötigt?
- 18. Wird der Class.forName() -Mechanismus benötigt?
- 19. Rekursiver Wert xxx benötigt Typ in Scala
- 20. Warum wird die Matlab-Funktion "feval" benötigt?
- 21. Warum wird meine Funktion aufgerufen, wenn sie nicht benötigt wird?
- 22. ClassLoader mit RMI-Aufruf
- 23. Warum wird assertDictEqual benötigt, wenn dicts mit `==` verglichen werden können?
- 24. Laden von Dateien mit ClassLoader
- 25. Konfiguriere org.apache.log4j.ConsoleAppender mit benutzerdefiniertem Classloader
- 26. Reihenfolge, in der classLoader Klassen in diesem Szenario laden wird
- 27. Warum benötigt Scala die teilweise Anwendung von Curry-Funktionen bei der Zuweisung zu einem Wert?
- 28. Warum benötigt RVM YAML?
- 29. Warum wird Scala asIstanceOf scheinbar ignoriert?
- 30. Beispiel Hilfe bei Scala Variablen benötigt
Vielen Dank für die gründliche Antwort. Gibt es keine Möglichkeit, dass Scala einen besseren Standard als null wählen könnte? –
'null' ist der Plattformstandard, soweit ich weiß. Tatsächlich bezieht sich der Klassenlader "null" auf den "System class loader", der die Java-Laufzeitumgebung einrichtet. – soc
Warum ist der System-Classloader nicht in Ordnung? –