※ 本記事は、Stephen Feltsによる”WebLogic Server Use of Oracle JDBC Driver Extensions“を翻訳したものです。

2024年7月12日


概要

バージョン23.4以降、Oracle JDBCドライバはJava Service Provider Interface (SPI)を介して拡張できます。このSPIでは、外部ソースからのURL、ユーザー、パスワードおよびJDBCパラメータを指定できます。オープン・ソース・プロジェクトには「Oracle JDBC Driver Extensions」用のオープン・ソース・プロジェクトがあり、SPIを使用して外部ボールトからパラメータを読み取る、すでに記述されているプロバイダがいくつか用意されています。このブログ記事で説明しています。現在、OCI vault、Azure vaultおよびOpen Telemetryのプロバイダがあります。

vaultを使用することで、セキュリティ上の理由からローカル・スキーマ・ファイルから資格証明情報を削除できるだけでなく、また、データベースを使用するすべてのアプリケーションについて、情報を単一の場所に格納することもできます。一部のアプリケーションでは数百ものデータソースが使用されるため、これは大きな利点となります。また、アプリケーションを変更せずにデータベース情報を更新できる場所も一元化します。

ここでは、データベースを稼働させ、OCIで設定し、この機能をWebLogic Serverで使用するための多くのステップがあります。このブログは、他のリンクへの参照とともに、すべてのステップを1箇所で取得しようとします。

バージョン・サポート

ドライバーのバージョン

23.3 Oracle JDBCドライバおよび1.0.0 JDBC Extensionsは開発者リリースであり、本番環境では使用しないでください。この組合せはサポートされていません(パッチは提供されません)。23.3から23.4の間には、互換性に関する大きな変更があります。URLは”jdbc:oracle:thin:@config-ocivault:”から”jdbc:oracle:thin:@config-ocivault://”に変更され、この機能を使用するすべてのデータソース定義に影響します。

Oracle JDBC Driver Extensionsを使用する最初の本番リリースは、23.4ドライバおよび1.0.1 extensionsです。WebLogic Serverで23.xドライバを使用するためのアップグレードの詳細は、「23.x JDBCドライバを使用するようにWebLogic Serverをアップグレード」を参照してください。extensionファイルは、https://github.com/oracle/ojdbc-extensions/releases/tag/v1.0.1 にあります。

Jersey/WebLogic Serverのバージョン

OCI SDKでは、Jersey RESTful Web Services 2.x Frameworkを使用する必要があります。テストでは、Jerseyの最も古いバージョンが2.29であることがわかりました(org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProviderの導入による)。WLS 14.1.1にはJersey 2.29が付属しており、この機能はWLS 14.1.1で動作します。

残念ながら、WLS 12.2.1.4.0にはJerseyバージョン2.22が付属しており、この機能はWLS 12.2.1.4.0以前では機能しません。

OCIでの開始

OCI vaultの使用を開始するには、OCIの使用を開始する必要があります。まず、https://www.oracle.com/cloud/sign-in.html でOCIアカウントを取得します。国/地域、名、姓およびEメール・アドレスを指定し、Eメール・アドレスを確認します。「企業/個人」(作業関連アカウントの場合は「企業」を選択)を選択し、「ホーム・リージョン」(ネットワーク遅延が少なくなるように、最も近いリージョンを選択)を選択する必要があります。基準を満たすパスワードを設定する必要があります。また、Oracle Authenticatorを使用して2FAを設定する必要があります。

アカウントにアクセスしたら、クライアント・マシンにアクセスするための構成を設定する必要があります。まず、OCIコマンドライン・インタフェース(CLI)をインストールします。https://docs.oracle.com/iaas/Content/API/SDKDocs/cliinstall.htm を参照してください。たとえば、OL7では、次を使用します。

sudo yum install python36-oci-cli

そしてOL8では

sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli

構成ファイルを作成するには、次を実行します

oci setup config

