Jes*_*sai 6 servlets ejb java-ee ejb-3.1 glassfish-3
我正在Eclipse Juno中开发一个包含EJB 3.1和Dynamic Web Project的项目。
EJB类称为FirstBean,而Servlet被称为EJB31ServletClient,我只是实现了使其在同一服务器上工作。我读到我需要设置InitialContext.lookup,但是几乎所有示例都是针对JavaSE应用程序的。
我要实现的目标:
在Glassfish 3.1.2.2服务器中部署EJB Jar,并在其他GlassFish服务器中部署动态Web项目。
在EJB31ServletClient中调用sayHello()方法。
这是我的代码:
EJB是一个非常简单的无状态会话Bean,具有无接口视图,仅显示一条消息:
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@Stateless
@LocalBean
public class FirstBean {
public FirstBean() {
}
public String sayHello() {
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
动态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());
}
}
Run Code Online (Sandbox Code Playgroud)
您需要使用远程接口创建bean。您创建的bean是Local,No-Interface bean,可以使用相同的JVM进行访问。要对bean进行远程调用,您需要创建一个带有远程接口的bean。参见下面修改后的bean代码和接口。
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";
}
}
Run Code Online (Sandbox Code Playgroud)
并且您需要使用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");
Run Code Online (Sandbox Code Playgroud)
试试这个,检查是否有效。如果找不到远程bean的JNDI名称,则只需抓取glassfish管理控制台即可找到它
| 归档时间: |
|
| 查看次数: |
5677 次 |
| 最近记录: |