コメントに十分なスペースがないような答えとしてこれを追加する:過去に
、私は別のEntityManager /セッションを作成し、後でそれらを注入することによって、バニラ春にテストしてみました。私はあなたがSpringの統合テストからこれをどうやって行うことができるのかよくわかりませんが、それは考えを引き起こすかもしれません。
次のコードでは、アカウントはバージョン管理された小さなオブジェクトです。 Spring Integration Flow(または何かが呼び出されている場合)をカスタムエンティティマネージャでインスタンス化することができます。
public void shouldThrowOptimisticLockException() {
EntityManager em1 = emf().createEntityManager();
EntityManager em2 = emf().createEntityManager();
EntityTransaction tx1 = em1.getTransaction();
tx1.begin();
Account account = new Account();
account.setName("Jack");
account.updateAudit("Tim");
em1.persist(account);
tx1.commit();
tx1.begin();
Account account1 = em1.find(Account.class, 1L);
account1.setName("Peter");
EntityTransaction tx2 = em2.getTransaction();
tx2.begin();
Account account2 = em2.find(Account.class, 1L);
account2.setName("Clark");
tx2.commit();
em2.close();
tx1.commit(); //exception is thrown here
em1.close();
}
あなたは、少なくとも追加のスレッドが必要になりますよう、することはできません。トランザクションとリソース管理はスレッドベースなので、2つのスレッドを持たない限り、それは難しくて複雑になるでしょう。 –
スレッドを生成することなく何も方法がありません...スプリングテストはありますか?これを行うために使用するユーティリティ?または、どこかのコード例ですか? – victor
__parallel__と言うと、コードに2つのスレッドが必要です。そうでなければ、悪いテストをしています。なぜ新しいスレッドを作成したくないのですか? – rascio