JTAを実装するためにAtomikosと組み合わせたTomcatについて

JTAを実装するためにAtomikosと組み合わせたTomcatについて

最近、プロジェクトは環境を切り替え、WebLogic を Tomcat に置き換えました。途中で発生した問題を記録しました。
Tomcat で JTA を実装するための Atomikos の設定
古典的な Web サーバーとして、Tomcat は開発、テスト、および運用環境で広く使用されています。しかし、Tomcat は結局のところ Java EE サーバーではないため、EJB と JTA のサポートは提供されません。この記事では、Tomcat が Atomikos を使用して JTA を実装する方法について説明します。

 Tomcat で JTA を使用すると、Tomcat に Atomikos をデプロイし、Tomcat でサポートされているデータ ソースを使用できます。また、プロジェクト内で構成し、Spring を使用してデータ ソース、接続プール、トランザクション マネージャーなどを構成することもできます。 2 つの方法にはそれぞれ特徴があります。この記事では、Tomcat と Atomikos の統合についてのみ紹介します。統合後、Tomcat は JTA トランザクション マネージャーとデータ ソースを外部に提供できます。

         Atomikos を使用する前は JOTM も使用していましたが、同時実行性の高い状況では JOTM が頻繁に失敗し、使用を断念せざるを得ませんでした。テストを通じて、Atomikos は優れたパフォーマンスと安定性を備えていることがわかりました。

         Atomikos の最新バージョン 4.04 を使用しました。Jar パッケージは Maven 構成ライブラリから取得できます。リンク アドレスは次のとおりです: http://mvnrepository.com/artifact/com.atomikos

Hibernate を使用しない場合、必要なパッケージは次のとおりです。

atomikos-util.jar、
jta.jar、
トランザクション.jar、
トランザクションAPI.jar、
トランザクション-jdbc.jar、
トランザクション-jta.jar

統合パッケージ:
アトミコス統合拡張機能 3.7.2.jar

データベースドライバを忘れずに

ステップ 1: これらの jar を Tomcat の lib ディレクトリにコピーします。 TomcatをAtomikosと統合するには、統合パッケージも必要です。この統合パッケージには2つのクラスが含まれています。実装を自分で参照するか、公式のjarパッケージを使用できます。最新のものは次のとおりです。

アトミコス統合拡張機能 3.7.2.jar

ステップ2: tomcat/config/server.xmlにリスナーを追加する

<リスナークラス名="com.atomikos.tomcat.AtomikosLifecycleListener" />

ステップ 3: tomcat/config/context.xml にデータ ソースと関連するトランザクション マネージャーを追加します。以下は参考例です。必要に応じてパラメーターを変更します。

 <リソース名="jdbc/DS_MYSQL"

            auth="コンテナ"

            タイプ="com.atomikos.jdbc.AtomikosDataSourceBean"

            ユニークリソース名="jdbc/DS_MYSQL"

            xaDataSourceClassName="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"

            xaProperties.databaseName="db_test"

            xaProperties.serverName="localhost"

            xaProperties.port="3306"

            xaProperties.user="ルート"

            xaProperties.password="ルート"

            最大プールサイズ="200"

            xaProperties.url="jdbc:mysql://localhost:3306/db_test?characterEncoding=UTF8"

            ファクトリー="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory" />

  <リソース名="UserTransaction"

            auth="コンテナ"

            タイプ="javax.transaction.UserTransaction" />   

   <トランザクションファクトリー="com.atomikos.icatch.jta.UserTransactionFactory" />

ステップ 4: tomcat/lib ディレクトリに jta.properties ファイルを追加し、Atomikos トランザクション関連のパラメータを設定します。それ以外の場合は、デフォルトの構成パラメータが使用されます。同時トランザクション数 (デフォルトでは 50) とタイムアウトを調整する必要があります。ファイル内のいくつかのパラメータ構成を以下に示します。パラメータの説明については、公式ドキュメントを参照してください: https://www.atomikos.com/Documentation/JtaProperties

このライン構成を追加する

com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory

Atomikosのパラメータのデフォルト値は、transactions.jar、transactions-default.propertiesで定義されています。興味があれば、自分で確認してみてください。

上記の 4 つの手順を設定すると、Tomcat の統合が完了します。プロジェクト内で Spring を使用して、データ ソースとトランザクション マネージャーを関連付けることができます。参考構成は次のとおりです。

<!-- アプリケーション サーバーに接続するために使用される JNDI テンプレート構成情報 -->

<bean クラス="org.springframework.jndi.JndiTemplate" id="jndiTemplate" />
<bean クラス="org.springframework.jndi.JndiObjectFactoryBean" id="データソース">

    <プロパティ名="jndiName">

        <値>java:comp/env/jdbc/DS_MYSQL</値>

    </プロパティ>

    <プロパティ名="jndiテンプレート">

        <ref bean="jndiテンプレート"/>

    </プロパティ>

</bean>

