2

我正在为使用 Java EE 5 开发的大型软件系统设计构建系统和目录结构。构建系统将使用 ant 实现。

我们有多种不同的服务,它们按主题分组。每个服务都提供 Web 服务或 EJB。每个服务都运行在一个专用的应用服务器集群上。因此,我们有多个集群,其中一些集群可以按主题进行逻辑分组。

我确实阅读了通用定义和示例,但我仍然对 Java EE 术语感到困惑:

  • 什么是 Java EE 应用程序?因此,EAR 文件的内容是什么?
  • 什么是 Java EE 项目?(Netbeans 以及企业应用程序的 Java 蓝图指南项目约定中都使用了该术语)

我是否必须将所有 EJB 和 WAR-module-package-files 放在一个 EAR 中,以便这个 EAR 包含我们的完整系统?

或者我是否将每组服务放入一个 EAR,尽管这些服务只是在逻辑上分组而不是在技术上分组?

或者我是否为每个服务组装了一个单独的 EAR,即通常只包含一个 EJB jar 文件,有时还包含 EJB 和一个 WAR 文件?

或者我是否摒弃了应用程序的概念,只构建 EJB 和 WAR 文件,以便每个应用程序服务器集群只有一个部署文件?

我想,我的主要问题是:打包 EAR 文件有什么好处?

正如我目前所看到的,只需要 EAR-EJB 和 WAR 文件以及 ant-build-system 中嵌套子项目的概念和我们源代码的目录结构?

编辑:非常感谢您的回答!在我看来,打包到耳朵中的应用程序是一个相当原子的子系统。所以我想,我将有一个嵌套的子项目结构(只有逻辑,只对构建系统和源目录结构可见)和相当多的 EAR,每个 EAR 大多只包含一个 ejb-jar和/或war模块并实现单个服务(部署在单个应用程序服务器集群上)。

4

3 回答 3

1

这里有很多问题。

Java EE 项目是使用 Java EE 技术的 EAR 或 WAR 部署。如果您有一个带有 JSP 和 JDBC 访问关系数据库的 WAR,那就是一个 Java EE 项目。最初的意图是 EAR 文件是“企业”的,这意味着 EJB。EAR 文件包含 EJB、WAR、JAR、整个 enchilada。

在服务方面的想法有些不同。我认为部署值得仔细考虑,因为如果必须进行任何维护,则必须将打包在一起的组件一起关闭和启动。

因此,请仔细考虑如何打包服务。IMO,这不是一个全有或全无的答案。您应该查看您的服务正在做什么以及如何一起使用它们来决定应该如何打包和部署它们。

于 2009-01-03T14:11:17.463 回答
1

我认为您决定放入每个 EAR 的内容受组织和技术问题的约束。

我认为 EAR 最重要的技术角色是运行时环境中的类加载器根。这通常意味着您可以在不同的 EAR 中部署不同版本的库和您自己的类。这意味着您应该保持容器根类路径相当空(或由容器供应商提供),因为它可能允许一个物理容器使用可能冲突的库来服务多个应用程序。如果您正在使用通用代码库开发许多不同的应用程序,这将是一个好消息。您可以将多个项目部署到同一个服务器场,而不会相互干扰。

您通常不会部署比 EAR 更小的软件单元。每个 EAR 都可以或多或少完全独立。我通常会让这些内容反映所属组织对应用程序或子系统的看法。您通常可以将相同的组件打包到多个 EAR 中。

于 2009-01-03T14:23:20.090 回答
0

逻辑和组织方面的考虑都会发挥作用。每个 EAR 将包含与特定功能相关的所有部分。我们总是可以假设每个 EAR 都是独立的,并且可以部署在一个或多个容器上。我一直遵循的典型方法是让每个 EAR 包含一个或多个 jars 和 war。每个 war 或 jar 都包含一些关键组件或一组相关组件。EAR 代表一个企业应用程序,其中包含应用程序的组件和 Web 应用程序。一个示例是我参与的支付处理系统。EAR 包含运行支付处理系统所需的一切。这包括六个罐子和 3 场战争。每个 jar 代表一些功能或功能的逻辑分组。每场战争都代表一个网络应用程序。罐子的一个例子'

  • 核心功能的罐子
  • ejbs的罐子
  • 一个装我们高级金融数学作品的罐子
  • 一个 jar 用于我们的安全部件等。拥有多个 jar 是因为不同的人开发了不同的部件,因此他们在不同的 Eclipse 项目中工作并根据需要将它们组合起来。没有硬性规定,只要适合您的团队和情况即可。
于 2011-05-21T08:08:54.120 回答