6 MicroTxを使用したWebLogic ServerとHelidon間のXAグローバル・トランザクションの統合
この章では、次の分散アプリケーションを例として使用して、MicroTxがXAトランザクションの一貫性を保証する方法について説明します。この例では、アプリケーションはKubernetesクラスタにデプロイされます。ただし、この例で説明するXAトランザクションの統合はKubernetesに依存せず、サポートされている任意のプラットフォームに実装できます。
- Helidon Tellerアプリケーション(トランザクション・イニシエータ)
- Helidonアプリケーション(参加側アプリケーション)
- WebLogic Server (参加側アプリケーション)
- MicroTxトランザクション・コーディネータ
次の図は、様々なアプリケーション間のXAトランザクションのフローと、トランザクションのコーディネータとしてのMicroTxの役割を示しています。ここで、XAトランザクションはHelidon Tellerアプリケーションによって開始され、他のHelidonおよびWebLogic Serverアプリケーション(トランザクションの参加側アプリケーション)に分散されます:
この章の内容は次のとおりです。
- 前提条件
この例では、アプリケーションがKubernetesで実行されており、WebLogic Server、WebLogic Kubernetes Operator (Operator)、HelidonおよびMicroTxが同じKubernetesクラスタにすでにデプロイされていることを前提としています。 - WebLogic ServerとHelidonおよびMicroTxのアプリケーションおよびサービスとの統合の設定
MicroTxを使用すると、複雑なコードを記述することなく、マイクロサービスおよびクラウド・ネイティブ・アプリケーション間で様々なデータ一貫性を保証できます。MicroTxでは、トランザクション・プロトコルを選択し、クライアント・ライブラリに含まれるAPIおよび注釈を使用することで、Kubernetesにデプロイされたアプリケーションで分散トランザクションを簡単に使用できるようになります。 - 一般的な問題のトラブルシューティング
MicroTxを使用したWebLogic ServerとHelidonの統合の設定時に発生する可能性がある一般的な問題について学習します。
前提条件
ノート:
MicroTxとのトランザクション統合は、WebLogic Server 14c (14.1.1.0)およびHelidon 2.xでのみサポートされます。これらのリリースの製品はJDK 11をサポートしているためです。MicroTxをKubernetesクラスタにデプロイするには、Oracle Container RegistryからMicroTxイメージを取得します。サンプル、クライアント・ライブラリおよびデプロイメント・スクリプトを取得するには、Transaction Manager for Microservices FreeからMicroTxバイナリをダウンロードします。
Transaction Manager for Microservices FreeからのMicroTxバイナリのダウンロード
- https://www.oracle.com/database/transaction-manager-for-microservices/に移動して、「MicroTxを無料でダウンロード」をクリックし、Oracle Transaction Manager for Microservices Freeのインストール・バンドル(.zipファイル)をダウンロードします。Oracle Software Delivery Cloudが表示されます。
- ZIPファイルは、Oracle Download Managerを使用するか、単にダウンロードするファイルをクリックしてダウンロードできます。
- ZIPファイルのコンテンツを、可能なかぎり新しいディレクトリに解凍します。
otmm-22.3.2
フォルダには、次のフォルダが含まれます:lib
: このフォルダには、MicroTxライブラリ・ファイルが含まれます。MicroTxを使用してアプリケーション・マイクロサービス間のトランザクションを管理するには、アプリケーション・コードでこれらのライブラリ・ファイルを使用する必要があります。otmm
: このフォルダには、MicroTxイメージおよびYAMLファイルが含まれ、これを使用してMicroTxをインストールおよび構成できます。このフォルダ内のイメージは、Oracle Container Registryで使用可能なイメージと同じです。Oracle Container RegistryからMicroTxイメージを使用することをお薦めします。ダウンロードするステップは、Oracle Container RegistryからのMicroTxイメージのダウンロードを参照してください。samples
: このフォルダには、様々なトランザクション・プロトコルのサンプル・アプリケーションのソース・コードが含まれています。サンプル・アプリケーションのソース・コードには、MicroTxライブラリも含まれています。ノート:
ビルドおよび統合の手順を理解するために、サンプル・ドキュメントを確認することをお薦めします。
Oracle Container RegistryからのMicroTxイメージのダウンロード
- Oracle Container Registryに移動します。
- 検索ボックスで、Oracle Transaction Managerを指定し、「検索結果」ページで
otmm
をクリックします。 - ページの「タグ」セクションで、MicroTxの使用可能なバージョンを表示できます。最新バージョンをダウンロードするには、次のコマンドを実行します:
docker pull container-registry.oracle.com/database/otmm:latest
特定のバージョン(バージョン22.3.2など)をダウンロードするには、次のコマンドを実行します:docker pull container-registry.oracle.com/database/otmm:22.3.2
また、前提条件の一部として次のタスクを実行します:
- WebLogic Server XAデータ・ソースまたは2フェーズ・コミットのエミュレート・データ・ソースを構成し、WebLogicクラスタにターゲット指定します。このデータ・ソースは、WebLogic JAX-RSベースのWebアプリケーション(MicroTxライブラリを含む)がデータベースに接続するために使用されます。
- JTAトランザクション・ログをJDBCストアとして構成します。『WebLogic永続ストアの管理』のJDBC TLogストアの使用に関する項を参照してください。
- WebLogic ServerとHelidonアプリケーション間の通信を有効にするには、次のことを確認します:
- MicroTxトランザクション・コーディネータ・サービス(TCS)が稼働している。
- Helidon Tellerアプリケーションが稼働している。
- WebLogic Serverが、MicroTx TCSおよびTellerサービスと通信できる。
- デフォルトでは、同じKubernetesクラスタの一部として構成されたすべてのリソースは、短縮名または完全修飾ドメイン名(FQDN)を使用して相互に通信します。なんらかの制限がある場合は、ネットワーク・ルールを追加して、MicroTx TCSの操作を有効にする必要があります。
- WebLogic Deploy Tooling (WDT)モデル: 「イメージ内のモデル」ドメイン・ホーム・パターンの場合、WDTモデル・ファイルを使用してデータ・ソースを構成できます。Model in Imageを参照してください。
- WebLogic Scripting Tool (WLST): 「永続ボリューム(PV)内のドメイン」ドメイン・ホーム・パターンの場合、WLSTを使用してデータ・ソースを構成できます。Domain Home on a PVを参照してください。
- WebLogic Server管理コンソール: 「永続ボリューム(PV)内のドメイン」ドメイン・ホーム・パターンの場合、管理コンソールを使用してデータ・ソースを構成できます。Domain Home on a PVを参照してください。
また、次を完了しておく必要があります:
MicroTxと連携するためのWebLogic Serverの準備
データ・ソースを含むWebLogic ServerとHelidonアプリケーション間のトランザクション調整を有効にするには、まず、データベースに接続するためにアプリケーションで使用されるデータ・ソースを作成してデプロイする必要があります。また、WebLogicクラスタ用にJTA TLog JDBCストアを構成する必要があります。
WebLogic Deploy Toolingを使用したJDBCデータ・ソースの作成
WDTを使用して、XAデータ・ソースおよび非XAデータ・ソースを作成します。WDTの詳細は、WebLogic Deploy Toolingを参照してください。
WebLogic Deploy Toolingを使用したXAデータ・ソースの作成
WDTを使用したXAデータ・ソースoraxads
の作成例:
resources:
JDBCSystemResource:
oraxads:
Target: cluster-1
JdbcResource:
DatasourceType: GENERIC
JDBCConnectionPoolParams:
TestFrequencySeconds: 600
InitialCapacity: 2
ConnectionReserveTimeoutSeconds: 10
TestConnectionsOnReserve: true
MaxCapacity: 30
TestTableName: SQL SELECT 1 FROM DUAL
MinCapacity: 3
JDBCDataSourceParams:
JNDIName: oraxads
GlobalTransactionsProtocol: TwoPhaseCommit
JDBCDriverParams:
DriverName: oracle.jdbc.xa.client.OracleXADataSource
PasswordEncrypted: '@@PROP:oraxads.password@@'
URL: jdbc:oracle:thin:@//@@PROP:oraxads.url@@
Properties:
user:
Value: '@@PROP:oraxads.user@@'
databaseName: {}
WebLogic Deploy Toolingを使用した非XAデータ・ソースの作成
WDTを使用した非XAデータ・ソースjtads
の作成例:
resources:
JDBCSystemResource:
jtads:
Target: cluster-1
JdbcResource:
DatasourceType: GENERIC
JDBCConnectionPoolParams:
TestFrequencySeconds: 600
InitialCapacity: 2
ConnectionReserveTimeoutSeconds: 10
TestConnectionsOnReserve: true
MaxCapacity: 30
TestTableName: SQL SELECT 1 FROM DUAL
MinCapacity: 3
JDBCDataSourceParams:
JNDIName: jtads
GlobalTransactionsProtocol: None
JDBCDriverParams:
DriverName: oracle.jdbc.OracleDriver
PasswordEncrypted: '@@PROP:jtads.password@@'
URL: jdbc:oracle:thin:@//@@PROP:jtads.url@@
Properties:
user:
Value: '@@PROP:jtads.user@@'
databaseName: {}
JDBCストアとしてのJTAトランザクション・ログの構成
JTAトランザクション・ログをJDBCストアとして構成する前に、トランザクション・ログ・ストアがトランザクションの記録に使用するデータ・ソースを作成していることを確認してください。WebLogic Deploy Toolingを使用したJDBCデータ・ソースの作成を参照してください。
次のいずれかの方法で、JTAトランザクション・ログをJDBCストアとして構成できます:
WebLogic Deploy Toolingを使用したJDBCストアとしてのJTAトランザクション・ログの構成
次のWDTスクリプトの例では、非XAデータ・ソースjtads
を使用して、JTAトランザクション・ログをJDBCストアとして構成します:
topology:
ServerTemplate:
server-template_1:
TransactionLogJDBCStore:
Enabled: true
DataSource: jtads
PrefixName: TLOG_${serverName}_
親トピック: JDBCストアとしてのJTAトランザクション・ログの構成
WebLogic Scripting Toolを使用したJDBCストアとしてのJTAトランザクション・ログの構成
次のWLSTスクリプトの例では、非XAデータ・ソースjtads
を使用して、JTAトランザクション・ログをJDBCストアとして構成します:
import sys,os,socket, traceback
adminUsername=sys.argv[1]
adminPassword=sys.argv[2]
adminT3URL=sys.argv[3]
connect(adminUsername,adminPassword,adminT3URL)
edit()
startEdit()
##Here SERVER_TEMPLATE_NAME refers to WebLogic dynamic-cluster Server Template Name
cd('/ServerTemplates/SERVER_TEMPLATE_NAME')
cd('/ServerTemplates/SERVER_TEMPLATE_NAME/TransactionLogJDBCStore/SERVER_TEMPLATE_NAME')
##Here jtads refers to datasource name used for Transaction Log JDBC Store
cmo.setDataSource(getMBean('/JDBCSystemResources/jtads'))
cmo.setEnabled(true)
cmo.setPrefixName('TLOG_${serverName}_')
save()
activate()
disconnect()
親トピック: JDBCストアとしてのJTAトランザクション・ログの構成
管理コンソールを使用したJDBCストアとしてのJTAトランザクション・ログの構成
親トピック: JDBCストアとしてのJTAトランザクション・ログの構成
MicroTx構成の変更
Kubernetesで実行する場合、MicroTxによって調整されるWebLogic ServerとHelidon間のトランザクション統合では、WebLogic Server、HelidonおよびMicroTxを同じKubernetesクラスタにデプロイし、すべてのKubernetesリソースおよびサービスを構成する必要があります。「WebLogic ServerとHelidonの統合のためのKubernetesクラスタの準備」を参照してください。
Kubernetesリソースは、異なるネームスペースの一部にすることができます。Kubernetesクラスタ内のすべてのネームスペースを操作するには、MicroTx TCSのPeerAuthentication
ポリシーを変更して、MicroTx TCSがすべてのネームスペースのサービスと通信できるようにする必要があります。
ネームスペース全体でのピア間の通信の許可
ピア認証は、Istioサービス・メッシュを使用したKubernetesクラスタでのサービス・ツー・サービス認証を提供します。詳細は、PeerAuthenticationを参照してください。
Oracle Transaction Manager for Microservices (OTMM)のPeerAuthentication
ポリシーのspec.mtls.mode
値を、<otmm>/helmcharts/tmm/templates/auth.yaml
ファイルでSTRICT
からPERMISSIVE
に変更します。PERMISSIVE
値は、Kubernetesクラスタ内のすべてのネームスペース間の通信を容易にします。
変更前のspec.mtls.mode
値:
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "peer-auth"
namespace: {{ .Values.applicationNameSpace }}
spec:
mtls:
mode: STRICT
変更後のspec.mtls.mode
値:
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "peer-auth"
namespace: {{ .Values.applicationNameSpace }}
spec:
mtls:
mode: PERMISSIVE
ピア認証の詳細は、PeerAuthenticationを参照してください。
親トピック: MicroTx構成の変更
ルーティング・ルールの作成
ルーティング・ルールは、WebLogic Server、WebLogic Server管理コンソール、アプリケーションおよびHelidonにアクセスするために作成されます。
Istio VirtualService
を作成して、WebLogicクラスタ、HelidonおよびTellerサービスのすべてのアプリケーションに適用されるトラフィック・ルーティング・ルールのセットを定義します。次のスクリプトの例を参照として使用できます:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: wls-domain-virtualservice
namespace: wls-domain-ns
spec:
gateways:
- otmm/otmm-gateway
hosts:
- '*'
http:
- match:
- uri:
prefix: /console
- uri:
prefix: /management
- port: 7001
route:
- destination:
host: wls-domain-admin-server
port:
number: 7001
- match:
- uri:
prefix: /mtxwls
- port: 8001
route:
- destination:
host: wls-domain-cluster-cluster-1
port:
number: 8001
- match:
- uri:
prefix: /mtxhelidon
- port: 8084
route:
- destination:
host: microtx-helidon.helidon-ns.svc.cluster.local
port:
number: 8084
- match:
- uri:
prefix: /mtxteller
- port: 8087
route:
- destination:
host: microtx-teller.helidon-ns.svc.cluster.local
port:
number: 8087
Istio仮想サービス仕様の詳細は、Istioゲートウェイを参照してください。
WebLogic ServerおよびMicroTxには、独自の管理コンソールがあります。デフォルトでは、MicroTxコンソールはサポートされていません。http(s)://LoadBalancer/console
を使用してWebLogic Server管理コンソールにアクセスすると、パスの衝突が発生します。この場合、次に示すように、<otmm>/helmcharts/tmm/templates/auth.yaml
ファイルにあるOracle Transaction Manager for Microservices (OTMM)認可ポリシー・ルールのnotpaths
値を変更する必要があります。ただし、パスを書き換えることで、異なるURLを使用することもできます。
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
name: "frontend-ingress"
namespace: {{ .Values.istioSystemNameSpace }}
spec:
selector:
matchLabels:
istio: {{ .Values.istioIngressGateway.name }}
action: {{ .Values.authentication.requestsWithNoJWT }}
rules:
- from:
- source:
notRequestPrincipals: ["*"]
to:
- operation:
###########notPaths Value before change ["/console*"]######################
notPaths: ["/mtxconsole*"]
親トピック: MicroTx構成の変更
WebLogic ServerとHelidonおよびMicroTxのアプリケーションおよびサービスとの統合の設定
MicroTxとWebLogic Serverの統合の一環として、MicroTxはWebLogic Server介在トランザクション・マネージャ(ITM)を使用して、WebLogic Serverとのトランザクションを調整します。
WebLogic ServerドメインにデプロイされたJDBCリソース(javax.transaction.xa.XAResource
として)がトランザクションに参加できるようにするには、MicroTxがITMを使用してWebLogic Serverとインタフェースする必要があります。WebLogic Server ITMは、weblogic.transaction.InterposedTransactionManager
インタフェースを通じて、javax.transaction.xa.XAResource
実装を公開します。MicroTxトランザクション・マネージャは、InterposedTransactionManager
インタフェースにアクセスして、コミット処理時にWebLogic Serverトランザクション・マネージャのXAResource
と調整します。『Oracle WebLogic Server JTAアプリケーションの開発』のサード・パーティ・トランザクション・マネージャで管理されるトランザクションへの参加に関する項を参照してください。
MicroTxバイナリをMicroTxダウンロード・ページからダウンロードし(前提条件を参照)、次のタスクを実行して、WebLogic Server、HelidonおよびMicroTxのアプリケーションおよびサービス間の統合を有効にします:
WebLogic ServerドメインでのMicroTxアプリケーションWARファイルのビルドおよびデプロイ
WebLogic ServerのアプリケーションWAR (Webアプリケーション・リソースまたはWebアプリケーション・アーカイブ)ファイルをビルドし、そのファイルをWebLogicクラスタまたは管理対象サーバー・リソースにターゲット指定するには:
ノート:
独自のJAX-RSアプリケーションを操作する場合は、次のpom
依存関係およびjavax.ws.rs.core.Application
サブクラスをJAX-RSアプリケーションに追加してください。ただし、アプリケーションでWebLogicデータ・ソース接続を使用する必要があります。
次に示すこの依存関係は、ローカルMavenリポジトリから参照されます。したがって、プロジェクトをパッケージ化する前に、このアーティファクトリをローカルMavenリポジトリに追加する必要があります。
<dependency>
<groupId>com.oracle.tmm.jta</groupId>
<artifactId>TmmLib</artifactId>
<version>22.3.2</version>
</dependency>
また、javax.ws.rs.core.Application
サブクラスを追加して、@Provider
および@Path
の注釈が付いたすべてのリソース・クラスをスキャンします。このサブクラスは、MicroTxフィルタ・クラス、コールバック・リソースおよび接続ファクトリ・クラスを登録するために必要です。
javax.ws.rs.core.Application
サブクラス・メソッド'getClasses()
'または'getSingletons()
'は、関連するJAX-RSリソースおよびプロバイダを返します。getClasses()
メソッドとgetSingletons()
メソッドの両方で空のセットが返される場合、アプリケーションで見つかったすべてのJAX-RSリソースおよびプロバイダ・クラスがJAX-RSアプリケーション・サブクラスに追加されます。
package com.oracle.mtm.sample;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class WebLogicWebApp extends Application {
}
WebLogic Deploy Toolingを使用したWebLogicクラスタへのWebアプリケーションのデプロイ
次のスクリプト例は、WDTを使用してWebLogicクラスタにWebLogic Server JAX-RS WebアプリケーションWARファイルをデプロイするために使用します:
appDeployments:
Application:
mtxwwls :
SourcePath: wlsdeploy/applications/mtxwls.war
Target: cluster-1
ModuleType: war
MicroTxコーディネータ・サービスのデプロイ
MicroTxコーディネータ・サービスをデプロイする前に、Istioサービス・メッシュをKubernetesクラスタにデプロイしたことを確認します。
MicroTxコーディネータ・サービスをデプロイするには:
values.yaml
ファイルのいくつかのサンプル:
-
ファイルの
tmmImage
セクションの構成値のサンプル(ローカル・コンテナ・レジストリからイメージを格納および参照するのではなく、Oracle Container RegistryからtmmImage
イメージを参照できます):tmmImage: image: <Image_Registry>/tmm:22.3.x imagePullPolicy: Always imagePullSecret: regcred
-
ファイルの
tmmConfiguration
セクションにあるtmmExternalURL
、xaCoordinator
およびstorage.type
プロパティの構成値のサンプル:tmmConfiguration: tmmId: "TCS01" tmmAppName: otmm-tcs port: 9000 tmmExternalURL: protocol: http host: x.x.x.x port: 80 xaCoordinator: enabled: "true" txMaxTimeout: 600000 lraCoordinator: enabled: "false" tccCoordinator: enabled: "false" storage: type: db db: connectionString: "tcps://<ORACLE_DB_HOST>:<ORACLE_DB_PORT>/<ORACLE_DB_SERVICE>?retry_count=20&retry_delay=3" credentialSecretName: "walletsecret" connectionParams: "" walletConfigMap: configMapName: "db-wallet-cmap" completedTransactionTTL: 60 # Sample configuration values for Retry settings #The maximum number of times the TMM (Transaction Coordinator) will retry an operation in case of certain failures maxRetryCount: 10 #The minimum retry interval in milliseconds minRetryInterval: 1000 #The maximum retry interval in milliseconds maxRetryInterval: 10000 # Coordinator HTTP client timeout value in seconds. A Timeout of zero means no timeout. Max allowed value is 900 seconds httpClientTimeoutInSecs: 180
ノート:
デフォルトでは、OTMMコーディネータ・サービスのhttpClientTimeoutInSecs
値は180秒に設定されます。このタイムアウトは、OTMMコーディネータ・サービスがトランザクション参加側と通信してトランザクションを完了するときに考慮されます。この値は、values.yaml
の他の再試行設定パラメータとともに使用されます。
一般的な問題のトラブルシューティング
MicroTxを使用したWebLogic ServerとHelidonの統合の設定時に発生する可能性がある一般的な問題について学習します。
問題1
Helidonアプリケーションでは、JAX-RS実装によって提供されるjavax.ws.rs.core.Application
クラスを拡張することでアプリケーション・コンテキスト・パスが定義されると、XA接続が失敗し、エラーが報告されます。エラー・メッセージのサンプルを次に示します:
2023.03.17 11:39:16 WARNING io.helidon.microprofile.server.JaxRsCdiExtension !thread!: Internal server error java.lang.NullPointerException at oracle.tmm.jta.common.TrmConnectionFactory.getXAConn(TrmConnectionFactory.java:47) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcc essorImpl.java:62) . . . .
次のサンプル・コードは、報告される例外を示しています(javax.ws.rs.core.Application
を拡張してHelidonアプリケーション/コンテキスト・パスを作成した後):
package com.oracle.mtm.sample.resource;
import java.util.Set;
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
//Adding Application Context path by extending javax.ws.rs.core.Application
@ApplicationScoped
@ApplicationPath("/helidonapp")
public class HelidonApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return Set.of(AccountsResource.class);
}
}
解決策:
次に示すように、org.glassfish.jersey.server.ResourceConfig
を拡張してアプリケーション/コンテキスト・パスを作成します:
package com.oracle.mtm.sample.resource;
import java.util.Set;
import javax.enterprise.context.ApplicationScoped;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;
//Adding Application Context path by extending org.glassfish.jersey.server.ResourceConfig
@ApplicationPath("/helidonapp")
public class HelidonApplication extends ResourceConfig {
}
問題2
Helidon Tellerアプリケーションがトランザクション制限エラーを報告します。エラー・メッセージのサンプルを次に示します:
2023.04.10 06:03:05 INFO TMMLibDefaultLogger !thread!: begin response from TCS: transaction limit error. Reached total allowed transactions count of 4800. Please try after one hour ---429 2023.04.10 06:03:05 WARNING io.helidon.microprofile.server.JaxRsCdiExtension !thread!: Internal server error javax.transaction.SystemException: transaction limit error. Reached total allowed transactions count of 4800. Please try after one hour at oracle.tmm.jta.TrmUserTransaction.begin(TrmUserTransaction.java:183) at oracle.tmm.jta.TrmUserTransaction.begin(TrmUserTransaction.java:124) at oracle.tmm.jta.transactional.TrmTransactionalRequired.intercept(TrmTransactionalRequired.java:51) . . . . . . . .
解決策:
MicroTx Freeリリース22.3.1以前には、1時間当たりに許可されるトランザクション数に制限があります。この制限を削除するには、MicroTx Free 22.3.2以降を使用します。
問題3
データベースで正しい権限が付与されていない場合、トランザクションをリカバリしようとすると、HelidonおよびWebLogic Serverはエラー(XAER_RMERR
エラー)を報告します。エラー・メッセージのサンプルを次に示します:
2023.05.02 11:47:09 SEVERE TMMLibDefaultLogger !thread!: RMID : <RMID> XA Exception: XAErr: -3 XAErrString: XAER_RMERR javax.transaction.xa.XAException at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:754) at oracle.tmm.jta.common.TrmXAResource.xaop(TrmXAResource.java:225) . . . .
解決策:
HelidonおよびWebLogicデータベース・ユーザーに次のデータベース権限を指定します:
GRANT SELECT ON sys.dba_pending_transactions TO <DB_USERNAME>;
GRANT SELECT ON sys.dba_2pc_pending TO <DB_USERNAME>;
GRANT EXECUTE ON sys.dbms_xa TO <DB_USERNAME>;
GRANT FORCE ANY TRANSACTION TO <DB_USERNAME>;