junit を使用して未加工の POJO API を介して (EJB 3.0) EJB の統合テスト中に代替データソースを注入することについての簡単な質問です。
生の POJO サービスを EJB3 セッション Bean に変換しています。そうすることは、POJO に直接注釈を付けることを意味するだけです。サービスには、既存の junit 統合テスト (実際のテスト データベースにクエリを実行するメソッドの結果をチェックする) も付随しています。
これらのサービスのいくつかは、直接の java.sql.Connection を必要とするため、注入された DataSource を介してこれを構成するつもりです。これの意図は、Bean をアプリケーション サーバー (たまたま WLS) に直接デプロイできるようにすることです。ただし、既存の統合テストも引き続き機能することを望んでいます。これらのテストは独自のテスト データベースに対して実行されるため、(POJO/非コンテナー環境で) 統合テストを実行するときにテスト構成を挿入できる必要があります。
質問は:
EJB を設定したら、コンテナ内で操作せずに注入された Bean をオーバーライドする方法はありませんか?
別の言い方をすれば、未加工の POJO 統合テストを実行するときに、新しい JNDI 構成を挿入する簡単な方法はありませんか?
サービスの例は次のようになります。
@Stateless(mappedName="MyInterface")
public class MyClassImpl implements MyInterface {
...
@Resource(name="jdbc/MyAppServerDataSourceJNDIName")
DataSource ds;
Connection conn;
...
}
注意: DataSource と Connection をサービスに残すつもりはありません。有機的にリファクタリングする前に、適切に動作するようにしたいだけです。
私が検討している解決策:
- 私が持っている1つの(かなりひどい)概念は、パッケージプライベートであるサービスの接続にセッターを提供することです。このようにして、junit テストは実行前に接続を設定できます。次に、アプリサーバー環境で、挿入された DS が使用されます。かわいくないけど。
- 私は ejb3unit (BaseSessionBeanFixture) を見て、それを検討しています。
- また、junit で EJB コンテナーを作成し、コンテナー内で実行できることも理解しています。問題は、簡単なjunitテストを使用してPOJO(EJBではなく)に対して基本機能をテストしたいということです。
- 私はこれが春にできることを知っており(私は少しEJBの初心者です)、春の構成を使用してEJBを配線することを検討しています。
そこには多くの情報がありますが、具体的なものはありません (主に JPA)。ただし、SOの他の場所にいくつかの良い指針があります。
前もって感謝します。