我正在创建一个 Vaadin 应用程序,基于 QuickTickets 演示应用程序和其他示例,我决定使用 Guava 的 EventBus
进行事件处理,因此我在UI
实例级别。
由于我也在使用 Spring Boot 和 DevTools,它可以在不需要冷启动的情况下重新加载应用程序,我发现 Guava 的 EventBus
不是 Serializable
,导致java.io.NotSerializableException
。
如何避免这种情况?
例如:
- 有没有办法围绕
EventBus
制作一个Serializable
包装器?它需要保留已注册事件监听器的列表,并在 session 重新加载时将它们重新注册到EventBus
(我猜它需要一个transient
引用EventBus
所以它不会被序列化)。 - 既然我一直在使用 Spring,也许我可以使
EventBus
成为 UI 范围的Bean
?我想我仍然需要以某种方式处理听众的重新注册。
最佳答案
试图让 vaadin 在共享 session 环境中运行时,我也不得不面对这个问题。结合 Jose 出色的 SerializableProxy-annotation 和 vaadin 的 spring 集成库的修复(也感谢 xpoft 的另一个实现),它似乎可以运行。
您可以在此处找到示例应用程序:https://github.com/khauser/microservices4vaadin在前端微服务中
您还可以从 quickticket 仪表板中找到经过调整的 EventBus,它可以像这样 Autowiring /注入(inject):
@Autowired
@SerializableProxy
private MyEventBus myEventBus;
关于java - 使用 session 序列化处理 Vaadin 中不可序列化的 Guava EventBus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769821/