0

我有一个会话 bean,它部署在由其他人控制的 ear 文件中。我以war文件或ear文件的形式提供了一个网络应用程序。我需要为该会话 bean 提供能力,以便它可以将数据推送到我的 war 文件中的对象。我正在考虑提供一个ear 文件,其中包含一个用于Web 部件的war 文件,以及一个sar 文件来提供一个mbean,该mbean 可以从其他人正在管理的那个ear 文件中引用。我之前创建过 mbean,但这次数据不是由 mbean 处理,而是由 war 应用程序内的一个对象(单例访问?)处理。战争应用程序本质上必须拥有对持有数据的对象的自由访问权限。

如何弥合 session-bean 和 war 应用程序中的对象之间的差距?

4

1 回答 1

0

默认情况下,任何 EJB 都绑定到 JNDI。您可以轻松地使用 JNDI 从您的 servlet 中定位会话 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 的示例 servlet

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 回答