EJBのスタブを注入するには@EJB
タグを使用します。以前のトレイルで見たJSPページのセッションBeanのルックアップのコードは不要になります。下の例では、CalculatorMDB
クラスのフィールド変数rm
はRecordManager
型で、これはRecordManagerBean
ステートレスセッションBeanのローカルインタフェースです。つまり、コンテナはRecordManagerBean
のスタブを取得する方法を見つけ、最初に使用される前にrm
にスタブを割り当てます。開発者の視点で見ると、ルックアップをしなくてもrm
に自動的に値が代入されます。
public class CalculatorMDB implements MessageListener {
@EJB RecordManager rm;
// use the rm variable
// ... ...
}
あるいは、依存性注入のアノテーションをセッターメソッドに使用することもできます。つまり、下に示すコードは上記のコードと全く同じ動作になります。コンテナが自動的に行ってくれるので、開発者はsetCal()
メソッドを呼ぶ必要はありません。
public class CalculatorMDB implements MessageListener {
RecordManager rm;
@EJB
public void setRm (RecordManager rm) {
this.rm = rm;
}
// use the rm variable
// ... ...
}
ある状況下では、コンテナがBeanインスタンスを見つける方法を指定するために、@EJB
アノテーションにいくつかの属性を指定することもできます。
beanName
属性はEJBのクラス名(パッケージ名無し)を指定します。あるいはEJBにXML記述子がある場合は、ejb-name
属性を指定します。
beanInterface
属性は、変数の型がビジネスインタフェースの親クラスだった場合に、Beanのローカルビジネスインタフェースまたはリモートビジネスインタフェースを指定します。Beanインスタンスが注入され、自動的にフィールド変数の型にキャストされます。
mappedName
属性はBeanインスタンスのJNDI名を指定します。デフォルトのJNDI名は、"EARファイルの基本名"/"Beanクラス名"/local(またはremote)です。
下に示すコードは、beanName
属性とmappedName
属性を使用してStatelessCalculator
セッションBeanを見つけ、注入する例です。
public class CalculatorMDB implements MessageListener {
@EJB (beanName="StatelessCalculator")
// or @EJB (mappedName="EJB3Trail/StatelessCalculator/local")
Calculator cal;
// use the cal variables
// ... ...
}
最後の注入方法は、@EJBs
アノテーションを使用して、配列に複数のEJBインスタンスを注入することです。