問題タブ [atomikos]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java接続プール、マルチスレッドバッチの最大接続数はいくつですか?
大きな結果セットで選択を行うJavaバッチがあります(Springコールバックハンドラーを使用して要素を処理します)。callbackhandlerは、行を処理するためにタスクを固定スレッドプールに配置します。私のプールサイズは16スレッドに固定されています。結果には約100kの要素が含まれています。すべてのdbアクセスコードはJdbcTemplateまたはHibernate/Springを介して処理され、手動の接続管理はありません。AtomikosとCommonsDBCPを接続プールとして使用してみました。
さて、このバッチを終了するには、接続プール内の最大17の接続で十分だと思います。1つは選択用で、16は接続プール内のいくつかの行を更新するスレッド用です。ただし、最大プールサイズを1桁大きく指定する必要があるため(正確な値を試していません)、最初にローカルWindowsマシンで動作する50を試しましたが、そうではないようです。 Unixテスト環境では十分です。そこで、それを機能させるために128を指定する必要があります(ここでも、50から128の間の値を試していませんでしたが、直接128になりました)。
これは正常ですか?私が見逃している接続プールの基本的なメカニズムはありますか?開いた接続で何が起こるかを確認する方法がわからないため、これをデバッグするのは難しいと思います。さまざまなlog4j設定を試しましたが、満足のいく結果が得られませんでした。
編集、追加情報:接続プールのサイズが小さすぎると思われる場合、バッチがハングしているようです。プロセスでjstatを実行すると、すべてのスレッドが新しい接続を待機していることがわかります。最初は、dbcp接続プールでmaxWaitプロパティを指定しなかったため、スレッドは新しい接続で無期限に待機し、バッチがハングし続けていることに気付きました。したがって、接続は解放されませんでした。ただし、これは+ -70k行を処理した後にのみ発生し、接続リークの最初の兆候をなんとかして却下しました。
edit2:タスクの更新部分をすでに書き直したことを忘れました。ConcurrentLinkedQueueで更新を確認し、1000個の要素で更新を空にします。だから私は実際には約100回の更新しか行いません。
edit3:Oracleを使用しており、並行utilsを使用しています。したがって、16の固定プールサイズで構成されたエグゼキューターがあります。このエグゼキューターでタスクを送信します。タスクで接続を手動で使用するのではなく、スレッドセーフで接続プールからの接続を要求するjdbctemplateを使用します。Spring/DBCPが接続/スレッドの問題を処理すると思います。
jakarta-ee - 例外をスローするトランザクション コミット: ロールバックのみに設定されたトランザクション
私のアプリケーションは、DB2 サーバー上の 2 つのデータベースで分散トランザクションを実行しようとしています。アプリ サーバーは websphere 6.1 であり、Atomikos を TM として使用しています。
UserTranaction.commit() が次の例外で失敗しています: javax.transaction.RollbackException: トランザクションはロールバックのみに設定されてい ます 完全なスタック トレースは次のとおりです:
コードでのみトランザクションをロールバックするように設定していません。デフォルトで設定されていると思います。変更して、rollbackOnlyに設定したくありません。また、トランザクション後に commit() を明示的に呼び出しています。なぜ私はまだこの例外を受けているのですか? トランザクションが確実にコミットされるようにするにはどうすればよいですか?
spring - Atomikosを使用した2フェーズコミット(2PC)構成
2フェーズコミット(2PC)をテストするためのサンプルアプリケーションを作成しています。ここで使用されているコードビットをインターネットから取得しました。私はバックエンドとしてMySQLでSpring、Hibernate、Atomikosを使用しています。2つのデータベースを使用していますが、意図的に2番目のデータベースを呼び出すと、最初のデータベース呼び出しがロールバックされるかどうかを確認できません。残念ながら、うまくいかないようです。サンプルコードを含むリンクを教えてもらえますか?
以下は私の構成です:
Hibernateセッションファクトリ:
dataSource構成:
Spring JTA構成:
上記で定義した2つのsessionFactoriesを挿入する2つのDAOImplがあります。以下は、Javaコードからの呼び出しです。
どんなポインタも大いに役立ちます。
ありがとう
spring - Spring、Atomikos、Tibco EMS 5.1 統合の問題
Spring アプリケーションでAtomikosを構成しようとしています。私は使っている:
- アトミコス 3.7.1 (TransactionsEssentials)
- 春 3.0.2
- ティブコ EMS 5.1
JNDI for JMS を使用した接続ファクトリーの構成の詳細と、Tibco EMS 構成に関する詳細を教えてもらえますか?
私は次のことを試しました:
しかし、このエラーが発生します:
spring - Spring Data JPA が JtaTransactionManager の呼び出しに失敗する
私は Spring Data JPA (SDJ) を使用していますが、統合テスト中に奇妙な状況に遭遇しました。おそらく何かを誤って構成したのですが、それが何であるかがわかりません。
一言で言えば、SDJは、リポジトリ インターフェイスで宣言された何らかの種類のメソッド (つまり、 を拡張するもの)PlatformTransactionManager
があると、Spring の実装の呼び出しに失敗したように見えます。私はこの振る舞いを非常に平凡な理由に掘り下げました。この状況では、のセッターは単に呼び出されませんが、理由を理解できませんでした。JpaRepository<T, ID>
JtaTransactionManager
インターフェイスにメソッド宣言がない場合 - すべてが正常に機能します。JtaTransactionManager
セッターは正常に起動し、トランザクションが開始されますが 、設定ミスやバグの可能性を回避するためだけに不要なカスタム リポジトリを作成することは本当に嫌いです (カスタム リポジトリを実装することで実際に回避できることを確認しました)。言及された行動)。
ここでアイデアが不足しているため、情報を提供していただければ幸いです。
これは私の関連するスタックです:
- JDK1.5
- 春 3.1.1.RELEASE
- Spring Data JPA 1.1 GA (バージョン 1.0.3 で確認された問題)
- アトミコス 3.7.0
- OpenJPA 2.0.1
- DB2 9.7
この初歩的なインターフェイスは正常に実行されます。
次のリポジトリ インターフェイスでは、以下の例外が発生します。
誘発された例外 (Spring アプリケーション コンテキストのブートストラップ中に、「構成時」に例外がスローされます):
爆撃するコード (OpenJPAAbstractBrokerFactory
クラス) を詳しく調べると、OpenJPA は (以下の OpenJPA プロパティ マップで定義されているように) 指定されたトランザクション マネージャーを期待することになりますが、JtaTransactionManager
クラスのセッターがまったく呼び出されないため、Spring はそれを提供しません (デバッグ中にこの動作を確認しました)。
逆に、メソッドを持たないインターフェースが呼び出された場合は、setter が正常に呼び出され、OpenJPA にトランザクション マネージャーを提供します。
これが私の構成です - あなたが気付くかもしれず、潜在的に関連する可能性のあることの1つは、persistence.xml
ファイルをまったく使用していないことです。
情報源
取引管理者
エンティティ マネージャ
OpenJPA プロパティー
JPAリポジトリスキャナー
前もって感謝します
jndi - Tomcat7.0.27およびAtomikos3.7.1で自動公開した後、JNDIリソースが見つかりませんでした
Spring、Tomcat 7.0.27、Atomikos3.7.1を使用してWebアプリケーションを構築しています。Atomikosの統合ガイドライン:Tomcat7Integration35に従いました。Tomcat 7.0.27にはもう存在しない2つのリスナーを除いて、すべてが機能します。そのため、これら2つのリスナーをserver.xmlファイルに含めませんでした。
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
Tomcatを初めて起動すると、すべてが機能します。コードを変更してTomcatがアプリケーションを自動的に公開しようとすると、context.xmlで定義されたJNDIリソースが見つかりません(例外:javax.naming.NameNotFoundException)。サーバーを停止して再起動する必要があります。これにより、アプリケーションは正常に公開されます。
他の誰かがこれを経験しましたか?これについて何かアドバイスをいただければ幸いです。
spring - トランザクションの二次キャッシュと生成された識別子
私は次のスタックを持っています:
- 休止状態 3.6.9.Final
- 春 3.1.1
- アトミコス 3.7.1
- インフィニスパン 4.2.1.FINAL
- MySQL
RuntimeException がスローされたときに、現在のトランザクションがデータベースだけでなくトランザクション 2LC でもロールバックされることを確認するために、いくつかのテストを書いています。
誰かが説明してくれることを望んでいた奇妙な結果がいくつか見つかりました。
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL) で注釈が付けられた @Entity を String @Id とともに使用すると、ID を割り当ててエンティティを保存すると、期待どおりの結果が得られます。
- 例外がスローされず、トランザクションがコミットされ、2LC にエンティティが含まれている場合、次を使用してこれを確認しました。
sessionFactory.getCache().containsEntity(MyEntity.class, myIdentifier)
- 例外がスローされた場合、データベースにも 2LC にもエンティティが含まれていません。
@Entity
ただし、示されているように、生成された@Id
(MySQL 自動インクリメント long プロパティ)を持つを使用してこれらのテストを繰り返すと:
スローされた例外に関係なく、エンティティが 2LC に配置されることはありません。
私はいくつかのデバッグを行いましたAbstractSaveEventListener#performSaveOrReplicate
. 割り当てられた@Id
useIdentityColumn は false であるため、EntityInsertAction をインスタンス化して実行し、新しいエンティティを 2LC に配置します。
逆に、@Id
MySQL によって生成された場合、useIdentityColumn が true であることがわかり、EntityIdentityInsertAction をインスタンス化して実行します。これには、次のように 2LC に関するコメント アウトされたコードが含まれています。
これには何か理由がありますか?キャッシュの挿入は別の場所で行う必要がありますか? これはバグですか?
誰かがこの違いとこれがどのように機能するかについて何か光を当てることができれば、私は非常に感謝しています.
この質問を Hibernate フォーラムに投稿しましたが、あまり興味がありませんでした。
spring - Atomikos JTA トランザクション マネージャーを使用すると、Spring ユニット テストがロールバックされない
Atomikos JTA Transaction Manager を使用したいと考えています。完了したらロールバックしたい単体テストがあり、次の実行のためにテーブルをクリーンなままにします。
以下のように構成されたSpringバンドルのJTAトランザクションマネージャーで実行すると
... 我々が得る:
しかし、Atomikos Transaction Manager を次のように構成して実行すると、次のようになります。
... 我々が得る:
要するに、Atomikos は明らかな理由もなく、飛行中の Tx を ABORTING および TERMINATING しているようです。誰かが理由を知っていますか?
mysql - Spring3-Hibernate3-複数のMySQLデータベースでのクエリ
単一のサーバーに格納されている複数のMySQLデータベースでクエリを実行する小さなプログラムを開発しようとしています。たとえば、データベースD1のテーブルX1のフィールド、およびデータベースD2のテーブルX2のフィールドから値を取得するselectステートメントがあるとします。
Hibernate 3.5に加えて、フレームワークとしてSpring3を使用しています。これを達成するために、Spring / Hibernateプロジェクトを設定するにはどうすればよいですか?
多くのソースが、DBごとに個別の休止状態の構成/セッションファクトリを必要とし、Atomikosなどのトランザクションマネージャーを使用する必要があることを確認しました。しかし、私は明確な方向性/指示を見つけることができませんでした。
提供された助けに感謝します!(要求があれば、より多くの情報を提供できます)
transactions - JTAは複数のスレッドで機能しますか?
JTAの仕様から、スレッドを呼び出す場合にのみ分散トランザクションが機能する(またはサポートされる)ことを理解しています。これは、トランザクションが複数のスレッドにまたがることができないことを意味しますか?それとも実装に依存しますか?
スレッド間でXAをサポートするJTA実装はありますか?
ありがとう!