Java Runtime 生命周期管理

Java 运行时生命周期管理包括:

  • 安装和配置 Java 运行时
  • 删除 Java 运行时
  • 管理部署规则集

安装和配置 Java 运行时

JMS 允许您在组中的任何选定实例或所有托管实例上安装任何 Oracle JDK。此外,您还可以使用安装后操作进一步配置新的 Java 运行时。

对于每个受支持的平台,您可以选择是否要将 Java 运行时安装为普通归档文件(该归档文件将被提取到文件系统上的所选位置),或者 JMS 将通过为所选平台执行官方 Oracle JDK 安装程序来安装 Oracle JDK。

OCI 云控制台

  1. 以管理员身份登录 OCI 控制台。
  2. 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的
  3. 选择您的组。
  4. 单击操作,然后从菜单中选择安装 Java 运行时
  5. 选择要安装的版本。
  6. 单击下一步
  7. 您可以选择通过特定于平台的 JDK 安装程序安装 Java,或者下载 Java 归档文件并将其提取到指定的路径,然后单击下一步继续。
  8. 单击 Install Java Runtime

OCI CLI

  1. 使用以下命令为安装生成有效负载:
    oci jms installation-site-summary add --generate-param-json-input installation-sites
  2. 编辑有效负载 json 文件,例如:
    [
      {
        "artifactContentType": "JDK",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID",
        "releaseVersion": "21"
      }
    ]
  3. 执行以下命令:
    oci jms installation-site-summary add --fleet-id $FLEET_OCID --installation-sites file://installation-sites.json

配置新的 Java 运行时

每次安装 Java 运行时都可配置多个选项以增强安全性、网络配置或日志记录。有关所有配置选项的详细说明,请参见Java Post-Installation Actions 。例如,您可以将此功能用于环境中 Java 运行时的全局代理配置。

您可以从 OCI 云控制台或 OCI CLI 运行该操作。

OCI 云控制台

  1. 以管理员身份登录 OCI 控制台。
  2. 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的
  3. 选择您的组。
  4. Click Actions and from the menu select Configure Java runtime lifecycle management settings.
  5. Java 安装后操作部分下,配置您的要求。
  6. 单击保存
  7. 现在,您可以启动上述 Java 运行时安装过程,并在对话框的第二步中确认新配置的安装后操作。

OCI CLI

  1. 使用以下命令为组生成 LCM 配置:
    oci jms fleet-advanced-feature-configuration update --generate-param-json-input lcm
  2. 使用您的更改更新文件,例如:
    {
        "isEnabled": true,
        "postInstallationActions": {
          "proxies": {
            "httpProxyHost": "my-awesome-company-proxy",
            "httpProxyPort": 8080,
            "httpsProxyHost": "my-awesome-company-proxy",
            "httpsProxyPort": 8080,
            "useSystemProxies": false
          }
        }
    }
  3. 上载组配置:
    oci jms fleet-advanced-feature-configuration update --lcm file://lcm-update.json --fleet-id $FLEET_OCID
  4. 更新您的安装有效负载文件,例如:
    [
      {
        "artifactContentType": "JDK",
        "managedInstanceId": "$MANAGED_INSTANCE_OCID",
        "releaseVersion": "21"
      }
    ]
  5. 执行安装脚本:
    oci jms installation-site-summary add \
            --fleet-id "$FLEET_OCID" \
            --installation-sites file://installation-sites.json \
            --post-installation-actions '["SETUP_HTTP_PROXY","SETUP_HTTPS_PROXY"]'

删除 Java 运行时

JMS 提供了组中所有托管实例搜索到的 Java 运行时的列表。组管理员可以选择从所选托管实例或 JMS 组内的所有托管实例中删除任何 Oracle Java 运行时。

OCI 云控制台

  1. 以管理员身份登录 OCI 控制台。
  2. 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的
  3. 选择您的组。
  4. 单击 Java 运行时部分,然后选择 Oracle Java 运行时
  5. 单击删除
  6. 再次单击删除以确认。