ファイル名には、デフォルト値 ~/.oci/config を使用します。ユーザーOCIDを取得するには、OCIダッシュボードに移動し、左上隅の「Profile」をクリックし、「My Profile」を選択してOCIDをコピーします。テナンシOCIDを取得するには、「Profile」をクリックし、「Tenancy」を選択してOCIDをコピーします。アカウントに関連付けられているリージョンを選択します(リージョンおよび関連する番号のリストがあります)。新しい公開鍵と秘密鍵のペアを作成します。構成ファイルを作成するためにはこれで十分です。追加のステップの1つは、公開キーのアップロードです。https://docs.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm#How2 を参照してください(「My Profile」に移動し、左側の「API Keys」を選択し、「Add API key」を選択し、「Paste a public key」を選択して、cat ~/.oci/oci_api_key_public.pem を実行して公開キーの値を取得します)。

OJDBC Extensionの使用方法

OJDBC Extension機能は、URL文字列、ユーザー名、暗号化されたパスワード、およびオプションでJDBCパラメータをOCI vault内のOCIシークレットに格納します。既存のデータベースを使用するか、新しいOCIデータベースを作成できます。クラウド・データベースの作成の詳細は、「Autonomous Transaction Processing (ATP)データベースの作成」および「WebLogic ServerでのJSON ATPデータベースの使用」を参照してください。これらのブログ記事では、データベースの作成方法だけでなく、データベースの使用方法についても説明しますが、vaultの使用に関する重要な情報は 1) データベースの作成 2) SQLを使用してパスワードを持つユーザーを作成し、CREATE SESSION権限を最小限に付与、そして、3) URLを取得します(「Database Connection」をクリックし、<databasename>_tp TNS名を検索して、「Copy」をクリックします)。シークレットを作成するにはURLが必要です(シークレットを作成する機械化された方法がないようです)。ウォレットとTNS_ADMINをローカル・クライアントに設定する必要はありません(ウォレットをシークレットに格納するためだけにウォレットを作成する必要があります)。

次のステップでは、vaultを作成します。OCIダッシュボードの左上隅からメニューを選択し、「Identity & Security」を選択して「Vault」を選択します。「Create Vault」を選択し、名前を入力して「Create Vault」を選択します。vault名をクリックしてvaultを入力します。「Create Key」を選択し、名前を入力して「Create Key」をクリックし、マスター暗号化キーを作成します。

次のステップでは、ユーザー・パスワードのシークレットを作成します。左マージンの「Secrets」をクリックします。「Create Secret」をクリックし、名前を指定して「Manual Secret Generation」をクリックし、二重引用符で囲まれたパスワードをテキスト・ボックスに貼り付け、「Create Secret」をクリックします。シークレットの名前をクリックし、OCIDの「Copy」をクリックします。

ファイル・システム上のウォレットおよびデータ・ソースを参照するすべてのコンピュータに設定されるTNS_ADMINが不要な場合は、ウォレットもシークレットに格納する必要があります。まず、ウォレットを作成してダウンロードし(このステップの後で破棄できます)、解凍します。次に、実行してウォレットのbase-64文字列を取得します

base64 cwallet.sso > output

出力を編集して、空白のない単一の文字列にします。次に、「Secrets」、「Create Secret」をクリックしてこの文字列でシークレットを作成し、名前を指定して「Manual Secret Generation」をクリックします。シークレット・タイプ・テンプレートをBase64に変更することが重要です。次に、cwallet.ssoからのbase64出力をテキスト・ボックスに貼り付けます。「Create Secret」をクリックし、シークレットの名前をクリックして、次のステップのOCIDを保存します。

これで、ドライバによって参照されるシークレットを作成できます。左マージンの「Secrets」をクリックします。「Create Secret」をクリックして名前を付け、「Manual Secret Generation」をクリックします。テキストを手動で作成する必要があり、おそらくOCIコンソールの外部で実行する必要があります。形式については、https://docs.oracle.com/en/database/oracle/oracle-database/23/jajdb/oracle/jdbc/spi/OracleConfigurationProvider.html を参照してください。

