java - 使用 session 序列化处理 Vaadin 中不可序列化的 Guava EventBus

标签 java session serialization vaadin guava

我正在创建一个 Vaadin 应用程序,基于 QuickTickets 演示应用程序和其他示例,我决定使用 Guava 的 EventBus 进行事件处理,因此我在UI 实例级别。

由于我也在使用 Spring Boot 和 DevTools,它可以在不需要冷启动的情况下重新加载应用程序,我发现 Guava 的 EventBus 不是 Serializable,导致java.io.NotSerializableException

如何避免这种情况?

例如:

  1. 有没有办法围绕EventBus 制作一个Serializable 包装器?它需要保留已注册事件监听器的列表,并在 session 重新加载时将它们重新注册到 EventBus(我猜它需要一个 transient 引用 EventBus 所以它不会被序列化)。
  2. 既然我一直在使用 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/

相关文章:

java - 序列化/反序列化 LinkedHashMap (android) java

java - 流损坏异常 : invalid type code: 01 in Client Server connection

java - 有没有比使用 instanceof 更好/更干净的方法来有条件地创建类型? [ java ]

java - 如何从android中的普通类调用main_activity的方法

java - 读取 oleObject 文件的代码

google-app-engine - 对 API 调用 datastore_v3.Put() 的请求太大。使用 Objectify (DataStore) 而不是上传文件

java - 每个用户只允许一个 session

登录期间的 session 处理,并防止 GWT 中的 XSRF(跨站点请求伪造)

c# - 如何序列化 Azure 服务总线中的异常?

java - 为什么 mysql connector/j 的 rewriteBatchedStatements 默认为 false?