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

推薦する

MySQL の問題を解決する: MSVCR120.dll が見つからないため、コードの実行を続行できません

1. 問題MySQL の初期化時に発生する問題は、次のとおりです。 1. 「MSVCR120.dll...

Windows Server 2016 AD サーバーをセットアップする手順 (画像とテキスト)

導入: AD は Active Directory の略称で、中国語では Active Direct...

Vue における Vue.use() の原理と基本的な使用法

目次序文1. 例で理解する2. ソースコードを分析する3. まとめ要約する序文他の人のコンポーネント...

Vue3は画像拡大鏡効果を実現します

この記事の例では、画像拡大鏡効果を実現するためのVue3の具体的なコードを参考までに共有しています。...

VMware Tools を最初からインストールするための詳細な手順 (グラフィック チュートリアル)

VMware Tools は VMware 仮想マシンに付属するツールで、VirtualBox (...

Vueカスタムツリーコントロールの使い方の詳細な説明

この記事では、Vueカスタムツリーコントロールの使い方を参考までに紹介します。具体的な内容は次のとお...

localStorageの有効期限を設定するいくつかの方法

目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...

Vue 3 での watch と watchEffect の新しい使い方

目次1. 時計の新しい使い方1.1. ウォッチの使用構文1.2. 複数の属性値を監視する1.3. 参...

Windows Server 2016 リモート デスクトップ サービスを展開するためのクイック スタート ガイド

現在、2016サーバーは、win2008や2012よりも優れたマルチサイトhttpsサービスをサポー...

Linux で実行中のすべてのプロセスを表示する方法

ps コマンドを使用できます。プロセスの PID など、現在実行中のプロセスに関する関連情報を表示で...

nodejsとyarnをインストールし、Taobaoソースプロセスレコードを構成する

目次1. nodejsをダウンロードする2. ダブルクリックしてインストール3. グローバル npm...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

誰もが知っておくべきウェブサイトのユーザビリティに関する 10 のヒント

これ以上時間を無駄にせず、早速本題に入りましょう。 1. ロゴに代替テキストを追加するこれには 2 ...

Vue+js 矢印をクリックして画像を切り替える

この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...