次に例を示します。ホスト名およびサービス名は、データソースから保存したTNS名から取得されます。ユーザー名は、データベースで作成したユーザーです。パスワードのシークレットおよびwallet_locationは、前述のvaultで作成されました。明らかに、私たちは二つの秘密を指摘する秘密を持っています。

{
“connect_descriptor”: “(description=(retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ca-toronto-1.oraclecloud.com))(connect_data=(service_name=myvalue_demoatp_tp.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))”,
“user”: “DEMO1”,
“password”: {
   “type”: “ocivault”,
   “value”: “ocid1.vaultsecret.oc1.ca-toronto-1.myvaluedngsnoaajxsjica4vqggkcq2f4jxpillfc6nv3x55fs7btedglka”
},
“wallet_location”: {
    “type”: “ocivault”,
    “value”: “ocid1.vaultsecret.oc1.ca-toronto-1.myvaluedngsnoaaftfj2ll37ex67wru3wqhqsv2q6x2x67epegzl2gvkm6a”
},

“jdbc”: {
   “oracle.jdbc.ReadTimeout”: 1006,
   “defaultRowPrefetch”: 20
}
}

Json文字列を手動シークレットの「Secret Contents」テキスト・ボックスに貼り付け、「Create Secret」をクリックします。作成したシークレットの名前をクリックし、OCIDの横にある「Copy」をクリックします。シークレットのOCIDを使用してform: jdbc:oracle:thin:@config-ocivault://OCID-FOR-SECRET のURLを生成します。たとえば、

jdbc:oracle:thin:@config-ocivault://ocid1.vaultsecret.oc1.ca-toronto-1.myvaluengsnoaabnyfwwxnmz67flenjpy26ikuylyui45n6p3xfx76h3dq

なんらかの理由でシークレット値を変更する必要がある場合は、シークレットの名前をクリックし、「Create Secret Version」をクリックして新しいバージョンを作成し、テキストを入力して「Create Secret Version」をクリックする必要があります。新しいシークレット・バージョンを作成する場合、OCIDは変更されないため、OCIDが使用される場所ではOCIDを更新する必要はありません。

WebLogicデータソース構成

これで、URLを使用してデータソースを作成する準備ができました。

JDBCシステム・モジュールは、config/jdbc の下にJDBC*.xmlファイルとして存在し、config/config.xml に構成され、サーバーの起動時にデプロイされます。これは顧客が使用する最も一般的なアプローチであり、WebLogicコンソールにはスキーマの生成に役立つ詳細なウィザードがあります。JDBCシステム・モジュールは、“system” (ドメイン内のすべてのアプリケーション)で使用できます。

これは、JDBCシステム・モジュールを作成するためのオンラインWLSTスクリプトです。

$ cat online.py
connect(“weblogic”,”welcome1″)
edit()
dsname=”ds0″
server=”myserver”
cd(“Servers/”+server)
target=cmo
cd(“../..”)

