0

他の誰かが制御する ear ファイルにデプロイされたセッション Bean があります。war ファイルまたは ear ファイルの形式で Web アプリを提供しています。そのセッション Bean に機能を提供して、war ファイル内に存在するオブジェクトにデータをプッシュできるようにする必要があります。web パーツ用の war ファイルを含む ear ファイルと、その人の管理している ear ファイルから参照できる mbean を提供する sar ファイルを提供することを考えていました。以前に mbean を作成したことがありますが、今回はデータは mbean によって処理されるのではなく、war アプリ内のオブジェクト (シングルトン アクセス?) によって処理されます。本質的に戦争アプリは、データを保持しているそのオブジェクトに自由にアクセスできる必要があります。

セッション Bean と war アプリのオブジェクトの間のギャップを埋めるにはどうすればよいですか?

4

1 に答える 1

0

すべてのEJBは、デフォルトでJNDIにバインドされています。JNDIを使用すると、サーブレット内からセッションBeanを簡単に見つけて、セッションBeanを実行できます。あなたは本当にMBeanを持っている必要はありません。

これが擬似コードです(擬似だけで、コンパイルされない場合があります)

ステートフル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;
 }
}

上記のBeanにアクセスするサンプルサーブレット

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;
 }
}
于 2012-03-22T03:49:29.147 に答える