2013-02-13 64 views
2

我们正试图找到一个在weblogic上创建单身人士的好方案。weblogic上的单身人士10.3

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

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

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

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

+0

澄清:单身人士是一个具有如下逻辑的事件处理器:“每一个满足baz的第3个酒吧都做到foo,这个计数就是要求它成为一个单身人士,foo和baz都需要与其余的系统 – 2013-02-13 16:36:14

回答

1
+0

将单身人员放在共享库中不太可能工作,因为群集中每个服务器仍然会有单身人员。 但是,它可能更容易将单身人员放入非群集服务器并使所有人将单身人士和其他东西共同使用的代码放到共享库中,我需要玩这个...... – 2013-02-13 16:17:02

+0

你也可以将连贯性看作是在实例之间共享数据的一种方式。 – chitakasa 2013-02-13 16:23:33

0

我不知道如果我有很明白你的问题,也许是最简单的办法是使主题分布,并用它来单身状态传播到所有群集节点。

您可以使用该主题来传播单例状态,我的意思是,只有一个单例状态,需要隐式重载的更改或行为,将消息发送到该主题,每个MDB的主题将收到消息(这里是分布式的技巧)(例如,一个用于集群节点的MDB),并在每个节点中按照您的需要进行操作。

希望这个帮助,但我不知道我是否理解你的问题。

+0

单身人士中有太多的逻辑要求访问周围的代码,因此这是一个简单的解决方案。单例正在处理事件,而由事件引起的操作依赖于系统状态(一堆数据库读取之间有一些逻辑)。做出所有MDB驱动的检查是可行的,但这需要很多工作,并可能会破坏性能。 – 2013-02-13 16:23:52

2

帕维尔,我看你自己已经想出了很多很棒的点子。看起来你需要一个单身的跨群集来做计数。你需要的单例不一定是内存中的单例。您可以将计数移至数据库表。数据库表可以充当单身人士。每当计数增加时,您都会进行jdbc调用以更新表中的计数字段。