OCI CLI

  1. 使用以下命令生成要删除的有效负载:
    oci jms installation-site-summary remove --generate-param-json-input installation-sites
  2. 获取给定组和 Java 版本的安装密钥:
    oci jms installation-usage summarize --fleet-id $FLEET_OCID --jre-version
          $ORACLE_JDK_VERSION
  3. 获取具有已安装 Java 版本的给定组的托管实例 OCID:
    oci jms managed-instance-usage summarize --fleet-id $FLEET_OCID --jre-version
          $ORACLE_JDK_VERSION

    注意:

    您只能找到具有附加参数 --os-family 的特定平台的托管实例。
  4. 将安装密钥与托管实例相结合,安装密钥和托管实例特定于平台,例如:
    [
      {
        "installationKey": "$JAVA_RUNTIME_INSTALL_KEY_LINUX",
        "managedInstanceId": "$LINUX_MANAGED_INSTANCE_OCID"
      },
      {
        "installationKey": "$JAVA_RUNTIME_INSTALL_KEY_WINDOWS",
        "managedInstanceId": "$WINDOWS_MANAGED_INSTANCE_OCID"
      }
    ]
  5. 完成安装密钥和托管实例对的列表后,将 installation-sites 配置保存到名为 installation-sites.json 的文件中。
  6. 执行以下命令:
    oci jms installation-site-summary remove --fleet-id $FLEET_OCID --installation-sites
          file://installation-sites.json

管理部署规则集

部署规则集是一组规则和策略,用于以安全、可定制的方式控制和管理 Java 小程序和 Web 应用程序的执行。

使用 JMS,管理部署规则集 jar 是一项简单的任务。组管理员将通过上载包含部署规则的签名 jar 来对其进行配置,然后 JMS 将将 DRS 文件分发到组中的所有托管实例(如果适用)。

注意:

“管理部署规则集”功能仅限于 Java 8 运行时。

OCI 云控制台

  1. 以管理员身份登录 OCI 控制台。
  2. 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的
  3. 选择您的组。
  4. Click Actions and select Configure Java runtime lifecycle management settings.
  5. 部署规则集文件部分中,上载部署规则集 jar 文件。
  6. 单击上载

管理部署规则集

  1. 以管理员身份登录 OCI 控制台。
  2. 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的
  3. 选择您的组。
  4. 单击 Actions(操作)并选择 Manage Deployment Rule Set(管理部署规则集)
  5. 单击 Distribute or Remove DRS panel(分配或删除 DRS 面板)
  6. 单击提交

OCI CLI

  1. 使用以下命令上载 DRS 文件:
    oci os object put --namespace $NAMESPACE --bucket-name $BUCKET_NAME --file
          DeploymentRuleSet.jar
  2. 使用 JMS 验证:
    oci jms fleet create-drs-file --namespace $NAMESPACE --bucket-name $BUCKET_NAME
          --drs-file-name DeploymentRuleSet.jar --fleet-id $FLEET_OCID
  3. 分发 DRS 文件:
    oci jms fleet enable-drs --fleet-id $FLEET_OCID

DRS 高级功能依赖于将 DRS 相关有效负载从托管实例发送到 OCI Inventory 日志对象。下面是示例 DRS 有效负载:

{
  "datetime": 1749559306604,
  "logContent": {
    "id": "117dffe5-defd-4d62-8d4c-b4b3b5ace029",
    "time": "2025-06-10T12:41:46.604Z",
    "oracle": {
      "compartmentid": "ocid1.compartment.oc1..compartment-id",
      "ingestedtime": "2025-06-10T12:41:46.604Z",
      "loggroupid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-group-id",
      "logid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-id",
      "tenantid": "ocid1.tenancy.oc1..tenant-id"
    },
    "source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
    "specversion": "1.0",
    "subject": "Oracle JMS Plugin",
    "type": "jms.drs.scan.log",
    "data": {
      "data": {
        "checksum": "405ca339f3e394a5cee7f618074f752a7c341bae2d9841155a23858d96d7696a",
        "fleetId": "ocid1.jmsfleet.oc1.eu-frankfurt-1.fleet-id",
        "managedInstanceId": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
        "osArch": "amd64",
        "osName": "Linux",
        "osVersion": "5.15.0-306.177.4.el9uek.x86_64"
      },
      "datacontenttype": "application/json",
      "dataschema": "1.0",
      "id": "117dffe5-defd-4d62-8d4c-b4b3b5ace029",
      "source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
      "specversion": "1.0",
      "time": "2025-06-10T12:41:46.601Z",
      "type": "jms.drs.scan.log"
    }
  },
  "regionId": "eu-frankfurt-1"
}

