すべてのEJBは、デフォルトでJNDIにバインドされています。 JNDIを使用してサーブレット内からセッションBeanを簡単に見つけ出し、セッションBeanを実行できます。あなたは本当にMBeansを持つ必要はありません。
ここ擬似コード(単に擬似コンパイルなくてもよい)である
サンプルステートフルBean
package org.jboss.example;
import javax.ejb.Stateful;
@Stateful
public class StatefulBean {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
私への参照を取得し、上記豆
package org.jboss.example;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BeanServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter writer = response.getWriter();
StatefulBean statefulBean = getStatefulBean(request);
writer.println("State: " + statefulBean.getState());
}
private StatefulTestBean getStatefulBean(HttpServletRequest request)
throws ServletException {
StatefulBean sb = null;
try {
InitialContext ic = new InitialContext();
sb = (StatefulBean) ic.lookup("java:ejb/StatefulBean");
} catch (NamingException e) {
throw new ServletException(e);
}
}
return sb;
}
}
にアクセスするサンプル・サーブレット戦争側からのセッションBeanにリンクするプロキシへのインタフェースです。戦争がセッションBeanからデータを取得する必要があるなら、それは素晴らしいことです。しかし、セッションBeanは戦争中のオブジェクトにデータOUTをプッシュする必要があります。私は戦争の中のオブジェクトへの参照をセッションBeanに渡すことはできないと思いますか?オブジェクトはシリアル化されてしまうでしょうか?どのようにセッションBeanからのデータのプッシュを解決するために戦争に...? – Mike
「PUSHデータOUT」の意味に従っているかどうかわかりません。ステートフルBeanは単にデータを格納します。 Beanが作成されると、Beanにセッションに格納してアクセスすることができます。イベントリスナーが必要な場合は、ステートフルBeanの変更によって他のコンポーネントが登録して待機できるイベントが生成されるように、それに応じてアーキテクトする必要があります。 – uaarkoti
ステートフルステートレスBeanについて何も言及していませんでした。私はセッションBeanについて言及しました。私はセッションBeanにビジネスロジックがあることを述べておきます。したがって、これはデータの格納ではなく、一部の外部エンティティが呼び出せるビジネスロジックを実行するためです。次に、セッションBean内のビジネスロジックは、warコンポーネント内のオブジェクトに「結果をプッシュアウト」する必要があります。 – Mike