2011-05-03 45 views
4

我有一个正在生成事件的发布者类,以及一些想要订阅事件以便运行自己的回调的侦听器类。Scala在pub/sub模型中事件回调的初始化

所有这些监听器类都是事先已知的。

我的所有听众在应用程序启动时订阅发行商的最佳方式是什么?我希望所有特定于侦听器的代码都是侦听器类的一部分。我当时认为监听器可以在静态块(Object)中订阅发布者,但是从我所了解的Java延迟加载类来看,并不能保证所有监听器都会立即订阅。为了规避这种情况,我可能会采取一些措施来强制JVM立即加载所有侦听器?

有没有更简单的我失踪?

回答

2

使用演员!每个发布者一个演员,每个订阅者一个演员。发布者维护订阅者列表。订阅者通过向发布者发送消息来添加:pub!添加(子)

当发布者有要发布的内容时,它会遍历每个订阅者和消息的列表。演员介绍见http://www.scala-lang.org/node/242

+0

是的,对于实际的pub/sub实现来说,这是一个有趣的想法。但是,考虑到pub/sub实现,发布者和订阅者,我正在寻找一种让所有订阅者在应用程序初始化时间轻松订阅的方式(修改了我的问题以澄清这一点)。 我想避免在我的应用程序init中有一大块代码遍历我定义的每个订阅者,称为pub!添加(子)。 – 2011-05-04 06:37:21

1

最好使用一些受控的运行时环境,如OSGiRCP,这是Eclipse的基础。它们提供了许多用于声明性控制应用程序加载过程并在模块之间建立编译和运行时依赖关系的方法。

例如,您可以将所有侦听器打包为单独的捆绑包,将它们全部标记为未延迟加载,并将订阅代码添加到init钩子。