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のkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが ...

ネストされた HTML ページの使用例 (フレームセットの使用)

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

ブラウザ(IEシリーズ)を判別するための条件付きコメント

<!--[if IE 6]> IE6 のみが認識可能 <![endif]-->...

初心者がHTMLタグを学ぶ(3)

HTML に触れる初心者は、いくつかの HTML タグを学びます。関連記事:初心者が学ぶ HTML...

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

Vue+echart で 2 列チャートを実現

この記事では、vue+echart を使って二重列チャートを実現するための具体的なコードを参考までに...

Nginx 構成 80 ポート アクセス 8080 とプロジェクト名アドレス メソッド分析

Tomcatはプロジェクトにアクセスします。通常はIP + ポート + プロジェクト名です。 Ngi...

HTMLタグのデフォルトスタイルの配置

html、address、blockquote、body、dd、div、dl、dt、fieldset...

MySQLは現在の日付と時刻を取得する関数の例の詳細な説明

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

MySQLクライアント認証後の接続失敗の問題に対する完璧なソリューション

MySQL 環境をローカル (192.168.1.152) にデプロイし、リモート クライアント 1...

MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

1 要件の概要MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウ...

Linuxのバージョン情報を復号化する方法

Linux バージョンに関する情報を表示および解釈するのは、見た目よりも少し複雑です。単純なバージョ...

ネイティブWeChatアプレット開発におけるreduxの使用の詳細な説明

前提複雑なシナリオでは、複数の異なるページ間で大量のデータを使用したり変更したりする必要があります。...

JavaScriptのループの違いについての詳細な説明

目次序文列挙可能なプロパティ反復可能なオブジェクトforEachメソッドとmapメソッドチェーン呼び...

シングルサインオン制御を実装するためのVueの完全なコード

参考までに、Vue シングル サインオンのデモをご紹介します。詳細を知りたい方のお役に立てれば幸いで...