有关 Java 11 的问题

现在,Blackboard Learn 使用 Java 11。

Blackboard Learn SaaS 3800.0.0 及更高版本在 Oracle 的 Java SE 平台版本 11(2018 年 9 月发布)中运行。此更改仅在服务器上,与您或您的用户在设备或浏览器上使用的任何 Java 无关。Blackboard 利用 Amazon Corretto 的生产就绪型 Java 11 分发版本,该版本使我们可以受益于零成本的完全受支持 Java 版本,并获得增强的性能和最新的安全修复。为了提供更安全、品质更高的解决方案,Blackboard Learn 将始终利用具有长期支持的最新 Java 技术。

此主题回答了许多常见问题,以帮助您和您所在的机构了解 Java 8 到 Java 11 的迁移对 Blackboard Learn 环境的含义。

我是否可以将 Java 11 JDK 与以前版本的 Learn 一起使用?

否。Java 11 JDK 应仅与最新的 Blackboard Learn 版本一起使用。

Java 11 对我的 Blackboard Learn 环境有什么影响?

从 2024 年 1 月开始,将不再支持大多数第三方 Building Block。一些 Building Block 已获准延期,以获得有限的持续支持。了解有关管理 Learn SaaS Building Block 主题的更多信息。

主要影响在第三方 Building Block 上。大多数 Building Block 将继续工作,而不进行任何更改。但是,由于 Java 8 与 Java 11 之间有多种变化,因此某些 Building Block 可能需要进行重大更改,具体取决于其创建方式。

我们建议您先在测试或临时实例中测试所有第三方 Building Block,然后再将此版本应用到生产环境。

由于弃用或删除了安全编码器和协议,因此,校园 SIS 或 LDAP 实施的自定义集成也可能会受到影响。

系统管理员需要做些什么来为进行此更改做好准备?

第三方 Building Block

从 2024 年 1 月开始,将不再支持大多数第三方 Building Block。一些 Building Block 已获准延期,以获得有限的持续支持。了解有关管理 Learn SaaS Building Block 主题的更多信息。

如果您使用的 Building Block 不属于核心 Blackboard Learn,则应计划在运行使用 Java 11 的 Blackboard Learn 版本的非生产环境中测试它们。向 Building Block 解决方案提供商报告您可能发现的任何问题。

此建议的测试是对任何升级的最佳做法,但我们强烈建议您测试此升级,因为此更改更为重大。

命令行集成

涉及命令行调用的集成可能会受到影响。对于从命令行脚本调用 Java 的情况,则需要包含参数 --add-modules=ALL-SYSTEM,以防止发生可能与模块相关的错误。

默认情况下,涉及语言环境特定的日期或时间的集成可能受到 Java 9 及更高版本中采用通用区域设置数据存储库 (CLDR) 的影响(有关详细信息,请参阅 https://openjdk.java.net/jeps/252)。对于 Java 11,Blackboard Learn 将覆盖新的默认 CLDR 语言环境提供程序,以便为语言环境数据和格式提供向后兼容性支持。具体来说,Blackboard Learn 会将 java.locale.provider 属性设置为:java.locale.providers=COMPAT,CLDR

根据客户端的使用情况和负载,可能会由于在 Java 11 中解析类文件的调用堆栈大小增加而发生 StackOverflow 错误。我们可以通过 bb-config.properties 设置 bbconfig.max.stacksize.tomcat 来控制 Tomcat 中的堆栈大小设置。以前建议的堆栈大小为 400K,而 Java 11 中最新的建议最小大小为 700K。

任何基于 Java 的命令行与 Blackboard Learn 的集成都应使用相同的设置,以确保最大的兼容性。

SIS 和 LDAP 集成

在 Java 11 中,任何依靠旧版或更低安全密码套件进行 SSL 或 TLS 实施的集成都不适用。有关详细信息,请查看支持公告

开发人员需要做些什么?

通常,大多数 Java 8 代码都与 Java 11 兼容,可以起作用。但是,一些 Building Block 可能需要更新。可能的情况包括:

  • 引用或依赖于 Blackboard Learn 分发版中的第三方库或 jar 的 Building Block。
    • 在这种情况下,Building Block 开发人员应捆绑运行其 Building Block 功能所需的第三方库或 jar 的副本。
  • 依赖于已由 Oracle 在 Java 9 中删除的 EE (Enterprise Edition) 框架类的 Building Block(有关详细信息,请参阅https://openjdk.java.net/jeps/320)。
    • 这些已删除类的任何依赖关系都必须通过替换为具有相似功能的外部包来减轻。
  • 在 Java 11 中,引用或依赖于某些内部 Java API 的 Building Block 可能无法继续使用。自 Java 9 起,默认情况下大多数 com.sun.*sun.* 包都是内部包,且不可访问。
    • Java 内部包的任何依赖关系都必须通过替换为具有相似功能的外部包来减轻。
  • 许多 Building Block 不需要重新编译。但是,如果 Building Block 依赖于需要升级才能与 Java 11 一起使用的一个或多个第三方库(例如,Spring),则可能不可避免地要进行重新编译。
    • 为了与 Java 11 兼容,依赖于 Spring 框架的 Building Block 应更新为使用 Spring 5.1.X 及更高版本。

在任何情况下,最佳做法都是使用 Java 11 和最新的公共 Blackboard API 库文件重新编译 Building Block。

作为一名开发人员,我是否可以利用 Java 11 功能?

是的,开发人员现在可以使用在 Java 9 到 11 中引入的语言特定的任何功能。但是,实施这些功能意味着 Building Block 将会与 Java 8 版本的 Blackboard Learn 不兼容。如果 Building Block 特定于您的环境,则更不用担忧。在升级 Learn 后,实施 Java 11 特定的功能。

针对多个版本 Blackboard Learn 的解决方案可能需要创建两个单独的 Building Block,或者创建使用目标版本的相应库以及编译程序源和目标版本编译的单个 Building Block,以同时满足 Java 8 和Java 11 兼容性要求。

我如何了解关于 Building Block 的更多信息?

请阅读我们的主题管理 Learn SaaS Building Block,了解最新信息。