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 のトランザクション分離レベルエラーの問題を解決する

推薦する

CentOS 7 で PHP 5.4 を 5.6 にアップグレードする方法の簡単な分析

1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...

Vueはフォーム検証機能を実装します

この記事では主に、NUXT の validate メソッドに基づいてフォーム検証を実装する方法につい...

JavaScript ベースで年・月・日の 3 階層連携を実現

この記事では、年、月、日の3段階のリンクを実現するためのJavaScriptの具体的なコードを参考ま...

ZabbixはSNMPに基づいてLinuxホストを監視します

序文: Linux ホストは、エージェント プログラムをインストールする場合でも、SNMP を使用す...

CSSでフレックス配置を表示する(レイアウトツール)

display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...

js を使用して 2 つの HTML ウィンドウ間で通信する方法

シナリオ: ページAがページBを開くと、ページBで操作した後、ページAは変更されたデータを同期する必...

MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック

この記事の環境はWindows 10、MySQLのバージョンは5.7.12-logです1. 基本的な...

nginx 設定ファイルで環境変数を使用する方法

序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...

Centos 用の rpm パッケージのカスタマイズと yum リポジトリの構築に関するチュートリアル

1 yumでソフトウェアをインストールしたときにダウンロードしたrpmパッケージを保存しますyum ...

Linux ファイル操作でよく使われるコマンドのまとめ

0. 新しい操作: mkdir abc #新しいフォルダを作成 touch abc.sh #新しいフ...

Redo ログと Undo ログに基づく MySQL クラッシュ回復の分析

目次MySQLクラッシュ回復プロセス1. ブラックボックス下のデータフローを更新する2. やり直しロ...

jQueryの競合問題を解決する方法

フロントエンド開発において、$ は jQuery の関数です。$ のパラメータが異なると、実装される...

Homebrewを使用してMacにMySQLをインストールするときにログインできない問題を解決する

お使いのコンピュータが Mac の場合、homebrew を使用して MySQL をインストールする...

JS 矢印関数に適さないシナリオは何ですか?

目次概要オブジェクトにメソッドを定義するオブジェクトリテラルオブジェクトプロトタイプ動的コンテキスト...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...