代码之家  ›  专栏  ›  技术社区  ›  Dr. Hans-Peter Störr

在同一个耳朵里的战争之间交流的选择

  •  6
  • Dr. Hans-Peter Störr  · 技术社区  · 16 年前

    你有什么选择可以在战争之间交流? 我们有几场战争,提供不同的网络服务,部署在同一个耳朵里。对于他们的任务,他们需要与其他战争进行沟通。当然,他们可以使用WebServices进行通信。还有什么其他更有效的选择呢?

    编辑:进行通信的原因是模块使用了一些共享功能,我们希望仅在一个位置定位此功能,因为它需要大量的资源。此外,这需要同步通信。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Dan    15 年前

    首先,你应该清楚你分享的是什么。您应该区分服务和库。 库允许您共享公共功能,例如,当您使用log4j库时,这就是您所实现的功能。在这种情况下,在使用log4j的每个项目中设置log4j。 另一方面,您可以拥有具有自己日志配置的集中式日志记录服务,并允许您在单个位置管理它。在这种情况下,您需要共享服务。

    你可以通过把罐子放在每一场战争或耳朵里来共享图书馆。 您可以通过成为服务客户机来共享服务。因此,您的Web服务可以使用其他服务。在这种情况下,一个Web服务是另一个服务的客户机,实现服务组合(企业开发中的一种常见模式)

    如果服务客户机和服务本身都位于同一个EAR中,那么您可以通过直接调用服务___来避免一些开销,例如,使用Spring__的父上下文功能: http://springtips.blogspot.com/2007/06/using-shared-parent-application-context.html 但我建议不要将服务扁平化,因为您将失去最初提供服务的不同好处,如治理、可管理性等。

        2
  •  1
  •   Community Dunja Lalic    7 年前

    因为你的编辑似乎暗示了战争之间并不需要通信,但两者都需要访问相同的共享资源。最简单的解决方案是将此资源的JAR放到EAR中,并将这些JAR的依赖项添加到两个Web项目中,以便它们使用共享资源。

    如果两个Web项目中都有状态代码需要更新,那么您唯一的选择就是调用Web项目的servlet(假设状态代码包含在Web项目中)。

    请记住,共享资源必须是线程安全的。

    类似的问题 here .

        3
  •  0
  •   Nick Holt    16 年前

    为什么不把公共类放在一个jar中直接使用它们呢?或者稍微重一点让普通类会话bean?

        4
  •  0
  •   sblundy    16 年前

    我想到两件事

    1. 有JMS可以发送信号。
    2. EJB可以记录共享信息。
    3. EAR的lib目录中的lib jar。

    如果您只需要共享方法,3就是您想要的。但是您的编辑点告诉我您已经有了对共享数据进行操作的共享功能。例如,您已经获得了wars访问和更新的用户记录。如果是这样,您需要一个EJB。