在应用程序部署期间减少注释搜索

包含许多类并启用注释处理的企业应用程序(未标记为元数据完整)需要额外的时间来部署。 需要额外的时间来扫描应用程序二进制文件以查找由以下程序引入的注释: Java™ EE 5. 如果没有其他选项来限制要扫描的类,则当为模块启用扫描时,必须扫描该模块中的所有类。 即使给定模块中只有一小部分类具有注释,也必须对所有类进行扫描。

准备工作

快速字节码扫描技术用于提高部署性能。 但是,更高的部署性能通过限制对其进行注释扫描的类实现。

将某个模块标记为 metadata-complete 时,此属性将应用于整个模块。 需要注释处理时,无法将模块标记为 metadata-complete。 另外,将模块标记为 metadata-complete 可以阻止扫描模块,这会导致使用 EJB 或 Web Service 注释的 Web 模块发生问题。

Web 模块归档的 JAR 文件(WAR 文件)可能会移至应用程序库文件夹。 但是,可能无法移动 WAR 文件,其原因在于移动 WAR 文件可能会中断 Web 模块封装,或者存在多个需要不同 JAR 文件的模块。

为了克服这些限制并减少部署时间, IBM® WebSphere® Application Server提供限制扫描注释的类的选项。

安装支持的应用程序Java Platform, Enterprise Edition( Java EE ) 5 或更高版本。 如果部署速度极慢且您计划将来再次部署此应用程序,并且应用程序包含启用注释处理的模块,请完成本主题中的过程以减少对其进行注释扫描的类的数目。

有关此任务

该产品提供可配置过滤功能以减少针对注释搜索的类数。 您可以通过四个属性(或清单属性)来确定在注释处理中要忽略哪些模块或 Java 包:(或清单属性):

  • Ignore-Scanning-Archives
  • Ignore-Scanning-Packages
  • Include-Scanning-Archives
  • Include-Scanning-Packages

属性可以指定为amm.filter.properties应用程序服务器根目录/properties或者可以指定为清单属性。

您还可以使用这些系统属性来确定要忽略哪些模块或 Java 包:
  • com.ibm.ws.amm.scan.context.filter.archives
  • com.ibm.ws.amm.scan.context.filter.packages
  • com.ibm.ws.amm.scan.context.include.archives
  • com.ibm.ws.amm.scan.context.include.packages

使用这些选项以限制进行注释扫描的类。 性能的提升与除去的类数成比例。 从处理中除去所有不包含任何注释数据的类。

通常,过滤是在整个归档中完成的。 一种常见的过滤情况是,过滤 WAR 中不包含任何注释数据的实用程序 JAR 文件。)

Ignore-Scanning-Archives 和 Ignore-Scanning-Packages 属性用于指定要在注释处理期间忽略的一部分类。 在注释处理期间,将跳过归档中由 Ignore-Scanning-Archives 指定的所有类。 并且,在注释处理期间,将跳过包中由 Ignore-Scanning-Packages 指定的所有类。

Include-Scanning-Archives 和 Include-Scanning-Packages 属性用于指定要在注释处理期间扫描的一部分类。 指定了两个属性之一时,仅扫描所包含的那些类;将忽略所有其他类。

提供了一组默认值amm.filter.properties归档应用程序服务器根目录/properties用于 Ignore-Scanning-Archives 和 Ignore-Scanning-Packages。
笔记:没有为 Include-Scanning-Archives 和 Include-Scanning-Packages 提供默认值。

这些属性值同时提供对注释处理作用域的粗粒度控制和细粒度控制,其中 Ignore-Scanning-Archives 提供比 Ignore-Scanning-Packages 更粗的粒度控制,同样,Include-Scanning-Archives 提供比 Include-Scanning-Packages 更粗的粒度控制。

所有四个属性的语法都遵循逗号分隔值约定。 不允许使用通配符或正则表达式,并且值是区分大小写的。

