为什么需要使用 Scala RemoteActors 设置类加载器?

发布于 2024-09-15 16:00:29 字数 197 浏览 9 评论 0原文

使用 Scala RemoteActors 时,我收到引用 scala.actors.remote.NetKernel 的 ClassNotFoundException。我复制了别人的示例并将 RemoteActor.classLoader = getClass.getClassLoader 添加到我的 Actor 中,现在一切正常。为什么这是必要的?

When using Scala RemoteActors I was getting a ClassNotFoundException that referred to scala.actors.remote.NetKernel. I copied someone else's example and added RemoteActor.classLoader = getClass.getClassLoader to my Actor and now everything works. Why is this necessary?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奢华的一滴泪 2024-09-22 16:00:29

远程参与者使用 Java 序列化来来回发送消息。在 actor 库中,您将找到一个自定义对象输入流 ( https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/actors/scala/actors/remote/JavaSerializer.scala ),即用于将对象序列化到套接字或从套接字序列化对象。还有一些路由代码和其他魔法。

无论如何,用于远程处理的类加载器相当重要。如果您不熟悉 Java RMI,我建议您查找它。无论如何,Scala 在序列化/反序列化 actor 时选择的 ClassLoader 是位于 RemoteActor 上的 ClassLoader,默认为 null。

这意味着默认情况下,如果不指定 ClassLoader,您将会感到不高兴;)。

如果您处于控制类加载器的环境中,例如 OSGi,则需要确保将此值设置为可以访问所有序列化参与者使用的所有类的类加载器。

希望有帮助!

Remote Actors use Java serialization to send messages back and forth. Inside the actors library, you'll find a custom object input stream ( https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/actors/scala/actors/remote/JavaSerializer.scala ) that is used to serialize objects to/from a socket. There's also some routing code and other magic.

In any case, the ClassLoader used for remoting is rather important. I'd recommend looking up Java RMI if you're unfamiliar with it. In any case, the ClassLoader that Scala picks when serializing/deserializing actors is the one Located on RemoteActor which defaults to null.

This means that by default, you will be unhappy without specifying a ClassLoader ;).

If you were in an environment that controls classloaders, such as OSGi, you'd want to make sure you set this value to a classloader that has access to all classes used by all serialized actors.

Hope that helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文