startEdit()
jdbcSR = create(dsname,”JDBCSystemResource”)
theJDBCResource = jdbcSR.getJDBCResource()
theJDBCResource.setName(dsname)
theJDBCResource.setDatasourceType(“GENERIC”)
connectionPoolParams = theJDBCResource.getJDBCConnectionPoolParams()
connectionPoolParams.setStatementCacheSize(0)
connectionPoolParams.setTestTableName(“SQL ISVALID”)
dsParams = theJDBCResource.getJDBCDataSourceParams()
dsParams.addJNDIName(dsname)
dsParams.setGlobalTransactionsProtocol(“OnePhaseCommit”)
driverParams = theJDBCResource.getJDBCDriverParams()
driverParams.setUrl(“jdbc:oracle:thin:@config-ocivault://ocid1.vaultsecret.oc1.ca-toronto-1.myvaluengsnoaap6niso6s5mcjv45ekgwxc3vkgpku6nh3j3qegqdcldha”)
driverParams.setDriverName(“oracle.jdbc.replay.OracleDataSourceImpl”)
driverProperties = driverParams.getProperties()
proper = driverProperties.createProperty(“oracle.jdbc.fanEnabled”)
proper.setValue(“false”)
jdbcSR.addTarget(target)
save()
activate(block=”true”)

java weblogic.WLST online.py

これは、RESTを使用して作成することもできます。例については、「WebLogic ServerでのATPデータベースの使用」を参照してください。

JDBCシステム・モジュールは次のようになります。通常のシステム・モジュールとの違いは、実際のデータベースURLがOCIシークレットを指すようにconfig-ocivaultのURL形式に置き換えられ、ユーザーやパスワードが指定されていないことです。これが管理コンソールで作成される場合、新しいURL形式がわからないため、要求された情報(ホスト、ポート、ユーザーおよびパスワードは空白のまま)を指定してから、作成プロセスの後の画面に新しいURL形式に貼り付ける必要があります。

<?xml version=’1.0′ encoding=’UTF-8′?>

<jdbc-data-source xmlns=http://xmlns.oracle.com/weblogic/jdbc-data-source xmlns:sec=http://xmlns.oracle.com/weblogic/security xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:wls=http://xmlns.oracle.com/weblogic/security/wls xsi:schemaLocation=http://xmlns.oracle.com/weblogic/jdbc-data-source http://xmlns.oracle.com/weblogic/jdbc-data-source/1.5/jdbc-data-source.xsd>

  <name>ds0</name>
  <datasource-type>GENERIC</datasource-type>
  <jdbc-driver-params>
    <url>jdbc:oracle:thin:@config-ocivault://ocid1.vaultsecret.oc1.ca-toronto-1.myvaluedngsnoaap6niso6s5mcjv45ekgwxc3vkgpku6nh3j3qegqdcldha</url>
    <driver-name>oracle.jdbc.replay.OracleDataSourceImpl</driver-name>
    <properties>
    <property>
      <name>oracle.jdbc.fanEnabled</name>
      <value>false</value>
    </property>
    </properties>
  </jdbc-driver-params>
  <jdbc-connection-pool-params>
    <test-table-name>SQL ISVALID</test-table-name>
    <statement-cache-size>0</statement-cache-size>
  </jdbc-connection-pool-params>
  <jdbc-data-source-params>
    <jndi-name>ds0</jndi-name>
    <global-transactions-protocol>OnePhaseCommit</global-transactions-protocol>
  </jdbc-data-source-params>

</jdbc-data-source>

The datasource descriptor is referenced in config/config.xml as follows:
  <jdbc-system-resource>
    <name>ds0</name>
    <target>myserver</target>
    <descriptor-file-name>jdbc/ds0-jdbc.xml</descriptor-file-name>
  </jdbc-system-resource>

This datasource can be used in any application code with the following.

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

private DataSource ds = null;

    try {
      InitialContext ic = new InitialContext();
      this.ds = (DataSource)ic.lookup(“ds0”); // name from schema
    } catch (NamingException e) {
      e.printStackTrace();
    }

 

JDBCアプリケーション・モジュールは、Java EEアプリケーション内に”.war”ファイル内のweb.xmlスキーマまたは”.ear”ファイル内のapplication.xmlスキーマに存在し、サーバーの実行後にデプロイされます。データソースは、そのデータソースが定義されているアプリケーションにスコープ指定されます。次に、前述のデータソースに対応するweb.xmlの例を示します。Java EE標準属性と、すべてのWebLogic JDBCデータソースを完全にサポートできるように、”weblogic.”で始まるWebLogic固有の属性があります。このスキーマを生成するためのWebLogicコンソール・サポートはありません(お気に入りのXMLエディタを使用します)。

<web-app xmlns=http://java.sun.com/xml/ns/javaee
  xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
  xsi:schemaLocation=http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd
  version=”3.0″>
<data-source>
    <name>java:/comp/env/datasources/ocivault</name>
    <class-name>oracle.jdbc.replay.OracleDataSourceImpl</class-name>
    <url>jdbc:oracle:thin:@config-ocivault://ocid1.vaultsecret.oc1.ca-toronto-1.myvaluedngsnoaap6niso6s5mcjv45ekgwxc3vkgpku6nh3j3qegqdcldha</url>
<property><name>oracle.jdbc.fanEnabled</name><value>false</value></property>
    <property><name>weblogic.TestConnectionsOnReserve</name><value>true</value></property>
<property><name>weblogic.DatasourceType</name><value>GENERIC</value></property>
<property><name>weblogic.TestTableName</name><value>SQL ISVALID</value></property>
<property><name>weblogic.Scope</name><value>Global</value></property>
<property><name>weblogic.GlobalTransactionsProtocol</name><value>OnePhaseCommit</value></property>
<property><name>weblogic.FanEnabled</name><value>false</value></property>
  </data-source>

</web-app>

このデータソースは、次のコードを持つサーブレット(データソースは.warファイル内のアプリケーションにスコープ指定されます)で使用できます:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oracle.jdbc.pool.OracleDataSource;

@WebServlet({“/SampleOCIVault”})
public class Servlet extends HttpServlet {
  private DataSource ds = null;
  public void init() throws ServletException {
    try {
      InitialContext ic = new InitialContext();
      this.ds = (DataSource)ic.lookup(“java:comp/env/datasources/ocivault”);
    } catch (NamingException e) {
      e.printStackTrace();
    }
 }

protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
    try {
      Connection conn = this.ds.getConnection();
      try {
        Statement st = conn.createStatement();
        try {
          PrintWriter pw = response.getWriter();
          ResultSet rs = st.executeQuery(“select * from dual”);
          if (rs.next())
            pw.println(“select ok -> ” + rs.getString(1));
          pw.println(“Served from servlet: ” + request.getContextPath() + “/SampleOCIVault”);

          if (st != null)
            st.close();
        } catch (Throwable throwable) {
          if (st != null)
            try {
              st.close();
            } catch (Throwable throwable1) {
              throwable.addSuppressed(throwable1);
            }
          throw throwable;
        }
        if (conn != null)
          conn.close();
      } catch (Throwable throwable) {
              throwable.addSuppressed(throwable1);
       }
       throw throwable;
        }
        if (conn != null)
          conn.close();
      } catch (Throwable throwable) {
        if (conn != null)
          try {
            conn.close();
          } catch (Throwable throwable1) {
            throwable.addSuppressed(throwable1);
          }
        throw throwable;
      }
    } catch (SQLException e) {
      e.printStackTrace();
      response.sendError(888, e.getMessage());
    }
  }

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
  }
}