同时使用包含和排除属性不常见,但支持此用法。 如果同时指定了包含属性和排除属性,那么在包含且未排除类的情况下,将选择这些类进行处理。 如果同时指定了 Ignore-Scanning-Archives 和 Include-Scanning-Archives,那么在注释处理期间将扫描某个类,但前提条件是该类位于 Include-Scanning-Archives 所指定的归档内,而不位于 Ignore-Scanning-Archives 所指定的归档内。 同样地,如果同时指定了 Ignore-Scanning-Archives 和 Include-Scanning-Packages,那么在注释处理期间将扫描某个类,但执行此操作的前提是该类位于 Include-Scanning-Packages 所指定的数据包内,而不在 Ignore-Scanning-Packages 所指定的归档内。

对于概要文件,使用 amm.filter.properties 文件指定的选项是全局选项。 由该概要文件启动的进程所遇到的所有应用程序都使用这些指定选项。 对于在其上设置了属性的进程,指定为系统属性的选项是全局选项。 进程所遇到的所有应用程序都使用这些指定选项。

可以在三个不同的作用域指定清单属性:
  • 应用程序(EAR 文件)
  • 模块(WAR/RAR/JAR 文件)
  • Web 片段(JAR 文件)
在所有情况下,清单属性适用的所有封闭作用域。 指定为应用程序(EAR 文件)属性的清单属性将应用于所有模块归档和片段 JAR 文件的注释扫描。 指定为模块(WAR/RAR/JAR 文件)的清单属性将应用于模块内的注释。 指定为 Web 片段(JAR 文件)的清单属性将应用于该 Web 片段。

在多个作用域指定的清单属性可以进行叠加。 使用 amm.filter.properties 指定的选项、系统属性和清单属性可以进行叠加。

缺省值集合可以由管理员进行更改,也可以使用下列其中一个步骤进行扩充。

过程

  • 放置amm.filter.properties文件在配置文件根/properties目录。
    使用属性分配组合来更新 amm.filter.properties 文件,以限制注释过程中扫描的类。
  • 使用系统属性提供 Ignore-Scanning-Archives 和 Ignore-Scanning-Packages 属性的值。
    • com.ibm.ws.amm.scan.context.filter.archives 系统属性提供 Ignore-Scanning-Archives 属性的值。
    • com.ibm.ws.amm.scan.context.filter.packages 系统属性提供 Ignore-Scanning-Packages 属性的值。
    • com.ibm.ws.amm.scan.context.include.archives 系统属性提供 Include-Scanning-Archives 属性的值。
    • com.ibm.ws.amm.scan.context.include.packages 系统属性提供 Include-Scanning-Packages 属性的值。

    请参阅有关 Java 虚拟机自定义属性的主题。

  • 将 Ignore-Scanning-Archives、Ignore-Scanning-Packages、Include-Scanning-Archives 和 Include-Scanning-Packages 条目添加至应用程序清单、META-INF/MANIFEST.MF、模块清单或片段清单。
    避免麻烦:更新应用程序清单时,请遵循清单的行长度限制和其他约束。
  • 将 Ignore-Scanning-Archives 和 Ignore-Scanning-Packages 条目添加至模块清单。
    避免麻烦:更新模块清单时,请遵循清单的行长度限制和其他约束。

    在概要文件、进程或应用程序作用域中使用“包括”类型的选项之前,请务必小心。 使用“包括”类型的选项时,将忽略所有类(指定为“包含”选项的类除外)。

    设置选项时,您需要考虑以下几项:
    • 建议将 amm.filter.properties 文件和系统属性用于频繁案例(例如,用于已知从不包含注释数据的实用程序 JAR 文件),或者用于受限制的测试目的。
    • 建议将清单属性用于特定于单个应用程序或应用程序模块的选项。
    • 使用 amm.filter.properties 文件或系统属性时,请确保更新了所有必需的概要文件和进程。
    • 使用清单属性时,设置通过封闭应用程序、模块(或片段)进行传输。 这些设置只能设定一次。 但是,要设置清单属性,您需要更新已打包的应用程序,并且通常需要重新部署应用程序。

    其他选项包括将 metadata-complete 设置为 true 以及将 JAR 文件从 Web 模块移至应用程序库文件夹。 这两个选项并不总是可用的。

下一步做什么?

再次安装该应用程序。 如果部署仍然很慢,请指定更多要忽略的模块和 Java 包。