質問

しばらく前に、 Spring AOPを使用したアプリケーションを作成しましたトランザクションメソッドを定義します。私は今、これがどれほど素晴らしいアイデアであるかについて再考しています。マイナーなリファクタリング(メソッドシグネチャの変更など)の後に数回ヒットしましたが、実際には何かが実際にうまくいかなくなるまで明らかになりません(そして、論理的に一貫性のないデータベースがあります)。

だから私はいくつかのことに興味があります:

  1. 他の人が明示的なトランザクション管理に戻すことを決めましたか(例: @Transactional アノテーションを使用)
  2. 何かが「壊れた」かどうかを識別するのに役立つ、ビルドプロセスの一部として使用できる便利なツールはありますか?
  3. 人々がAOPを使用してトランザクションを管理している場合、私が犯した間違いを避けるためにどのような手順を取っていますか?

IntelliJ IDEAを使用しています。これにより、装飾されたメソッドを参照し、Springの XML 構成とメソッド名の変更をリファクタリングできますが、これだけでは十分ではありません(メソッドにパラメーターを追加する間違った場所は、たとえばアスペクトが発火するかどうかに影響する可能性があります)

役に立ちましたか?

解決

現在、2つのJavaプロジェクトで宣言型トランザクション管理を使用しており、 @Transactional アノテーションでトランザクションスコープが必要なメソッドを指定しています。私の意見では、柔軟性と堅牢性の良い組み合わせです:単純なテキスト検索を介してどのメソッドがトランザクションの振る舞いを持っているかを見ることができ、必要に応じて手作業で分離と伝播の属性を調整できます、そして追加のタイピングの量は実質的に過失です。

これらのプロジェクトの1つでは、アスペクトを介してセキュリティ/ロギングを実装しており、メソッドの名前を変更したり署名を変更したりするときに同じ障害にたまに遭遇しました。最悪の場合、契約にアクセスするユーザーのログデータが失われ、あるリリースでは、一部のユーザーロールがすべてのアプリケーション機能にアクセスできませんでした。何も大きなことはありませんが、データベーストランザクションに関する限り、それだけの価値はないと思うので、自分で @Transactional ビットを入力する方が良いと思います。とにかく、Springが難しい部分をしています。

他のヒント

に関して(1): 過去数年間に取り組んだすべてのプロジェクトで、@ Transactonalはより実用的なソリューションであることがわかりました。ただし、非常に特殊なケースでは、@ Transactionが単一のトランザクションマネージャーに関連付けられているため、Spring AOPを使用して複数のJDBC接続/ TransactionManagerを使用できるようにする必要がありました。

に関して(2): とはいえ、混合シナリオでは、壊れたコードを見つけるために多くの自動テストを行います。 SpringのAbstractTransactionalJUnit4SpringContextTests / AbstractTransactionalTestNGSpringContextTestsを使用してテストを作成します。これはこれまで非常に効果的なソリューションでした。

私は純粋主義者になる傾向がありますが、データベース自体の内部で、単純な自動コミットを超えてあらゆるトランザクション管理を維持しようとしています。ほとんどのデータベースは、トランザクション管理の処理に優れています。結局のところ、データベースの目的の重要なコンポーネントの1つです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top