EJB または POJO のいずれかのクラスがあります (わかりません)。このクラスのインスタンスを作成する必要があります。この操作のパターンはありますか? または、EJB アノテーションを手動でチェックしてから、JNDI ルックアップを行う必要がありますか?
public Object instantiate(Class c) {
return /* ... */
}
EJB クラスは、コンテナーによってのみインスタンス化する必要があります。それ以外の場合は、EJB ではありません。EJB インスタンスを取得する場合は、JNDI を介して検索するか、注入します。
アノテーションを確認することで、クラスが EJB であると想定されているかどうかを確認できます。
if (clazz.isAnnotationPresent(Stateless.class)
|| clazz.isAnnotationPresent(Statefull.class)) { .. };
(そしておそらくメッセージ主導型)
POJO (Plain Object Java Object) は通常、new 演算子でインスタンス化されます。
MyClass myClass = new MyClass( args )
また、リフレクションを介して作成することもできます。
MyClass myClass = MyClass.class.newInstance();
EJB3 はほぼ間違いなくデフォルトのコンストラクタを持つ POJO です。インスタンス化しても問題ありません。デフォルトのコンストラクターを持つクラスについても同じです。
言うだけ
clazz.newInstance();
これで完了です。
任意のクラスのインスタンスを作成するメソッドを作成している場合、このメソッドはパラメーター化する必要があります。
public <T> T instance(Class<T> clazz)
はい、EJB3 アノテーションを確認し、その JNDI 名が何であるかを何らかの形で把握する必要があります (コンテナによって異なる場合があります)。
Seam フレームワークは、JNDI 名パターンを使用してこれを行います ( seam のドキュメントを参照してください)。このようにして、Seam コンテキストに POJO と EJB を混在させることができます。