サーブレットはコンパイルされ、WEB-INF/classes/Servlet.classのwarファイルに格納され、ディスクリプタはWEB-INF/web.xmlに格納されます。テスト用に、warファイルをドメインの下のautodeployサブディレクトリにコピーできます。

OCI SDKおよびOJDBC Extensionsのランタイム

すべてのピースの準備ができたので、ランタイムをアセンブルする必要があります。

ベースは、OCI SDKの使用です。テストは、OCI SDKのバージョン3.41.2で行われました。これらはjarファイルです(Maven Centralから取得します(例: https://repo1.maven.org/maven2/):


com/oracle/oci/sdk/oci-java-sdk-common-httpclient-jersey/3.41.2/oci-java-sdk-common-httpclient-jersey-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-circuitbreaker/3.41.2/oci-java-sdk-circuitbreaker-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-common/3.41.2/oci-java-sdk-common-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-common-httpclient/3.41.2/oci-java-sdk-common-httpclient-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-common-httpclient-jersey/3.41.2/oci-java-sdk-common-httpclient-jersey-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-database/3.41.2/oci-java-sdk-database-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-databasetools/3.41.2/oci-java-sdk-databasetools-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-identitydataplane/3.41.2/oci-java-sdk-identitydataplane-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-objectstorage/3.41.2/oci-java-sdk-objectstorage-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-objectstorage-extensions/3.41.2/oci-java-sdk-objectstorage-extensions-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-objectstorage-generated/3.41.2/oci-java-sdk-objectstorage-generated-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-secrets/3.41.2/oci-java-sdk-secrets-3.41.2.jar
com/oracle/oci/sdk/oci-java-sdk-workrequests/3.41.2/oci-java-sdk-workrequests-3.41.2.jar

これらのjarファイルには多くの依存関係があり、そのほとんどはWLSによってすでに提供されているjarファイル(Jersey、Jackson、asmなど)と重複しています。次のjarファイルはWLS classpathにありません:

io/github/resilience4j/resilience4j-circuitbreaker/1.7.1/resilience4j-circuitbreaker-1.7.1.jar
io/github/resilience4j/resilience4j-core/1.7.1/resilience4j-core-1.7.1.jar
org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar
org/slf4j/slf4j-simple/1.7.36/slf4j-simple-1.7.36.jar
io/vavr/vavr-match/0.10.2/vavr-match-0.10.2.jar
io/vavr/vavr /0.10.2/vavr-0.10.2.jar
org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar
org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar
com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.1/jackson-datatype-jsr310-2.17.1.jar
com/fasterxml/jackson/core/jackson-core/2.17.1/jackson-core-2.17.1.jar

次の2つのojdbcプロバイダjarファイルが必要です:

https://github.com/oracle/ojdbc-extensions/releases/download/v1.0.1/ojdbc-provider-common-1.0.1.jar
https://github.com/oracle/ojdbc-extensions/releases/download/v1.0.1/ojdbc-provider-oci-1.0.1.jar

最後に、Oracleドライバjarファイルの23.4バージョンを使用する必要があります。WLS 14.1.1.0.0で23.xバージョンを使用するため、「23.x JDBCドライバを使用するようにWebLogic Serverをアップグレード」を参照してください。

これらのjarファイルをすべてWLS CLASSPATHに追加する必要があります。23.x JDBCドライバのjarファイルは、CLASSPATHの前面にある必要があります。テストに’java weblogic.Server’を使用する場合は、CLASSPATHのみを更新できます。startWebLogic.shを使用する場合、標準のアプローチはPRE_CLASSPATHを更新することです。

前述の依存jarがサブディレクトリjarsにあり、ucp/ojdbc jarファイルが現在のディレクトリにあると仮定すると、このスクリプトはjarファイルをCLASSPATHに追加します。

@ cat setcp.sh
#v=8
v=11
CP=”`pwd`/ojdbc${v}.jar:`pwd`/ucp${v}.jar”
for i in `ls jars/*.jar`
do
  CP=”$CP:`pwd`/$i”
done
echo “CP=$CP”
echo ‘Add $CP to CLASSPATH’

. ./setcp.sh
export CLASSPATH=”$CP:$CLASSPATH”
export PRE_CLASSPATH=”$CP”

もちろん、あなたはこれを成し遂げるためにあなたのお気に入りのツールを利用しているかもしれません: ant、gradle、mavenなど。

Known Bugs

WLSの既知の問題が1つあります。   Bug 36514531 – JDBC EXTENSION: JAVA.LANG.ASSERTIONERROR: REMAINING NAME: DEFAULTMANAGEDEXECUTORSERVICE  .  この修正は、WebLogic Server 14.1.1.0.0で使用できます in 36528799 – BLR BACKPORT OF BUG 36514531 ON TOP OF 14.1.1.0.0.  この修正は、July 2024 PSU for WLS 14.1.1.0.0 に含まれるはずです。

既知のUCPの問題があります。 Bug 36680139 – JDBC DRIVER EXTENSIONS: NPE IS REPORTED WITH UCP XA CONNECTIONS.  これは、XAドライバを使用するUCPデータソース・タイプでのみ発生します。