3

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

一些想法?

4

2 回答 2

3

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

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

话虽如此,如果你真的需要去那里,你可以把你想要共享的类放在一个 jar 中,并将这个和番石榴放在服务器范围的类路径中 + 在创建内存时特别注意部署过程-泄漏。(不过,每次你使用那种讨厌的黑客,上帝都会杀死一只小猫

于 2012-10-15T18:52:56.060 回答
1

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

于 2012-10-15T22:06:50.360 回答