范例

假设您希望使用特定的 http/https 代理配置自动执行 Oracle JDK 21 安装。以下是使用 JMS 实现此自动化的实际示例。

首先,让我们检查一个简单的脚本,并在配置变量部分定义所需的参数。

#!/usr/bin/env bash
 
# configuration variables
JAVA_VERSION=21
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
PROXY_HOST=my-awesome-company-proxy
PROXY_PORT=8080
 
# check LCM configuration
FLEET_LCM_CONFIGURED=$(oci jms fleet-advanced-feature-configuration get --fleet-id $FLEET_OCID |  jq '.data.lcm."is-enabled"')
 
# enable LCM configuration if needed
if [ "$FLEET_LCM_CONFIGURED" == "false" ]; then
cat > lcm-proxy.json << EOF
{
  "isEnabled": true,
  "postInstallationActions": {
    "proxies": {
      "httpProxyHost": "$PROXY_HOST",
      "httpProxyPort": $PROXY_PORT,
      "httpsProxyHost": "$PROXY_HOST",
      "httpsProxyPort": $PROXY_PORT,
      "useSystemProxies": false
    }
  }
}
EOF
     
    echo Uploading new LCM configuration for fleet $FLEET_OCID
    cat lcm-proxy.json
 
    # upload the LCM configuration to JMS without confirmation
    oci jms fleet-advanced-feature-configuration update --force --lcm file://lcm-proxy.json --fleet-id $FLEET_OCID
 
    rm lcm-proxy.json
fi
 
# JDK installation payload
cat > jdk-install-payload.json << EOF
[
  {
    "artifactContentType": "JDK",
    "releaseVersion": "$JAVA_VERSION",
    "managedInstanceId": "$MANAGED_INSTANCE_OCID",
  }
]
EOF
 
# initiate installation on specified managed instance
WORK_REQUEST_OCID=$(oci jms installation-site-summary add \
        --fleet-id "$FLEET_OCID" \
        --installation-sites file://jdk-install-payload.json \
        --post-installation-actions '["SETUP_HTTP_PROXY","SETUP_HTTPS_PROXY"]' | jq -r '."opc-work-request-id"')
echo Installation work request OCID: $WORK_REQUEST_OCID
rm jdk-install-payload.json
 
# additionally you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status

在下一步中,我们执行上面的脚本并等待完成。安装工作请求完成后,我们可以验证新安装的 JDK 21 的代理配置是否已设置了所需的配置:

oci jms work-request-log-entry list-work-request-logs --work-request-id "$WORK_REQUEST_OCID" | jq -r '.data.items[].message'
{"artifactType":"JDK","code":"COMMAND_COMPLETED_WITHOUT_ERRORS","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{"attempt":1,"maximumAttempts":3},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"POST_INSTALL_ACTIONS_SUCCESS","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"POST_INSTALL_ACTIONS_EXECUTING","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"POST_INSTALL_ACTIONS_PRESENT","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"INSTALL_SUCCESS","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"COMMAND_RUNNING","jrePath":null,"jreVersion":"21","managedInstance":"jms-demo","metadata":{"attempt":1,"maximumAttempts":3},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"COMMAND_CREATED","jrePath":null,"jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
 
# verification on the managed instance:
[root@jms-demo ~]# egrep '^https?\.proxy' /usr/lib/jvm/jdk-21-oracle-x64/conf/net.properties
http.proxyHost=my-awesome-company-proxy
http.proxyPort=8080
https.proxyHost=my-awesome-company-proxy
https.proxyPort=8080