【问题标题】:Deploying java applications (Tomcat/Glassfish)部署 java 应用程序 (Tomcat/Glassfish)
【发布时间】:2013-02-23 16:49:41
【问题描述】:

我们目前正在为大学开发一个项目,我们希望将其实现为逻辑模块和 UI 模块。我们几乎没有部署 Web 应用程序的经验,但是我们提出了以下替代方案:

  1. 将其部署为单个 WAR 项目(这将解决我们在将 UI 与应用程序后端通信时遇到的问题)。
  2. 使用 Web 服务在同一服务器上部署两个 WAR 项目,以便在项目之间进行通信。 (我们有一个使用这种方法的原型部署在 Tomcat 服务器上)
  3. 部署 WAR 项目和 EJB 项目。
  4. 部署将包含对 WAR 和 EJB 项目的引用的 EAR 项目。 (我们在 Glassfish 服务器上部署了使用这种方法的原型)

我们想知道这些替代方案中是否有任何不正确,或者是否有任何替代方案比另一个更好。具体来说,为什么将项目部署为 EAR 模块有用(或没有用)?

项目现在正在启动,所以我们现在只能处理几百个用户。但是,如果项目成功,我们将需要处理几百万用户。

【问题讨论】:

    标签: java jakarta-ee tomcat glassfish web-deployment


    【解决方案1】:

    虽然 Tomcat 是一个 servlet 容器,但没有一个选项是不正确的,如果你想要在那里使用 EJB,你需要像 TomEE 这样的东西,它是 Tomcat 扩展到完全 EE 支持的。或者使用那个 Glassfish。

    什么是最好的取决于您的具体要求:您是否更需要/更重视模块的解耦,或者您更希望获得将事物捆绑在一起的一致性和可靠性。 EJB 还具有一些可能令人感兴趣的额外好处,但它们并不适用于每个项目。请注意,除了提到的替代方案之外,还有其他替代方案,例如基于 JMS 的通信、HTTP REST 通信以及使用 OSGi 解耦包。

    关于为什么将项目部署为 EAR 模块会很有用,引用维基百科:“EAR(Enterprise ARchive)是 Java EE 用于将一个或多个模块打包到单个存档中的一种文件格式,以便部署应用服务器上的各种模块同时发生且连贯。它还包含称为部署描述符的 XML 文件,用于描述如何部署模块。”。所以基本上你得到了耦合的好处,归结为可靠性,你总是知道你的模块是如何部署的。 EAR 模块很好地支持了 EJB 模块等 EE 机制,并且您得到了一个可控的容器。

    已经存在一个线程When is it appropriate to use an EAR and when should your apps be in WARs?,可能会引起兴趣。

    【讨论】:

    • 感谢您的回复。但是现在我有另一个问题。如果我们决定将项目部署为多个 WAR,那么 WAR 之间的通信应该如何进行?我们正在考虑使用 ApacheCXF Web 服务,但我们读到使用 EJB 在性能方面会更好。此外,我们能否以更好的方式实现这一目标? (我们还应该了解 JMS 和 OSGi 吗?)
    • Web 服务在标准中得到了很好的定义,并且存在良好的安全机制以及跨平台支持,但它们也很复杂,实施起来有些脆弱,并且一些其他方式可能会像您说的那样性能更高。对于您应该使用哪种方法,没有一个答案,这取决于您的用例。 JMS 具有高性能、xa 感知和持久性,并且比 OSGi 更容易掌握,我想说,但它们也是可能的。
    • 非常感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多