問題タブ [transactions]
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 Web アーキテクチャに相当する .NET
ほぼすべての新しい Java-web-project は、Web 層に Struts や Spring MVC などの最新の MVC フレームワーク、「サービス」/ビジネスロジック層に Spring、永続性に Hibernate などの ORM マッパーを使用しています。.NET で同等のものは何ですか?
ASP.NET は Web 層に使用され、ADO.NET は永続性に使用されると思いますが、Spring に相当するもの、つまり、トランザクションやコンポーネントなどを配線するために使用されるものです。
私は Spring.NET を知っていますが、.NET でアプリケーションを構築する事実上の方法にもっと興味があります。
java - Hibernate および Spring トランザクション - プライベート コンストラクター/静的ファクトリ メソッドの使用
次の Spring Bean を持つ Hibernate/Spring アプリケーションがあります。
アプリケーションを一緒に配線すると、休止状態のエンティティでプライベート コンストラクターを使用すると、次のエラーが発生します。
エンティティは、従業員などの典型的なドメイン オブジェクトです。
コンストラクターの可視性修飾子をパッケージ (またはパブリック) に変更すると、アプリケーションは正常に動作し、エンティティはデータベースに格納/ロードされます。Spring/Hibernate トランザクション管理でプライベート コンストラクター/静的ファクトリ メソッドを使用するにはどうすればよいですか?
Hibernate アノテーションを使用して、エンティティ/関係をマッピングします。問題に関連するドメイン クラスの applicationContext.xml で Bean 定義が宣言されていません。これは、静的ファクトリ メソッドとプライベート コンストラクタを持つ必要がある pojo です。
Hibernate (私が推測する org.springframework.spring-orm.hibernate3 クラス) でコンストラクターの代わりに静的ファクトリー メソッドを使用するにはどうすればよいでしょうか? または、必要に応じてプライベートコンストラクターを呼び出すようにしますか?
spring factory-method 構成を使用することは理にかなっていますが、エンティティは applicationContext.xml で Bean としてマップされていません。これらは、Hibernate の永続性のために @Entity アノテーションでのみアノテーションが付けられます。
この編集により、質問が(わかりにくくなるのではなく)明確になることを願っています。:)
c# - TransactionScope がトランザクションをロールバックしない
これが私のトランザクション スコープ ソース コードの現在のアーキテクチャです。3 番目の挿入は .NET 例外 (SQL 例外ではない) をスローし、前の 2 つの挿入ステートメントをロールバックしていません。私が間違っていることは何ですか?
編集: insert2 と insert3 から try/catch を削除しました。また、insert1 の try/catch から例外処理ユーティリティを削除し、"throw ex" を配置しました。それでもトランザクションはロールバックされません。
編集 2: Insert3 メソッドに try/catch バックを追加し、catch ステートメントに「スロー」を追加しました。それでもトランザクションはロールバックされません。
更新:私が受け取ったフィードバックに基づいて、「SqlHelper」クラスは SqlConnection オブジェクトを使用してデータベースへの接続を確立し、次に SqlCommand オブジェクトを作成し、CommandType プロパティを「StoredProcedure」に設定して、SqlCommand の ExecuteNonQuery メソッドを呼び出します。
また、Transaction Binding=Explicit Unbind を現在の接続文字列に追加しませんでした。次のテストで追加します。
java - Hibernate で更新されている値が、それを読んでから変更されていないことを確認するにはどうすればよいですか?
Hibernate を使用してデータベースからオブジェクトを読み取り、値を変更し、オブジェクトを保存したいという問題があります。値の変更に時間がかかる場合、データベース内の基になるオブジェクトが変更されていないことを確認する最善の方法は何ですか? これを 1 つのトランザクション (および 1 つのセッション) で行っています。
コードは次のようになります。
.net - System.Transaction暗黙のトランザクションが他の接続を台無しにする
System.Transaction.TransactionScopeを使用して、いくつかのストアドプロシージャを呼び出すトランザクションを作成しようとしていますが、それ自体がクリーンアップされていないようです。トランザクションが終了すると(コミットされているかどうかに関係なく、トランザクションスコープオブジェクトが破棄されると)、データベースへの後続の接続は、通常のように読み取りコミットではなく、シリアル化可能な読み取りコミットレベルで開きます。
呼び出しごとに接続を開いたり閉じたりします(.NETの通常のように接続のプールを閉じて戻る)、トランザクションでの使用が終了したときに接続を明示的にリセットする方法がありませんか?System.Transaction.TransactionScopeの背後にある考え方は、すべての複雑さを隠すことだと思いました。
したがって、私が持っているコードは次のようになります。
これが通常の方法だと思います。しかし、sqlserverプロファイラーを見ると、接続が開かれていることがわかります。
これは、後続の非トランザクション関連のデータベースアクティビティを台無しにしており、明らかにそれほど高速ではありません。ReadCommitedを使用してトランザクションを明示的に実行するようにトランザクションオプションを設定することでこれを回避できますが、これは私の意見ではこの操作の理想的な動作ではありません。
また、Commitabletransactionオブジェクトを明示的に作成し、アンビエントトランザクションを使用する代わりに、明示的な新しいトランザクションを作成しようとしましたが、それでも運がありません。
これを修正する方法についてのアイデアは、シリアル化可能な接続を使用する呼び出しがreadpastロックヒントを使用しようとするとエラーをスローするため、非常に高く評価されます。
sql-server - ロールバックが可能かどうかの ADO.NET チェック
ADO.NET で現在のトランザクションをロールバックできるかどうかを確認できるかどうかを自問しています。
msdn は、次の実装を提案しています。
さらに、次の注意事項があります。トランザクションをロールバックするときは、Try/Catch 例外処理を常に使用する必要があります。接続が終了した場合、またはトランザクションがサーバー上で既にロールバックされている場合、Rollback は InvalidOperationException を生成します。
しかし、ロールバックが可能かどうかを確認するために try/catch が推奨される解決策であるとは本当に信じられません。
SQL Server の実装では、トランザクションが「ゾンビ」の場合、SQLTransaction オブジェクトは Connection プロパティで null を返すことを知っています。
ただし、これは実装固有のものであり、SQL Server でのみ機能します。
では、トランザクションをロールバックできるかどうかを検出する db に依存しない方法はありますか?
ティア・マーティン
java - Spring単体テストを実行しているAOPの問題
AOP の JDK プロキシを使用するように構成された Spring Web アプリケーションがあります。AOP アノテーション (@Transactional など) は、実装クラスではなくインターフェイスで宣言されます。
アプリケーション自体は正常に動作しますが、単体テストを実行すると、AOP 機能に (JDK プロキシではなく) CGLIB を使用しようとしているようです。これにより、テストが失敗します。以下にスタック トレースを追加しました。
テストの実行時に CGLIB が使用されている理由がわかりません。なぜなら、Spring の構成はアプリケーションの実行時とほぼ同じだからです。おそらく重要な違いの 1 つは、テスト構成がJTA トランザクション マネージャーの代わりにDataSourceTransactionManagerを使用することです。テスト クラス自体はすべてAbstractJUnit4SpringContextTestsを拡張しますが、このクラスは何らかの形で CGLIB を使用するように配線されているのでしょうか?
編集: コメンテーターの 1 人が、Spring 構成を投稿するように要求しました。以下に省略形で示します (つまり、無関係な Bean と XML 名前空間は省略されています)。
spring-servlet.xml
applicationContext-service.xml
applicationContext-test.xmlこれは、単体テストの実行時にのみ含まれます。その目的は、他の構成ファイルで宣言されている Bean の一部を上書きすることです。
mysql - Rails トランザクション
を使おうとしていますActiveRecord::Base.transaction
。Rails 1.2.6 と mysql 5.0 を使用すると、デフォルトではロールバックが機能しないことがわかりました。もう少し遊んでautocommit
みると、mysql接続で0に設定されていないことがわかりました。
質問:
1) すべての接続に対してレールで自動コミットを無効にするにはどうすればよいですか?
2) トランザクションである必要のない他のコードに悪影響を及ぼしますか?
java - Terracotta を永続化ソリューションとして使用する場合
Terracotta を持続性ソリューション (データベースの代わり) として使用するのは良い考えでしょうか? 特に、データの整合性の問題とトランザクション システムのサポートについて疑問に思っています。
c++ - 1 つの接続での複数のデータベース トランザクション
マルチスレッド プログラムがありますが、各スレッドは実行開始時に MySql 接続プール クラスから 1 つの接続を取得します。次にスレッドは、多数のデータベース テーブル ラッパー クラスを使用して、そのデータベース接続をラッパー クラスに渡すことにより、ビジネス ロジックを実行します。これらのラッパー クラスの操作は必ずしもシーケンシャルではなく、単一のデータベース接続を使用して、これらのラッパー クラスが互いに独立してデータベース テーブルの変更をコミットまたはロールバックできるようにしたいと考えています。私は、MySql がネストされたトランザクションを許可していないことを認識しており、これを達成する方法を見つけていません。どんな助けでも大歓迎です。ありがとう!