如何在不同的Web应用程序中与EventBus共享事件?

时间:2012-10-15 15:31:12

标签: java tomcat guava event-bus

我正在使用tomcat。我想把番石榴罐子和我自己的罐子放在tomcat / lib中。我的jar有一个工厂来获取事件总线,所有webapps都可以访问该工厂。我不知道如何在webapp1中注册一个监听器并从webapp2发布一个事件。我在webapp2中使用的对象在webapp1中不存在,我只能共享像String,字符串映射等Java对象,但不能共享其他webapp中的对象。

一些想法?

2 个答案:

答案 0 :(得分:3)

这是一个类加载问题:很可能,webapp1的域类在webapp2中没有(也不应该)。相信我,当我说,你不想在webapps之间分享实时对象。

如果要共享数据,请考虑使用正确的JMS(或其他类似的消息传递库),如果要共享行为,请使用REST服务。只是提一下简单的常见解决方案。

所有这一切,如果你真的需要去那里,你可以将你想要分享的类放在一个jar中,并将它和guava放在服务器范围的类路径中+额外支付注意部署过程,因为你创建了内存泄漏。 (不过,每当你使用那种令人讨厌的黑客时,上帝会杀死一只小猫

答案 1 :(得分:1)

Guava的EventBus仅适用于单个应用程序中的事件。它绝对不适用于应用程序或服务器之间的通信(至少不是直接)。你也绝对不应该依赖于你当前在同一个Tomcat实例中运行这两个webapp的事实,因为那是你可能想要在某些时候改变的东西。正如所建议的那样,更好的解决方案是用于在JMS等应用程序/服务器之间进行通信的消息库。