CDIを使用するプロジェクトは3つあります。プロジェクトAには、トランザクション制御のためのインターセプタがあります。@AroundInvoke(CDIプロジェクト)
プロジェクトBは、プロジェクトAを使用してデータベースにデータを保存します。これらの単位テストを実行すると、すべてが成功します。
プロジェクトCは、統合テストにプロジェクトBを使用します。これらのテストは、インターセプタから@AroundInvokeアノテーションを検出すると失敗します。
何が問題になりますか?インターセプタは、プロジェクトB beans.xmlにのみあります。
例外スタックトレースは私の心をクリアしません。ジャーナリストのエラーだけが表示されます。デバッグすると、問題はWeld内のboostrap.deploybeans()から発生することがわかりました。ですから、インターセプタクラスの@AroundInvokeについてコメントしたところ、テストではすべてうまくいっていましたが、データベースに挿入されました。私は、挿入のためのトランザクションを作成するインターセプタを削除したために起こると思います。
コード:
1)、注釈このアノテーションのインターセプタを定義するプロジェクトAが存在します。例:私はこのプロジェクトが空/META-INF/beans.xmlを持っている必要があります
/注釈/
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Transactional {
}
/インターセプター/
@Interceptor
@Transactional
public class TransactionalInterceptor implements Serializable {
…
@AroundInvoke
public Object intercept(InvocationContext context) throws Exception {
…
}
…
}
と思います。
2)プロジェクトA.例からインターセプターを使用して別のプロジェクトBがあります:
public class ProjectBClass {
…
@Transactional
public void interceptorMethod() {
…
}
…
}
だから私は、このプロジェクトは、インターセプタを有効/META-INF/beans.xmlを持たなければならないと思います。例:
<beans>
<interceptors>
<class>br.com.company.projecta.TransactionalInterceptor</class>
</interceptors>
</beans>
3)最後に、プロジェクトB.例からメソッドを使用するプロジェクトのCがあります:
は、私はそれは/ META-INF /豆を持っている必要がありますかどうかわからないです。 xml。
4)この同じプロジェクトでは、メソッドをテストする統合テストがあります。例:
public class ProjectCClassTest {
…
@Test
public void test() {
ProjectCClass projectCClass = new ProjectCClass();
projectCClass.testerMethod();
…
Assert.assertEquals(…);
}
…
}
なぜ失敗するのですか?それは例外を投げるか?予想される結果は返されませんか?テストで発生する問題は何ですか? – brandizzi
1つのアカウントから投稿してください。複数ある場合は、[マージ]することができます(http://meta.stackexchange.com/questions/18232/how-can-one-link-merge-combine-associate-two-accounts-users-anonymous-登録解除)。 – trashgod