2

我们正在尝试找到一个在 weblogic 上创建单例的好解决方案。

现在我们有一个既部署在集群环境中又部署在单个服务器中的耳朵。耳朵内是一个持有某种状态的单身人士。在 2 台服务器上复制该状态会导致不正确的行为。目前,只能通过部署为 max 1 的 MDB 访问该单例。该 MDB 正在侦听一个主题。该主题未分发,这导致我们仅在一台服务器上拥有它,但会导致我们不喜欢的部署警告。

我们考虑了几个解决方案:

  • Weblogic 的 SingletonService。工作正常,但它只在集群上工作,导致应用程序的单个服务器版本和开发人员沙箱出现问题。
  • 为单例和周围代码创建一个单独的耳朵,并将其部署在单独的托管服务器上。这预计会按要求工作,但需要大量工作才能将我们的单例与周围的代码分离,并要求我们向远程访问公开大量功能。
  • 使单例无状态删除单例要求。应该工作,但同样需要大量工作

还有其他方法可以解决问题吗?也许是一些 JMS 技巧?

4

3 回答 3

2

帕维尔,我看到你自己已经想出了很多好主意。看起来您需要一个单例交叉集群来进行计数。您需要的单例不必是内存中的单例。您可以将计数移动到数据库表中。数据库表可以充当单例。每当计数增加时,您都会调用 jdbc 来更新表中的计数字段。

于 2013-02-16T07:36:32.080 回答
1

创建共享库会起作用吗?共享库可以有一个单例。

http://docs.oracle.com/cd/E11035_01/wls100/programming/libraries.html#wp1071514 https://blogs.oracle.com/jamesbayer/entry/weblogic_server_shared_librari_1

于 2013-02-13T16:07:46.517 回答
0

我不知道我是否非常了解您的问题,也许最简单的解决方案是使主题分布式并使用它将单例状态传播到所有集群节点。

您可以使用主题来传播单例状态,我的意思是,只有一个单例状态,在需要隐式重新加载的更改或行为上,向主题发送消息,每个 MDB 订阅主题都会收到消息(这里分布式是诀窍)(例如,一个用于集群节点的 MDB)并在每个节点中按照您的需要行事。

希望这会有所帮助,但我不知道我是否理解您的问题。

于 2013-02-13T16:08:21.877 回答