EJB3.0に基づく新しいプロジェクトを開始しています。私は「春」ベースのバックグラウンドを持っている(そしてそれが大好きです)ので、私にとって緩い結合とテスト容易性は大きな必需品です。この投稿は「ejbvs.spring」に関するものであってはなりません。あなたがすでにこれで実際のプロジェクト経験を持っているならば、それは完璧でしょう。
問題を示すためのサンプルコードを次に示します。
クライアント->ejb->コラボレーター1->コラボレーター..->コラボレーターn
<!-- language: java -->
@Stateless
public class SampleService {
// or @Inject via CDI
// or @Autowired via Spring
@EJB // or just use a stateless session bean via EJB 3.0
private Bank bank;
// same for this component
@EJB
private Calculator calc;
// both collaborators must be settable from outside, to make everything testable (and mockable)
/**
* sample "business service" called from client
*/
public void debit(BigDecimal amount){
calc.calculate(amount.subtract(new BigDecimal(100)));
bank.debit(amount);
}
}
// or via @Component (Spring), or CDI?
@Stateless // or Stateless Session bean with optional @Service/@Singleton annotation?
public class Calculator {
public void calculate(BigDecimal subtract) {
// calculate stuff....
}
}
// or via @Component (Spring), or CDI?
@Stateless // or Stateless Session bean with optional @Service/@Singleton annotation?
public class Bank {
public void debit(BigDecimal amount) {
// ...
}
}
ejb 3.0ですべてのコラボレーターとそのコラボレーターに依存性注入を実装するための最良の方法を知りたいですか?この意味での共同作業者は、非常に小さな専用クラスである可能性があります。
これまでに次のオプションについて説明してきましたが、いつものようにまだ適切な結論は出ていません:)
ejb標準は、すべてがステートレスセッションBeanであり、すべての結果(プーリング、リソース処理など)でのみ使用されます。
ステートレスセッションBeanを「ビジネスコンポーネント」(エントリポイント)として使用し、それ以降
a)スプリングワイヤード依存関係(「jbosssnowdrop」統合による)
b)CDI有線依存関係(ejb3.0およびjbosseap 5.1のWELD経由)
単体テストでBeanをどのように使用できるかを知る必要はありません。私が求めている答えは、実行中のappserver内のすべての依存関係を接続するための最良のアプローチです(Spring vs. Guice vs. CDI vs.EJB)。外側のEJB(「ビジネスエントリポイント」)から下に向かってグラフを知る必要があるだけです。したがって、外部のすべて(サーブレット、フロントエンドなど)はこの質問の範囲ではありません:)
プロジェクトにEJB3.0とjbosseap5.1が設定されていると仮定してください:)
あなたの答えと、うまくいけばプロジェクトベースの知識を楽しみにしています。