ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]最佳实践:EJB: 从 EJB 会话 bean 访问 EJB 实体 bean

[转载]最佳实践:EJB: 从 EJB 会话 bean 访问 EJB 实体 bean

原创 Linux操作系统 作者:dinner1007 时间:2019-01-04 17:15:04 0 删除 编辑

最佳实践:EJB: 从 EJB 会话 bean 访问 EJB 实体 bean


使用 EJB 会话 bean 访问 EJB 实体 bean。通过用会话 bean 包装实体 bean,您能获得更佳性能。这加强了通过活动的进程对象包装被动的数据实体对象这一有效的对象模型概念。然而,可以编写 EJB 客户机来直接访问实体 bean ,但是这样以性能为代价。通过用会话 bean 包装实体 bean 可以获得最佳性能。

读者: 开发人员

产品: WebSphereApplication Server

版本: 3.0.2.x、3.5.x 和 4.0

平台: 所有

关键字: Servlet、JSp 和 EJB

摘要

使用 EJB 会话 bean 访问 EJB 实体 bean。通过用会话 bean 包装实体 bean,您能获得更佳性能。这加强了通过活动的进程对象包装被动的数据实体对象这一有效的对象模型概念。然而,可以编写 EJB 客户机来直接访问实体 bean,但是这样以性能为代价。通过用会话 bean 包装实体 bean 可以获得最佳性能。

建议

避免从客户机或 servlet 代码访问 EJB 实体 bean。这个最佳实践满足了两个性能方面的问题:

一种更好的方法是从 EJB 会话 bean 访问 EJB 实体 bean。以下是 EJB 会话 bean 包装 EJB 实体 bean 的一个示例:

EJB 会话 bean 包装 EJB 实体 bean

 import java.rmi.RemoteException;
import java.security.Identity;
import java.util.properties;
import javax.ejb.*;
import com.ibm.uxo.bestpractices.datamodels.*;
public class EmployeeRosterBean implements SessionBean {
private EmployeeHome employeeHome;
private javax.ejb.SessionContext mySessionCtx = null;
final static long serialVersionUID = 3206093459760846163L;
public void ejbCreate() throws javax.ejb.CreateException,
java.rmi.RemoteException {
employeeHome = EmployeeEjbHomeCacheHelper.getEmployeeHome()}
public EmployeeStruct getEmployeeInfoFor(String empno) {
Employee theEmployee = null;
EmployeeStructure returnValue = new EmployeeStructure();
try {
theEmployee = employeeFindByprimaryKey(new EmployeeKey(empno));
returnValue.setSex(theEmployee.getSex());
returnValue.setSalary(theEmployee.getSalary());
returnValue.setphoneno(theEmployee.getphoneno());
returnValue.setMidinit(theEmployee.getMidinit());
returnValue.setLastname(theEmployee.getLastname());
returnValue.setJob(theEmployee.getJob());
returnValue.setHiredate(theEmployee.getHiredate());
returnValue.setFirstnme(theEmployee.getFirstnme());
returnValue.setEmpno(empno);
returnValue.setEdlevel(theEmployee.getEdlevel());
returnValue.setComm(theEmployee.getComm());
returnValue.setBonus(theEmployee.getBonus());
returnValue.setBirthdate(theEmployee.getBirthdate());
returnValue.setWorkDept(theEmployee.getWorkdept());
} catch (Exception e) {
e.printStackTrace();
}
return returnValue;
}
public void ejbActivate() throws java.rmi.RemoteException {}
public void ejbpassivate() throws java.rmi.RemoteException {}
public voide ejbRemove() throws java.rmi.RemoteException {}
}

应被取代的方法

下列代码段说明了使用 servlet 从客户机代码直接访问 EJB 实体 bean。图 1显示了直接访问相对于使用 EJB 会话 bean 来包装 EJB 实体 bean 的性能影响。

EJB 实体 bean 的直接客户机访问

public class BpEmploymentServletV0 extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) {
EmployeeHome employeeHome = null;
Employe employee = null;
try {
ServletOutputStream out = response.getOutputStream();
employee = employeeHome.findByprimaryKey(new EmployeeKey(empno));
out.println("");
out.println("
"+employee.getFirstnme()+"");
out.println("
"+employee.getLastname()+"");
out.println("
"+employee.getSex()+"");
out.println("
"+employee.getBirthdate().toString() +

");
out.println("
"+employee.getEdlevel()+"");
out.println("
"+employee.getJob()+"");
out.println("
"+employee.getHiredate()+"");
out.println("
"+employee.getWorkdept()+"");
out.println("
"+employee.getphoneno()+"");
out.println("
"+employee.getSalary.toString()+"");
out.println("
"+employee.getComm().toString()+"");
out.println("
"+employee.getBonus().toString()+"");
out.println("");
} catch (Exception e) {
e.printStackTrace();
}
}
}



图 1. 将 EJB 实体 bean 包装在 EJB 会话 bean 内的性能影响

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130501/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    686
  • 访问量
    474878