私はこの目標を達成しようとしています: EJB の注入を行う単純なサーブレットで作成された WAR をデプロイし、その上でビジネス メソッドを呼び出します。
すべては、次の 2 つのコンポーネントで作成された Maven プロジェクトを使用して作成されます。
1) サンプル EJB (pom.xml は ejb としてパッケージ化) 2) サンプル WAR (サーブレット、pom.xml を WAR としてパッケージ化。ejb モジュールへの依存)
WAR と EJB の両方を EAR 内にパッケージ化する別の方法でこの演習を行うことができますが、上記の方法では実行できないことを最初にお伝えします。使用しているアプリケーション サーバー (WebLogic 10.3.3) に制限があるかどうか教えてください。
SimpleServlet (WAR) のコード スニペット:
public class SimpleServlet extends HttpServlet {
@EJB(mappedName="ejb/SimpleSessionBean")
private SimpleSessionRemote simpleSessionBean;
SimpleSession リモート インターフェイス (EJB) のコード スニペット:
@Remote
public interface SimpleSessionRemote
{
String getMessage();
}
SimpleSession Bean クラス (EJB) のコード スニペット:
@Stateless(name="SimpleSessionEJB", mappedName="ejb/SimpleSessionBean")
@Remote(SimpleSessionRemote.class)
public class SimpleSession
{
...
EJB には weblogic-ejb-jar.xml デプロイメント記述子がないため、完全にアノテーションが付けられた EJB です。
Admin Console で WAR をデプロイした後、サーブレットに直接注入した後に null 参照を取得します。
どうしたの?ステップを忘れましたか?
よろしく、 ピエルルイジ・サレラ
=================================
更新:私は自分で答えを見つけました
EJB 3.1 をサポートしていない App Server では不可能です。
実際、私が使用している WebLogic は、次のように EJB 3.0 をサポートしています。
http://docs.oracle.com/cd/E14571_01/web.1111/e14529/compatibility.htm
"
WebLogic Server 11g リリース 1 (10.3.3) は JEE5 と互換性があります
"
Java EE 5 は、次のように EJB 3.0 をサポートしています。
また、EJB 3.0 仕様 (JSR220) も確認しましたが、実際には、ejb を .war 内にパッケージ化することはできないと明示的に言及されていません。これがサポートされていないという事実は、暗黙のうちに残されていると思います。
完全な概要を提供するために、最終的に EJB 3.1 仕様 (JSR318) を確認しました。
エンタープライズ Bean は、Web アプリケーション モジュール (.war) 内にパッケージ化することもできます"
、第 20 章 パッケージ。
したがって、私の演習の範囲は、EJB 3.1 仕様をサポートしていないアプリケーション サーバーでは、WAR でエンタープライズ Bean をパッケージ化できないことを実証することであると結論付けることができます。
敬具、 ピエルルイジ・サレラ