我正在 Eclipse Juno 中开发一个包含 的项目。 EJB 3.1 和 动态网页项目 .
EJB 类被称为 第一 bean Servlet 被称为 EJB31ServletClient , 我已经实现了使它在 中工作同一台服务器 .我读过我需要设置 InitialContext.lookup 但几乎所有示例都是为 JavaSE 应用程序制作的。
我要达到的目标:
这是我的代码:
EJB 是一个非常简单的无状态 session Bean 与 无界面查看只显示一条消息:
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@Stateless
@LocalBean
public class FirstBean {
public FirstBean() {
}
public String sayHello() {
return "Hello";
}
}
动态 Web 项目只有一个 Servlet,其代码如下:
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.theopentutorials.businesslogic.FirstBean;
@WebServlet("/EJB31ServletClient")
public class EJB31ServletClient extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
FirstBean bean;
public EJB31ServletClient() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println(bean.sayHello());
}
}
最佳答案
您需要使用远程接口(interface)创建 bean。您创建的 bean 是一个可以使用相同 JVM 访问的 Local 、 No-Interface bean。要对 bean 进行远程调用,您需要创建一个具有远程接口(interface)的 bean。见下面修改后的 bean 代码和接口(interface)。
public class FirstBeanRemote{
public String sayHello() ;
}
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@Stateless
@LocalBean
@Remote(FirstBeanRemote.class)
public class FirstBean {
public FirstBean() {
}
public String sayHello() {
return "Hello";
}
}
您需要使用 JNDI 查找从其他服务器查找您的 EJB。
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("org.omg.CORBA.ORBInitialHost", "*hostname*");
props.setProperty("org.omg.CORBA.ORBInitialPort", "*3700*");//default port
InitialContext ctx = new InitialContext(props);
FirstBeanRemote bean = (FirstBeanRemote) ctx.lookup("java:global/*EARNAME/EJBJARNAME*/FirstBean!*fullyqualifiedpackage*.FirstBeanRemote");
试试这个并检查它是否有效。如果您找不到远程 bean 的 JNDI 名称,只需抓取您的 glassfish 管理控制台,以便您可以找到它
关于jakarta-ee - 从不同的服务器远程访问 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219621/