<bean id="jdbcTemplate" クラス="org.springframework.jdbc.core.JdbcTemplate">

    <プロパティ名="データソース">

        <ref bean="データソース" />

    </プロパティ>

</bean>  

<!--ユーザー トランザクション オブジェクト-->

<bean クラス="org.springframework.jndi.JndiObjectFactoryBean" id="userTransaction">

    <!--class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">-->

    <プロパティ名="jndiName">

        <値>java:comp/UserTransaction</値>

    </プロパティ>

    <プロパティ名="jndiテンプレート">

        <ref bean="jndiテンプレート"/>

    </プロパティ>

</bean>

<bean id="atomikosTransactionManager" クラス="com.atomikos.icatch.jta.UserTransactionManager"

    init-method="init" destroy-method="close">

    <プロパティ名="forceShutdown" 値="false" />

</bean>

<!-- アノテーションベースの宣言的トランザクション マネージャーを構成する -->

<bean id="transactionManager" クラス="org.springframework.transaction.jta.JtaTransactionManager">

    <プロパティ名="userTransaction" ref="userTransaction" />

    <プロパティ名="transactionManager" ref="atomikosTransactionManager" />

</bean> 

<tx:annotation-driven transaction-manager="transactionManager" />

以下は私のプロジェクトで使用されている設定です。conf.xmlで設定することをお勧めします。

Tomcat 構成で使用される XA データ ソースと JDBC ドライバーは、非 XA 関連の設定を使用できます。Atomikos は、実行速度を向上させるために非 XA 接続もサポートしています。 nonXa データ ソースに関しては、次の構成を参照できます。

<リソース名="jdbc/DS_MYSQL"

 auth="コンテナ"
    タイプ="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean"

        ユニークリソース名="jdbc/DS_MYSQL"

        ドライバークラス名="com.mysql.jdbc.Driver"

        最大プールサイズ="200"

        url="jdbc:mysql://localhost:3306/db_test?characterEncoding=UTF8"

        ユーザー="root"

        パスワード="root"

        ファクトリー="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory" />

**落とし穴記録**

**ここでは、トランザクション マネージャー TransactionManager があるため、この型を通じて UserTransaction を取得することはできません。デバッグ後、このクラスが見つからないことがわかりました**

**UserTransaction を正常に取得するには、type="com.atomikos.icatch.jta.userTransactionImp" に変更します。**

 <リソース名="UserTransaction"

            auth="コンテナ"
タイプ="com.atomikos.icatch.jta.userTransactionImp"/>   

   <トランザクションファクトリー="com.atomikos.icatch.jta.UserTransactionFactory" /> 

https://blog.csdn.net/xuyu_yt/article/details/77905553?locationNum=14%20fps=1

Tomcat と Atomikos を組み合わせて JTA を実装する方法についての記事はこれで終わりです。Atomikos による JTA の実装に関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springboot jta atomikos は分散トランザクション管理を実現します

<<:  HTML で自動ページジャンプを実現する 5 つの方法

>>:  MySql8.0 のトランザクション分離レベルエラーの問題を解決する

推薦する

Dockerで新しいイメージを手動で構築する方法

この記事では、Docker で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は...

Xtrabackup を使用して MySQL をバックアップおよび復元する方法

目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...

HTML H タイトルタグの使用

H タグ、特に h1 タグの使用は常に議論の的となっている問題であり、私たちが研究する価値のある問題...

Vueフィルターの詳細な説明

<本文> <div id="ルート"> <h2&...

JavaScript でシンプルなクリスマス ゲームを実装する

目次序文成果を達成するコードCSSコードJSコードHTMLコードデモンストレーションのプロセス序文ク...

Docker コンテナ ソース コードのデプロイ httpd ストレージ ボリュームを使用して Web サイトをデプロイする (推奨)

目次Dockerコンテナのソースコードを使用してhttpdをデプロイし、ストレージボリュームを使用し...

MySQL グループレプリケーションの設定手順 (推奨)

MySQL-Group-Replication は、MySQL-5.7.17 で開発された新しい機...

MySQL接続クエリにおけるととwhereの違いの簡単な分析

1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...

MySQL の count()、group by、order by の詳細な説明

最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...

Node.jsを理解するのはとても簡単です

目次Node.js の公式紹介Node.jsのコア開発言語ウェブ上の JavaScript と No...

Node.js パッケージ マネージャー npm の具体的な使用方法

目次目的npm init および package.json ファイルモジュールのインストールと管理モ...

SMS送信のカウントダウンを実装するJavaScript

この記事では、SMS送信のカウントダウンを実装するためのJavaScriptの具体的なコードを参考ま...

vscode dockerプラグインのdocker.socket権限問題を解決する

解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...

VMware仮想マシンでのLinuxのコピー&ペーストの詳細な説明

1. VMware Workstation 上の Linux: 1. ソースの更新(オプション) v...

Vue 組み込みコンポーネントのキープアライブでの LRU アルゴリズムの使用

目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...